Nov 242021
 

一个pod,容器,要两块网卡,我以前也觉得很变态,吃饱没事撑着。当你真的实际场景,真的有这样的需求

对着官方文档,先来一遍,体验一下

我需要实现的就是下图的数据网络

我是使用kubekey来进行安装,用2个vm来做试验。使用calico的网络

# kubectl get nodes
NAME       STATUS   ROLES                         AGE     VERSION
master01   Ready    control-plane,master,worker   3h54m   v1.22.1
work01     Ready    worker                        3h54m   v1.22.1

下载multus代码

git clone https://github.com/k8snetworkplumbingwg/multus-cni.git && cd multus-cni
cat ./deployments/multus-daemonset.yml | kubectl apply -f -

没搞明白,为啥官方文档使用multus-daemonset-thick-plugin.yml,外面的文档都是:multus-daemonset.yml

如果顺利

# kubectl get pods -n kube-system | grep -i multus
kube-multus-ds-tdcf4                           1/1     Running   0          133m
kube-multus-ds-xlf4m                           1/1     Running   0          133m

macvlan-conf.yaml

master :eth0, 这个地方设置,应该是重点,如果机器有另外一块网卡,我应该可以考虑指向它。

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.4.0/24",
        "rangeStart": "192.168.4.200",
        "rangeEnd": "192.168.4.216",
        "routes": [
          { "dst": "0.0.0.0/0" }
        ],
        "gateway": "192.168.4.1"
      }
    }'

根据自己需求,修改一下macvlan的网段

kubectl create -f macvlan-conf.yaml
kubectl get network-attachment-definitions
kubectl describe network-attachment-definitions macvlan-conf

验证

samplepod.yaml

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

kubectl create -f samplepod.yaml
kubectl exec -it samplepod -- ip a

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@if19: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1440 qdisc noqueue state UP 
    link/ether c6:c1:90:ac:c4:e4 brd ff:ff:ff:ff:ff:ff
    inet 10.233.106.10/32 brd 10.233.106.10 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 82:84:7e:da:6f:b8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.200/24 brd 192.168.4.255 scope global net1
       valid_lft forever preferred_lft forever

查看一下pod

# kubectl describe pod samplepod
Name:         samplepod
Namespace:    default
Priority:     0
Node:         master01/192.168.20.21
Start Time:   Wed, 24 Nov 2021 16:48:04 +0800
Labels:       <none>
Annotations:  cni.projectcalico.org/containerID: 75777c27377709cfba50d9f8ef59209869c26d0707f0ad38343351eae904d16a
              cni.projectcalico.org/podIP: 10.233.106.10/32
              cni.projectcalico.org/podIPs: 10.233.106.10/32
              k8s.v1.cni.cncf.io/network-status:
                [{
                    "name": "k8s-pod-network",
                    "ips": [
                        "10.233.106.10"
                    ],
                    "default": true,
                    "dns": {}
                },{
                    "name": "default/macvlan-conf",
                    "interface": "net1",
                    "ips": [
                        "192.168.4.200"
                    ],
                    "mac": "82:84:7e:da:6f:b8",
                    "dns": {}
                }]
              k8s.v1.cni.cncf.io/networks: macvlan-conf
              k8s.v1.cni.cncf.io/networks-status:
                [{
                    "name": "k8s-pod-network",
                    "ips": [
                        "10.233.106.10"
                    ],
                    "default": true,
                    "dns": {}
                },{
                    "name": "default/macvlan-conf",
                    "interface": "net1",
                    "ips": [
                        "192.168.4.200"
                    ],
                    "mac": "82:84:7e:da:6f:b8",
                    "dns": {}
                }]
Status:       Running
IP:           10.233.106.10
IPs:
  IP:  10.233.106.10

 Leave a Reply

(required)

(required)

This site uses Akismet to reduce spam. Learn how your comment data is processed.