配置 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" } ] }'