7.7. 配置 host-device 网络

作为集群管理员,您可以使用 host-device Container Network Interface (CNI) 插件为集群配置额外网络。该插件允许您将指定网络设备从主机的网络命名空间移到 Pod 的网络命名空间。

7.7.1. 使用 host-device CNI 插件创建额外网络附加

Cluster Network Operator (CNO) 管理额外网络定义。当您指定要创建的额外网络时,CNO 会自动创建 NetworkAttachmentDefinition 自定义资源 (CR)。

重要

请勿编辑 Cluster Network Operator 所管理的 NetworkAttachmentDefinition CR。这样做可能会破坏额外网络上的网络流量。

先决条件

  • 安装 OpenShift 命令行界面 (CLI),通常称为 oc
  • 以具有 cluster-admin 特权的用户身份登录。

流程

要为集群创建额外网络,请完成以下步骤:

  1. 运行以下命令来编辑 CNO CR:

    $ oc edit networks.operator.openshift.io cluster
  2. 通过为要创建的额外网络添加配置来修改您要创建的 CR,如以下示例 CR 中所示。

    以下 YAML 配置 host-device CNI 插件:

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      additionalNetworks: 1
      - name: test-network-1
        namespace: test-1
        type: Raw
        rawCNIConfig: '{
          "cniVersion": "0.3.1",
          "type": "host-device",
          "device": "eth1"
        }'
    1
    指定额外网络附加定义的配置。
  3. 保存您的更改,再退出文本编辑器以提交更改。
  4. 可选:通过运行以下命令确认 CNO 创建了 NetworkAttachmentDefinition CR。CNO 创建 CR 之前可能会有延迟。

    $ oc get network-attachment-definitions -n <namespace>
    NAME                 AGE
    test-network-1       14m

7.7.1.1. 配置 host-device

使用 host-device Container Network Interface (CNI) 插件的额外网络附加配置由以下两个部分提供:

  • Cluster Network Operator (CNO) 配置
  • CNI 插件配置

CNO 配置指定额外网络附加的名称,以及用于在其中创建网络附加的命名空间。该插件由 CNO 配置中 rawCNIConfig 参数指定的 JSON 对象进行配置。

以下 YAML 描述了 CNO 的配置参数:

Cluster Network Operator YAML 配置

name: <name> 1
namespace: <namespace> 2
rawCNIConfig: '{ 3
  ...
}'
type: Raw

1
为您要创建的额外网络附加指定名称。该名称在指定的 namespace 中需要是唯一的。
2
指定要在其中创建网络附加的命名空间。如果您未指定值,则使用 default 命名空间。
3
基于以下模板,以 JSON 格式指定 CNI 插件配置。
重要

仅设置以下参数之一来指定您的网络设备:deviceHWaddrkernelpathpciBusID

以下对象描述了 host-device CNI 插件的配置参数:

host-device CNI 插件 JSON 配置对象

{
  "cniVersion": "0.3.1",
  "name": "<name>", 1
  "type": "host-device",
  "device": "<device>", 2
  "hwaddr": "<hwaddr>", 3
  "kernelpath": "<kernelpath>", 4
  "pciBusID": "<pciBusID>", 5
    "ipam": { 6
    ...
  }
}

1
为您之前为 CNO 配置提供的 name 参数指定值。
2
指定设备的名称,如 eth0
3
指定设备硬件 MAC 地址。
4
指定 Linux 内核设备路径,如 /sys/devices/pci0000:00/0000:00:1f.6
5
指定网络设备的 PCI 地址,如 0000:00:1f.6
6
为 ipam CNI 插件指定配置对象。该插件管理网络附加定义的 IP 地址分配。
7.7.1.1.1. host-device 配置示例

以下示例配置了名为 hostdev-net 的额外网络:

name: hostdev-net
namespace: work-network
type: Raw
rawCNIConfig: '{ 1
  "cniVersion": "0.3.1",
  "type": "host-device",
  "device": "eth1"
}'
1
以 YAML 字符串形式指定 CNI 配置对象。

7.7.1.2. 配置 ipam CNI 插件

IP 地址管理 (IPAM) CNI 插件为其他 CNI 插件管理 IP 地址分配。您可以配置 ipam 以进行静态 IP 地址分配或使用 DHCP 进行动态 IP 地址分配。您指定的 DHCP 服务器必须可从额外网络访问。

重要

在 OpenShift Container Platform 4.2.0 中,如果您将 Pod 附加到使用 DHCP 进行 IP 地址管理的额外网络中,则 Pod 将无法启动。OpenShift Container Platform 4.2.1 已修复了这个问题。如需更多信息,请参阅 BZ#1754686

以下 JSON 配置对象描述了您可以设置的参数。

重要

如果您将 type 参数设置为 DHCP 值,则无法设置任何其他参数。

ipam CNI 插件 JSON 配置对象

{
  "ipam": {
    "type": "<type>", 1
    "addresses": [ 2
      {
        "address": "<address>", 3
        "gateway": "<gateway>" 4
      }
    ],
    "routes": [ 5
      {
        "dst": "<dst>" 6
        "gw": "<gw>" 7
      }
    ],
    "dns": { 8
      "nameservers": ["<nameserver>"], 9
      "domain": "<domain>", 10
      "search": ["<search_domain>"] 11
    }
  }
}

1
指定 static,以配置插件来管理 IP 地址分配。指定 DHCP,以允许 DHCP 服务器管理 IP 地址分配。如果指定了 DHCP 值,则无法指定任何其他参数。
2
定义分配给虚拟接口的 IP 地址的数组。支持 IPv4 和 IPv6 IP 地址。
3
您以 CIDR 格式指定的分配给 worker 节点上 Pod 的 IP 地址块,如 10.1.1.0/24
4
出口网络流量要路由到的默认网关。
5
描述要在 Pod 中配置的路由的数组。
6
CIDR 格式的 IP 地址范围。
7
用于将网络流量路由到的网关。
8
DNS 配置。可选。
9
用来发送 DNS 查询的一个或多个 IP 地址的数组。
10
附加到主机名的默认域。例如,如果将域设置为 example.com,对 example-host 的 DNS 查找查询将被改写为 example-host.example.com
11
在 DNS 查找查询过程中,附加到非限定主机名(如 example-host)的域名的数组。
7.7.1.2.1. 静态 IP 地址分配配置示例

您可以配置 ipam 以进行静态 IP 地址分配:

{
  "ipam": {
    "type": "static",
      "addresses": [
        {
          "address": "191.168.1.1/24"
        }
      ]
  }
}
7.7.1.2.2. 动态 IP 地址分配配置示例

您可以配置 ipam 以使用 DHCP:

{
  "ipam": {
    "type": "DHCP"
  }
}