多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ### **准备工作** 安装好K8S集群,安装好网络插件,这里我们使用的网络插件是Calico-3.8,如下: ``` $ kubectl get node NAME STATUS ROLES AGE VERSION 192.168.2.102 Ready master 4h31m v1.17.3 192.168.2.103 Ready <none> 4h31m v1.17.3 $ kubectl get pod -n kube-system | grep calico-node calico-node-t648z 1/1 Running 0 4h32m calico-node-x8h7h 1/1 Running 0 4h32m ``` ### **安装multus** 下载这个[multus-daemonset.yaml](https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/images/multus-daemonset.yml)文件到K8S的Master主机上,然后执行命令安装: ``` $ kubectl apply -f multus-daemonset.yaml ``` 安装成功后,会在每个节点上生成一个Pod ``` $ kubectl get pod -n kube-system -o wide | grep -i multus kube-multus-ds-256dw 1/1 Running 0 2m 192.168.2.103 192.168.2.103 <none> <none> kube-multus-ds-fbkk6 1/1 Running 0 2m 192.168.2.102 192.168.2.102 <none> <none> ``` ### **创建网络接口的配置** 在Master上创建文件macvlan-config.yaml,内容如下,需要注意的是:`subnet`这个网段不能和主机网段、Service网段、Calico网段冲突。 ``` apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: macvlan-conf spec: config: '{ "cniVersion": "0.3.0", "type": "macvlan", "master": "eth0", "mode": "bridge", "ipam": { "type": "host-local", "subnet": "192.168.3.0/24", "rangeStart": "192.168.3.200", "rangeEnd": "192.168.3.216", "routes": [ { "dst": "0.0.0.0/0" } ], "gateway": "192.168.3.1" } }' ``` 然后执行命令创建这个配置文件 ``` $ kubectl apply -f macvlan-conf.yaml ``` ### **创建Pod** 接下来,我们来创建一个Pod,pod.yaml文件如下 ,在annatation中添加如下的key-value,这样Pod就会拥有多网卡: ``` apiVersion: v1 kind: Pod metadata: name: samplepod annotations: k8s.v1.cni.cncf.io/networks: macvlan-conf spec: containers: - name: samplepod command: ["/bin/ash", "-c", "trap : TERM INT; sleep infinity & wait"] image: alpine ``` 我们来创建这个Pod,并查看Pod里面的网卡信息,发现多了一个网卡,IP为192.158.3.200 ``` $ kubectl get pod NAME READY STATUS RESTARTS AGE samplepod 1/1 Running 0 2m $ kubectl exec -it samplepod -- ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 4: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1440 qdisc noqueue state UP link/ether 9a:d2:c7:11:b7:67 brd ff:ff:ff:ff:ff:ff inet 172.26.190.193/32 scope global eth0 valid_lft forever preferred_lft forever 5: net1@tunl0: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 8e:23:c8:e8:8c:0e brd ff:ff:ff:ff:ff:ff inet 192.168.3.200/24 brd 192.168.3.255 scope global net1 valid_lft forever preferred_lft forever ``` ### **参考** * https://kubernetes.io/zh/docs/concepts/cluster-administration/networking/#multus-a-multi-network-plugin * https://github.com/k8snetworkplumbingwg/multus-cni/blob/master/docs/quickstart.md