配置 Kube-OVN 网络支持 pod 多网卡(Alpha)
通过使用 Multus CNI, 为 Pod 添加多块不同网络的网卡。使用 Kube-OVN 网络的 Subnet 和 IP 的 CRD 来进行 IP 的高级管理,实现子网管理,IP 预留,随机分配,固定分配等功能。
安装 Multus CNI
- 
克隆代码: git clone https://github.com/k8snetworkplumbingwg/multus-cni.git
- 
进入目录: cd multus-cni/deployments
- 
应用 multus 资源: kubectl apply -f multus-daemonset.yml
创建子网
- 
根据以下示例创建 attachnet子网:network-attachment-definition.yml。注意:config 中的 provider 格式为 <NAME>.<NAMESPACE>.ovn,<NAME>和<NAMESPACE>分别为此 NetworkAttachmentDefinition CR 的name和namespace。apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: attachnet namespace: default spec: config: '{ "cniVersion": "0.3.0", "type": "kube-ovn", "server_socket": "/run/openvswitch/kube-ovn-daemon.sock", "provider": "attachnet.default.ovn" }'创建完成后应用资源。 kubectl apply -f network-attachment-definition.yml
- 
使用以下示例创建第二个网卡所在的 Kube-ovn 子网: subnet.yml。注意: - 
spec.provider必须与 NetworkAttachmentDefinition 中的provider保持一致。
- 
若需要使用 Underlay 子网,将子网的 spec.vlan 设置为需要使用的 VLAN CR 名称即可。其它子网参数按需配置。 
 apiVersion: kubeovn.io/v1 kind: Subnet metadata: name: subnet1 spec: cidrBlock: 172.170.0.0/16 provider: attachnet.default.ovn创建完成后应用资源。 kubectl apply -f subnet.yml
- 
创建 Pod 配置多网卡
- 
根据以下示例创建 pod。 注意: - 
metadata.annotations中需要包含一个k8s.v1.cni.cncf.io/networks=default/attachnet的键值对,值的格式为<NAMESPACE>/<NAME>,<NAMESPACE>和<NAME>分别为 NetworkAttachmentDefinition CR 的 namespace 和 name。
- 
如果 Pod 需要三网卡,将 k8s.v1.cni.cncf.io/networks的值配置为default/attachnet,default/attachnet2即可。
 apiVersion: v1 kind: Pod metadata: name: pod1 annotations: k8s.v1.cni.cncf.io/networks: default/attachnet spec: containers: - name: web image: nginx:latest ports: - containerPort: 80
- 
- 
Pod 创建成功后,使用命令 kubectl exec pod1 -- ip a查看 Pod 的 IP 地址。
- 
验证创建双网卡   
其他功能
- 
固定 IP:如果需要固定主网卡(第一网卡)的 IP,方法与单网卡使用固定 IP 相同,即为 Pod 添加 ovn.kubernetes.io/ip_address=<IP>的 Annotation。如果需要固定副网卡(第二网卡或其它网卡)的 IP,基本方法与主网卡基本相同,区别在于 Annotation Key 中的 ovn 替换为对应 NetworkAttachmentDefinition 的provider,示例:attachnet.default.ovn.kubernetes.io/ip_address=172.170.0.101。
- 
额外路由 从 1.8.0 版本开始,Kube-OVN 支持为副网卡配置额外路由。使用时,在 NetworkAttachmentDefinition 中 config 添加 routers字段,填写需要配置的路由即可,示例如下:apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: attachnet namespace: default spec: config: '{ "cniVersion": "0.3.0", "type": "kube-ovn", "server_socket": "/run/openvswitch/kube-ovn-daemon.sock", "provider": "attachnet.default.ovn", "routes": [ { "dst": "19.10.0.0/16" }, { "dst": "19.20.0.0/16", "gw": "19.10.0.1" } ] }'