RKE2集群中Multus CNI部署与多网络接口配置指南
1. RKE2集群网络架构基础解析RKE2作为新一代Kubernetes发行版其网络模型采用独特的双栈设计。默认情况下RKE2会部署canalCalicoFlannel组合作为主CNI插件通过VXLAN实现Pod间通信。但生产环境中常遇到以下典型需求场景需要为Pod分配额外网络接口如SR-IOV VF、DPDK接口不同业务Pod需要接入多个隔离网络平面特定应用需要直通物理网络设备这正是Multus CNI的用武之地。作为CNI元插件Multus允许单个Pod挂载多个网络接口每个接口可由不同CNI插件管理。实测在RKE2 1.21版本中Multus与默认Canal的兼容性最佳。关键认知Multus本身不提供网络功能而是作为调度器协调多个CNI插件工作。主网卡由默认CNI如Canal管理附加网卡则由其他CNI如Macvlan、IPVLAN等配置。2. 部署前环境检查与准备2.1 集群状态确认首先通过以下命令验证RKE2集群健康状态# 检查节点状态 kubectl get nodes -o wide # 检查现有CNI插件 kubectl get pods -n kube-system -lk8s-appcanal # 查看CNI配置文件 ls -l /var/lib/rancher/rke2/agent/etc/cni/net.d/正常状态下应看到所有节点处于Ready状态canal Pod运行正常存在10-canal.conflist等配置文件2.2 系统依赖检查Multus需要以下基础条件内核版本 ≥ 4.19推荐5.4iproute2工具集包含ip、tc等命令CNI插件二进制文件已部署在/opt/cni/bin通过以下命令验证uname -r ip -V ls /opt/cni/bin3. Multus CNI部署实操指南3.1 通过Helm部署Multus官方推荐使用Helm 3进行部署helm repo add k8snetworkplumbingwg https://k8snetworkplumbingwg.github.io/multus-cni helm install multus k8snetworkplumbingwg/multus \ --namespace kube-system \ --set config.cniConfDir/var/lib/rancher/rke2/agent/etc/cni/net.d \ --set config.binDir/var/lib/rancher/rke2/data/current/bin关键参数说明cniConfDir必须指向RKE2的CNI配置目录binDir需匹配RKE2的CNI二进制路径默认会生成00-multus.conf主配置文件3.2 手动验证安装检查部署结果kubectl get pods -n kube-system -l appmultus ls /var/lib/rancher/rke2/agent/etc/cni/net.d/正常输出应包含multus-daemon Pod运行中新增00-multus.conf配置文件原CNI配置未被修改4. 多网络接口配置实战4.1 Macvlan网络定义示例创建NetworkAttachmentDefinition资源apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: macvlan-conf namespace: default spec: config: { cniVersion: 0.3.1, name: macvlan-net, type: macvlan, master: eth0, mode: bridge, ipam: { type: host-local, subnet: 192.168.100.0/24, rangeStart: 192.168.100.100, rangeEnd: 192.168.100.200, gateway: 192.168.100.1 } }关键字段解析master指定宿主机父接口mode推荐bridge模式支持同一宿主机Pod间通信ipam建议使用host-local分配器4.2 Pod多网卡配置创建带附加网卡的PodapiVersion: v1 kind: Pod metadata: name: multus-pod annotations: k8s.v1.cni.cncf.io/networks: macvlan-conf spec: containers: - name: app image: nginx验证网络接口kubectl exec -it multus-pod -- ip a # 应看到eth0主网卡和net1Macvlan网卡5. 生产环境调优与排错5.1 性能优化建议对于高频网络操作场景调整Multus的日志级别为warning# values.yaml daemon: logLevel: warn启用CNI缓存提升创建速度cni: conf: multus: configuration: | { cniVersion: 0.3.1, name: multus-cni, type: multus, capabilities: { cniCache: true }, delegates: [] }5.2 常见故障排查Pod卡在ContainerCreating状态检查Multus日志kubectl logs -n kube-system -l appmultus验证CNI插件二进制是否存在ls /var/lib/rancher/rke2/data/current/bin/macvlan附加网卡无法获取IP确认NetworkAttachmentDefinition的subnet配置正确检查宿主机父接口是否允许混杂模式ip link show eth0 | grep PROMISC网络策略失效问题主网卡eth0仍受Canal网络策略控制附加网卡需要单独配置策略建议使用Calico的GlobalNetworkPolicy6. 高级应用场景扩展6.1 SR-IOV网络集成先部署SR-IOV Device Pluginkubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/sriov-network-device-plugin/master/deployments/k8s-v1.16/sriovdp-daemonset.yaml创建SR-IOV NetworkAttachmentDefinitionapiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: sriov-net spec: config: { type: sriov, cniVersion: 0.3.1, name: sriov-network, vlan: 100, ipam: { type: host-local, subnet: 10.56.217.0/24, gateway: 10.56.217.1 } }6.2 多网络平面隔离方案典型金融级网络分区架构NetworkAttachmentDefinition列表 - canal-network默认平面业务通信 - macvlan-dmz隔离区网络 - ipvlan-database数据库专用网络 - sriov-highperf高性能交易通道Pod注解示例annotations: k8s.v1.cni.cncf.io/networks: | [ {name: macvlan-dmz, interface: dmz}, {name: ipvlan-database, interface: db} ]7. 版本兼容性矩阵RKE2版本Multus版本推荐CNI组合v1.21.xv3.7.1Canal Macvlanv1.22.xv3.8.0Calico IPVLANv1.23.xv4.0.0Cilium SR-IOV重要提示升级RKE2时需先卸载Multus待集群升级完成后再重新部署避免CNI配置冲突。