7.5. 配置 macvlan 网络

作为集群管理员,您可以使用 macvlan CNI 插件为集群配置额外网络。将 Pod 附加到网络时,插件会从主机上的父接口创建一个子接口。为每个子设备生成一个唯一的硬件 MAC 地址。

重要

此插件为子接口生成的这种唯一 MAC 地址可能与您的云供应商的安全策略不兼容。

7.5.1. 使用 macvlan 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 配置 macvlan CNI 插件:

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

    $ oc get network-attachment-definitions -n <namespace>

    输出示例

    NAME                 AGE
    test-network-1       14m

7.5.1.1. 配置 macvlan CNI 插件

以下 YAML 描述了 macvlan Container Network Interface (CNI) 插件的配置参数:

macvlan YAML 配置

name: <name> 1
namespace: <namespace> 2
type: SimpleMacvlan
simpleMacvlanConfig:
  master: <master> 3
  mode: <mode> 4
  mtu: <mtu> 5
  ipamConfig: 6
    ...

1
为您要创建的额外网络附加指定名称。该名称在指定的 namespace 中需要是唯一的。
2
指定要在其中创建网络附加的命名空间。如果没有指定值,则使用 default 命名空间。
3
与虚拟接口关联的以太网接口。如果没有指定 master 的值,则使用主机系统的主以太网接口。
4
配置虚拟网络上的流量可见性。必须是 bridgepassthruprivateVepa。如果没有提供 mode 的值,则默认值为 bridge
5
将最大传输单位 (MTU) 设置为指定的值。默认值由内核自动设置。
6
为 ipam CNI 插件指定配置对象。该插件管理网络附加定义的 IP 地址分配。
7.5.1.1.1. macvlan 配置示例

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

name: macvlan-net
namespace: work-network
type: SimpleMacvlan
simpleMacvlanConfig:
  ipamConfig:
    type: DHCP

7.5.1.2. 配置 ipam CNI 插件

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

以下 YAML 配置描述了您可以设置的参数。

ipam CNI 插件 YAML 配置对象

ipamConfig:
  type: <type> 1
  ... 2

1
指定 static,以配置插件来管理 IP 地址分配。指定 DHCP,以允许 DHCP 服务器管理 IP 地址分配。如果指定了 DHCP 值,则无法指定任何其他参数。
2
如果将 type 参数设为 static,请提供 staticIPAMConfig 参数。
7.5.1.2.1. 静态 ipam 配置 YAML

以下 YAML 描述了静态 IP 地址分配的配置:

静态 ipam 配置 YAML

ipamConfig:
  type: static
  staticIPAMConfig:
    addresses: 1
    - address: <address> 2
      gateway: <gateway> 3
    routes: 4
    - destination: <destination> 5
      gateway: <gateway> 6
    dns: 7
      nameservers: 8
      - <nameserver>
      domain: <domain> 9
      search: 10
      - <search_domain>

1
定义分配给虚拟接口的 IP 地址的一系列映射。支持 IPv4 和 IPv6 IP 地址。
2
您指定的 IP 地址。
3
出口网络流量要路由到的默认网关。
4
描述要在 Pod 中配置的路由的一系列映射。
5
CIDR 格式的 IP 地址范围。
6
网络流量路由的网关。
7
可选:DNS 配置。
8
用于发送 DNS 查询的一个或多个 IP 地址的集合。
9
附加到主机名的默认域。例如,如果将域设置为 example.com,对 example-host 的 DNS 查找查询将被改写为 example-host.example.com
10
在 DNS 查找查询过程中,附加到非限定主机名(如 example-host)的域名的数组。
7.5.1.2.2. 动态 ipam 配置 YAML

以下 YAML 描述了静态 IP 地址分配的配置:

动态 ipam 配置 YAML

ipamConfig:
  type: DHCP

7.5.1.2.3. 静态 IP 地址分配配置示例

以下示例显示了静态 IP 地址的 ipam 配置:

ipamConfig:
  type: static
  staticIPAMConfig:
    addresses:
    - address: 10.51.100.11
      gateway: 10.51.100.10
    routes:
    - destination: 0.0.0.0/0
      gateway: 10.51.100.1
    dns:
      nameservers:
      - 10.51.100.1
      - 10.51.100.2
      domain: testDNS.example
      search:
      - testdomain1.example
      - testdomain2.example
7.5.1.2.4. 动态 IP 地址分配配置示例

以下示例显示了 DHCP 的 ipam 配置:

ipamConfig:
  type: DHCP

7.5.2. 后续步骤