7.2. 将 Pod 附加到额外网络

作为集群用户,您可以将 Pod 附加到额外网络。

7.2.1. 将 Pod 添加到额外网络

您可以将 Pod 添加到额外网络。Pod 继续通过默认网络发送与集群相关的普通网络流量。

先决条件

  • Pod 必须与额外网络处于相同的命名空间。
  • 安装 OpenShift 命令行界面 (CLI),通常称为 oc
  • 您必须登录集群。

流程

要添加带有额外网络的 Pod,请完成以下步骤:

  1. 在 Pod 资源定义中,将 k8s.v1.cni.cncf.io/networks 参数添加到 Pod metadata 映射中。k8s.v1.cni.cncf.io/networks 接受由一个或多个 NetworkAttachmentDefinition 自定义资源 (CR) 名称组成并用逗号分隔的字符串:

    metadata:
      annotations:
        k8s.v1.cni.cncf.io/networks: <network>[,<network>,...] 1
    1
    <network> 替换为要与 Pod 关联的额外网络的名称。要指定多个额外网络,请使用逗号分隔各个网络。逗号之间不可包括空格。如果您多次指定同一额外网络,则 Pod 会将多个网络接口附加到该网络。

    在以下示例中,两个额外网络附加到 Pod:

    apiVersion: v1
    kind: Pod
    metadata:
      name: example-pod
      annotations:
        k8s.v1.cni.cncf.io/networks: net1,net2
    spec:
      containers:
      - name: example-pod
        command: ["/bin/bash", "-c", "sleep 2000000000000"]
        image: centos/tools
  2. 运行以下命令来创建 Pod:

    $ oc create -f pod.yaml
  3. 可选:通过运行以下命令,确认 Pod CR 中是否存在注解。将 <name> 替换为 Pod 的名称。

    $ oc get pod <name> -o yaml

    在以下示例中,example-pod Pod 附加到 net1 额外网络:

    $ oc get pod example-pod -o yaml
    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/networks: macvlan-bridge
        k8s.v1.cni.cncf.io/networks-status: |- 1
          [{
              "name": "openshift-sdn",
              "interface": "eth0",
              "ips": [
                  "10.128.2.14"
              ],
              "default": true,
              "dns": {}
          },{
              "name": "macvlan-bridge",
              "interface": "net1",
              "ips": [
                  "20.2.2.100"
              ],
              "mac": "22:2f:60:a5:f8:00",
              "dns": {}
          }]
      name: example-pod
      namespace: default
    spec:
      ...
    status:
      ...
    1
    k8s.v1.cni.cncf.io/networks-status 参数是对象的 JSON 数组。每个对象描述附加到 Pod 的额外网络的状态。注解值保存为纯文本值。