kube-ovn 多网卡 pod

140 阅读4分钟

1. 仅指定 NAD 的 key, kube-ovn 会默认分配子网


---
apiVersion: v1
kind: Pod
metadata:
  name: multi-nic
  namespace: default
  annotations:
    k8s.v1.cni.cncf.io/networks: '[{"interface":"net1","name":"attachnet1","namespace":"default"}]'
spec:
  containers:
    - name: netshoot
      image: registry.paas/eki-plus/netshoot:latest
      imagePullPolicy: Never
      command:
        - sh
        - -c
        - "sleep infinity"
      securityContext:
        capabilities:
          add:
            - NET_ADMIN


# 结果, 可以创建成功,
## kube-ovn 的逻辑是,如果不指定网络,就会给 NAD 的键分配默认网络

# kgp | grep multi
default         multi-nic                                                 1/1     Running             0          58s     10.222.0.83     csy-wx-pm-os01-eis-node02   <none>           <none>

# k get ip | grep multi-nic
multi-nic.default                                                  10.222.0.83      fd11:1111:1111::53              c2:98:83:6f:2f:70   csy-wx-pm-os01-eis-node02   ovn-default
multi-nic.default.attachnet1.default.ovn                           10.222.0.82      fd11:1111:1111::52              b6:7d:02:06:5b:94   csy-wx-pm-os01-eis-node02   ovn-default


#  k describe po -n default         multi-nic
Name:         multi-nic
Namespace:    default
Priority:     0
Node:         csy-wx-pm-os01-eis-node02/10.251.137.31
Start Time:   Tue, 11 Jun 2024 17:23:41 +0800
Labels:       <none>
Annotations:  attachnet1.default.ovn.kubernetes.io/allocated: true
              attachnet1.default.ovn.kubernetes.io/cidr: 10.222.0.0/18,fd11:1111:1111::/48
              attachnet1.default.ovn.kubernetes.io/gateway: 10.222.0.1,fd11:1111:1111::1
              attachnet1.default.ovn.kubernetes.io/ip_address: 10.222.0.82,fd11:1111:1111::52
              attachnet1.default.ovn.kubernetes.io/logical_router: ovn-cluster
              attachnet1.default.ovn.kubernetes.io/logical_switch: ovn-default
              attachnet1.default.ovn.kubernetes.io/mac_address: b6:7d:02:06:5b:94
              attachnet1.default.ovn.kubernetes.io/pod_nic_type: veth-pair
              attachnet1.default.ovn.kubernetes.io/routed: true
              k8s.v1.cni.cncf.io/network-status:
                [{
                    "name": "kube-ovn",
                    "interface": "eth0",
                    "ips": [
                        "10.222.0.83",
                        "fd11:1111:1111::53"
                    ],
                    "mac": "c2:98:83:6f:2f:70",
                    "default": true,
                    "dns": {},
                    "gateway": [
                        "10.222.0.1",
                        "fd11:1111:1111::1"
                    ]
                },{
                    "name": "default/attachnet1",
                    "interface": "net1",
                    "ips": [
                        "10.222.0.82",
                        "fd11:1111:1111::52"
                    ],
                    "mac": "b6:7d:02:06:5b:94",
                    "dns": {}
                }]
              k8s.v1.cni.cncf.io/networks: [{"interface":"net1","name":"attachnet1","namespace":"default"}]
              ovn.kubernetes.io/allocated: true
              ovn.kubernetes.io/cidr: 10.222.0.0/18,fd11:1111:1111::/48
              ovn.kubernetes.io/gateway: 10.222.0.1,fd11:1111:1111::1
              ovn.kubernetes.io/ip_address: 10.222.0.83,fd11:1111:1111::53
              ovn.kubernetes.io/logical_router: ovn-cluster
              ovn.kubernetes.io/logical_switch: ovn-default
              ovn.kubernetes.io/mac_address: c2:98:83:6f:2f:70
              ovn.kubernetes.io/pod_nic_type: veth-pair
              ovn.kubernetes.io/routed: true
Status:       Running
IP:           10.222.0.83
IPs:
  IP:  10.222.0.83
  IP:  fd11:1111:1111::53
Containers:
  netshoot:
    Container ID:  containerd://2875f934bd3925835c8e8d7487d02059b6f79487711cccbb02cc2a22027e00ae
    Image:         registry.paas/eki-plus/netshoot:latest
    Image ID:      registry.paas/eki-plus/netshoot@sha256:869e0db58ed617fcffc1392548d3ccacad876e4589337b2b5ae18568ed8c2fbb
    Port:          <none>
    Host Port:     <none>
    Command:
      sh
      -c
      sleep infinity
    State:          Running
      Started:      Tue, 11 Jun 2024 17:24:11 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-jtqjt (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-jtqjt:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason          Age    From     Message
  ----    ------          ----   ----     -------
  Normal  AddedInterface  3m58s  multus   Add eth0 [10.222.0.83/18 fd11:1111:1111::53/48] from kube-ovn
  Normal  AddedInterface  3m57s  multus   Add net1 [10.222.0.82/18 fd11:1111:1111::52/48] from default/attachnet1
  Normal  Pulled          3m57s  kubelet  Container image "registry.paas/eki-plus/netshoot:latest" already present on machine
  Normal  Created         3m57s  kubelet  Created container netshoot
  Normal  Started         3m57s  kubelet  Started container netshoot

2. 指定 NAD 的 key 和 value, value 一般是 kube-ovn ipam 中的子网


---
apiVersion: v1
kind: Pod
metadata:
  name: multi-nic
  namespace: default
  annotations:
    k8s.v1.cni.cncf.io/networks: '[{"interface":"net1","name":"attachnet1","namespace":"default"}]'
    attachnet1.default.ovn.kubernetes.io/logical_switch: subnet2019
spec:
  containers:
    - name: netshoot
      image: registry.paas/eki-plus/netshoot:latest
      imagePullPolicy: Never
      command:
        - sh
        - -c
        - "sleep infinity"
      securityContext:
        capabilities:
          add:
            - NET_ADMIN


# 默认网卡由于没有指定,所以用 ovn-default
# net1 由于指定了子网,所以一定会用指定的子网

# k get po multi-nic -o yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    attachnet1.default.ovn.kubernetes.io/allocated: "true"
    attachnet1.default.ovn.kubernetes.io/cidr: 10.251.175.32/27,2409:8c20:1833:2000::afb:af20/123
    attachnet1.default.ovn.kubernetes.io/gateway: 10.251.175.62,2409:8C20:1833:2000::afb:af3E
    attachnet1.default.ovn.kubernetes.io/ip_address: 10.251.175.53,2409:8c20:1833:2000::afb:af34
    attachnet1.default.ovn.kubernetes.io/logical_switch: subnet2019
    attachnet1.default.ovn.kubernetes.io/mac_address: 8e:60:f7:05:4f:c8
    attachnet1.default.ovn.kubernetes.io/pod_nic_type: veth-pair
    attachnet1.default.ovn.kubernetes.io/provider_network: businessnet
    attachnet1.default.ovn.kubernetes.io/routed: "true"
    attachnet1.default.ovn.kubernetes.io/vlan_id: "2019"
    k8s.v1.cni.cncf.io/network-status: |-
      [{
          "name": "kube-ovn",
          "interface": "eth0",
          "ips": [
              "10.222.0.84",
              "fd11:1111:1111::54"
          ],
          "mac": "da:53:3d:28:73:07",
          "default": true,
          "dns": {},
          "gateway": [
              "10.222.0.1",
              "fd11:1111:1111::1"
          ]
      },{
          "name": "default/attachnet1",
          "interface": "net1",
          "ips": [
              "10.251.175.53",
              "2409:8c20:1833:2000::afb:af34"
          ],
          "mac": "8e:60:f7:05:4f:c8",
          "dns": {},
          "gateway": [
              "fe80::1"
          ]
      }]
    k8s.v1.cni.cncf.io/networks: '[{"interface":"net1","name":"attachnet1","namespace":"default"}]'
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"attachnet1.default.ovn.kubernetes.io/logical_switch":"subnet2019","k8s.v1.cni.cncf.io/networks":"[{\"interface\":\"net1\",\"name\":\"attachnet1\",\"namespace\":\"default\"}]"},"name":"multi-nic","namespace":"default"},"spec":{"containers":[{"command":["sh","-c","sleep infinity"],"image":"registry.paas/eki-plus/netshoot:latest","imagePullPolicy":"Never","name":"netshoot","securityContext":{"capabilities":{"add":["NET_ADMIN"]}}}],"nodeName":"csy-wx-pm-os01-eis-node02"}}
    ovn.kubernetes.io/allocated: "true"
    ovn.kubernetes.io/cidr: 10.222.0.0/18,fd11:1111:1111::/48
    ovn.kubernetes.io/gateway: 10.222.0.1,fd11:1111:1111::1
    ovn.kubernetes.io/ip_address: 10.222.0.84,fd11:1111:1111::54
    ovn.kubernetes.io/logical_router: ovn-cluster
    ovn.kubernetes.io/logical_switch: ovn-default
    ovn.kubernetes.io/mac_address: da:53:3d:28:73:07
    ovn.kubernetes.io/pod_nic_type: veth-pair
    ovn.kubernetes.io/routed: "true"
  creationTimestamp: "2024-06-11T09:35:21Z"
  name: multi-nic
  namespace: default
  resourceVersion: "178083931"
  uid: af619aee-cab6-42ed-9bcf-1f22c8922773
spec:
  containers:
  - command:
    - sh
    - -c
    - sleep infinity
    image: registry.paas/eki-plus/netshoot:latest
    imagePullPolicy: Never
    name: netshoot
    resources: {}


# kgp | grep multi
default         multi-nic                                                 1/1     Running             0          45m     10.222.0.84     csy-wx-pm-os01-eis-node02   <none>           <none>

# k get ip | grep multi
multi-nic.default                                                  10.222.0.84      fd11:1111:1111::54              da:53:3d:28:73:07   csy-wx-pm-os01-eis-node02   ovn-default
multi-nic.default.attachnet1.default.ovn                           10.251.175.53    2409:8c20:1833:2000::afb:af34   8e:60:f7:05:4f:c8   csy-wx-pm-os01-eis-node02   subnet2019