13.2. 配置额外网络


作为集群管理员,您可以为集群配置额外网络。支持以下网络类型:

13.2.1. 管理额外网络的方法

您可以通过两种方法来管理额外网络的生命周期。每种方法都是相互排斥的,您一次只能使用一种方法来管理额外网络。对于任一方法,额外网络由您配置的 Container Network Interface(CNI)插件管理。

对于额外网络,IP 地址通过您配置为额外网络一部分的 IP 地址管理 (IPAM) CNI 插件来置备。IPAM 插件支持多种 IP 地址分配方法,包括 DHCP 和静态分配。

  • 修改 Cluster Network Operator(CNO)配置:CNO 会自动创建和管理 NetworkAttachmentDefinition 对象。除了管理对象生命周期外,CNO 可以确保 DHCP 可用于使用 DHCP 分配的 IP 地址的额外网络。
  • 应用 YAML 清单:您可以通过创建 NetworkAttachmentDefinition 对象直接管理额外网络。这个方法可以串联 CNI 插件。

13.2.2. 配置额外网络附加

额外网络通过 k8s.cni.cncf.io API 组中的 NetworkAttachmentDefinition API 来配置。下表中描述了 API 的配置:

表 13.1. NetworkAttachmentDefinition API 字段
字段类型描述

metadata.name

字符串

额外网络的名称。

metadata.namespace

字符串

与对象关联的命名空间。

spec.config

字符串

JSON 格式的 CNI 插件配置。

13.2.2.1. 通过 Cluster Network Operator 配置额外网络

额外网络附加的配置作为 Cluster Network Operator(CNO)配置的一部分被指定。

以下 YAML 描述了使用 CNO 管理额外网络的配置参数:

Cluster Network Operator 配置

apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  # ...
  additionalNetworks: 1
  - name: <name> 2
    namespace: <namespace> 3
    rawCNIConfig: |- 4
      {
        ...
      }
    type: Raw

1
由一个或多个附加网络配置组成的数组。
2
您要创建的额外网络附加的名称。该名称在指定的 namespace 中需要是唯一的。
3
在其中创建网络附加的命名空间。如果您未指定值,则使用 default 命名空间。
4
JSON 格式的 CNI 插件配置。

13.2.2.2. 从 YAML 清单配置额外网络

从 YAML 配置文件指定额外网络的配置,如下例所示:

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: <name> 1
spec:
  config: |- 2
    {
      ...
    }
1
您要创建的额外网络附加的名称。
2
JSON 格式的 CNI 插件配置。

13.2.3. 额外网络类型的配置

以下部分介绍了额外网络的具体配置字段。

13.2.3.1. 配置桥接额外网络

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

表 13.2. bridge CNI 插件 JSON 配置对象
字段类型描述

cniVersion

字符串

CNI 规格版本。需要 0.3.1 值。

name

字符串

您之前为 CNO 配置提供的 name 参数的值。

type

字符串

 

bridge

字符串

指定要使用的虚拟网桥名称。如果主机上不存在网桥接口,则进行创建。默认值为 cni0

ipam

对象

IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。

ipMasq

布尔值

设置为 true,从而为离开虚拟网络的流量启用 IP 伪装。所有流量的源 IP 地址都会改写为网桥 IP 地址。如果网桥没有 IP 地址,此设置无效。默认值为 false

isGateway

布尔值

设置为 true,从而为网桥分配 IP 地址。默认值为 false

isDefaultGateway

布尔值

设置为 true,从而将网桥配置为虚拟网络的默认网关。默认值为 false。如果 isDefaultGateway 设置为 true,则 isGateway 也会自动设置为 true

forceAddress

布尔值

设置为 true,从而允许将之前分配的 IP 地址分配给虚拟网桥。设置为 false 时,如果将来自于重叠子集的 IPv4 地址或者 IPv6 地址分配给虚拟网桥,则会发生错误。默认值为 false

hairpinMode

布尔值

设置为 true,以允许虚拟网桥通过收到它的虚拟端口将其重新发送回去。这个模式也被称为反射中继。默认值为 false

promiscMode

布尔值

设置为 true,从而在网桥上启用混杂模式。默认值为 false

vlan

字符串

以整数值形式指定虚拟 LAN (VLAN) 标签。默认情况下不分配 VLAN 标签。

mtu

字符串

将最大传输单位 (MTU) 设置为指定的值。默认值由内核自动设置。

13.2.3.1.1. 网桥配置示例

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

{
  "cniVersion": "0.3.1",
  "name": "work-network",
  "type": "bridge",
  "isGateway": true,
  "vlan": 2,
  "ipam": {
    "type": "dhcp"
    }
}

13.2.3.2. 主机设备额外网络配置

注意

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

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

表 13.3. 主机 device CNI 插件 JSON 配置对象
字段类型描述

cniVersion

字符串

CNI 规格版本。需要 0.3.1 值。

name

字符串

您之前为 CNO 配置提供的 name 参数的值。

type

字符串

用于配置的 CNI 插件的名称:host-device

device

字符串

可选:设备的名称,如 eth0

hwaddr

字符串

可选:设备硬件 MAC 地址。

kernelpath

字符串

可选:Linux 内核设备路径,如 /sys/devices/pci0000:00/0000:00:1f.6

pciBusID

字符串

可选:网络设备的 PCI 地址,如 0000:00:1f.6

ipam

对象

IPAM CNI 插件的配置对象。该插件管理网络附加定义的 IP 地址分配。

13.2.3.2.1. host-device 配置示例

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

{
  "cniVersion": "0.3.1",
  "name": "work-network",
  "type": "host-device",
  "device": "eth1",
  "ipam": {
    "type": "dhcp"
  }
}

13.2.3.3. 配置 IPVLAN 额外网络

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

表 13.4. IPVLAN CNI 插件 JSON 配置对象
字段类型描述

cniVersion

字符串

CNI 规格版本。需要 0.3.1 值。

name

字符串

您之前为 CNO 配置提供的 name 参数的值。

type

字符串

要配置的 CNI 插件的名称:ipvlan

模式

字符串

虚拟网络的操作模式。这个值必须是 l2l3l3s。默认值为 l2

master

字符串

与网络附加关联的以太网接口。如果没有指定 master,则使用默认网络路由的接口。

mtu

整数

将最大传输单位 (MTU) 设置为指定的值。默认值由内核自动设置。

ipam

对象

IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。

不要指定 dhcp。不支持使用 DHCP 配置 IPVLAN,因为 IPVLAN 接口与主机接口共享 MAC 地址。

13.2.3.3.1. ipvlan 配置示例

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

{
  "cniVersion": "0.3.1",
  "name": "work-network",
  "type": "ipvlan",
  "master": "eth1",
  "mode": "l3",
  "ipam": {
    "type": "static",
    "addresses": [
       {
         "address": "192.168.10.10/24"
       }
    ]
  }
}

13.2.3.4. 配置 MACVLAN 额外网络

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

表 13.5. MACVLAN CNI 插件 JSON 配置对象
字段类型描述

cniVersion

字符串

CNI 规格版本。需要 0.3.1 值。

name

字符串

您之前为 CNO 配置提供的 name 参数的值。

type

字符串

用于配置的 CNI 插件的名称:macvlan

模式

字符串

配置虚拟网络上的流量可见性。必须是 bridgepassthruprivateVepa。如果没有提供值,则默认值为 bridge

master

字符串

与虚拟接口关联的以太网、绑定或 VLAN 接口。如果没有指定值,则使用主机系统的主以太网接口。

mtu

字符串

指定的值的最大传输单元(MTU)。默认值由内核自动设置。

ipam

对象

IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。

13.2.3.4.1. macvlan 配置示例

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

{
  "cniVersion": "0.3.1",
  "name": "macvlan-net",
  "type": "macvlan",
  "master": "eth1",
  "mode": "bridge",
  "ipam": {
    "type": "dhcp"
    }
}

13.2.4. 为额外网络配置 IP 地址分配

IP 地址管理 (IPAM) Container Network Interface (CNI) 插件为其他 CNI 插件提供 IP 地址。

您可以使用以下 IP 地址分配类型:

  • 静态分配。
  • 通过 DHCP 服务器进行动态分配。您指定的 DHCP 服务器必须可从额外网络访问。
  • 通过 Whereabouts IPAM CNI 插件进行动态分配。

13.2.4.1. 静态 IP 地址分配配置

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

表 13.6. ipam 静态配置对象
字段类型描述

type

字符串

IPAM 地址类型。值必须是 static

addresses

数组

指定分配给虚拟接口的 IP 地址的对象数组。支持 IPv4 和 IPv6 IP 地址。

Routes

数组

指定要在 pod 中配置的路由的一组对象。

dns

数组

可选:指定 DNS 配置的对象数组。

address 数组需要带有以下字段的对象:

表 13.7. ipam.addresses[] array
字段类型描述

address

字符串

您指定的 IP 地址和网络前缀。例如:如果您指定 10.10.21.10/24,那么会为额外网络分配 IP 地址 10.10.21.10,网掩码为 255.255.255.0

gateway

字符串

出口网络流量要路由到的默认网关。

表 13.8. ipam.routes[] array
字段类型描述

dst

字符串

CIDR 格式的 IP 地址范围,如 192.168.17.0/24 或默认路由 0.0.0.0/0

gw

字符串

网络流量路由的网关。

表 13.9. ipam.dns object
字段类型描述

nameservers

数组

用来发送 DNS 查询的一个或多个 IP 地址的数组。

domain

数组

要附加到主机名的默认域。例如,如果将域设置为 example.com,对 example-host 的 DNS 查找查询将被改写为 example-host.example.com

search

数组

在 DNS 查找查询过程中,附加到非限定主机名(如 example-host)的域名的数组。

静态 IP 地址分配配置示例

{
  "ipam": {
    "type": "static",
      "addresses": [
        {
          "address": "191.168.1.7/24"
        }
      ]
  }
}

13.2.4.2. 动态 IP 地址(DHCP)分配配置

以下 JSON 描述了使用 DHCP 进行动态 IP 地址地址分配的配置。

DHCP 租期续订

pod 在创建时获取其原始 DHCP 租期。该租期必须由集群中运行的一个小型的 DHCP 服务器部署定期续订。

要触发 DHCP 服务器的部署,您必须编辑 Cluster Network Operator 配置来创建 shim 网络附加,如下例所示:

shim 网络附加定义示例

apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  additionalNetworks:
  - name: dhcp-shim
    namespace: default
    type: Raw
    rawCNIConfig: |-
      {
        "name": "dhcp-shim",
        "cniVersion": "0.3.1",
        "type": "bridge",
        "ipam": {
          "type": "dhcp"
        }
      }
  # ...

表 13.10. ipam DHCP 配置对象
字段类型描述

type

字符串

IPAM 地址类型。需要值 dhcp

动态 IP 地址(DHCP)分配配置示例

{
  "ipam": {
    "type": "dhcp"
  }
}

13.2.4.3. 使用 Whereabouts 进行动态 IP 地址分配配置

Whereabouts CNI 插件允许在不使用 DHCP 服务器的情况下动态地将 IP 地址分配给额外网络。

下表描述了使用 Whereabouts 进行动态 IP 地址分配的配置:

表 13.11. ipam whereabouts 配置对象
字段类型描述

type

字符串

IPAM 地址类型。需要 abouts 的值。

range

字符串

CIDR 表示法中的 IP 地址和范围。IP 地址是通过这个地址范围来分配的。

exclude

数组

可选: CIDR 标记中零个或更多 IP 地址和范围的列表。包含在排除地址范围中的 IP 地址。

使用 Whereabouts 的动态 IP 地址分配配置示例

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/27",
    "exclude": [
       "192.0.2.192/30",
       "192.0.2.196/32"
    ]
  }
}

13.2.5. 使用 Cluster Network Operator 创建额外网络附加

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

重要

不要编辑 Cluster Network Operator 所管理的 NetworkAttachmentDefinition 对象。这样做可能会破坏额外网络上的网络流量。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 要编辑 CNO 配置,请输入以下命令:

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

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      # ...
      additionalNetworks:
      - name: tertiary-net
        namespace: project2
        type: Raw
        rawCNIConfig: |-
          {
            "cniVersion": "0.3.1",
            "name": "tertiary-net",
            "type": "ipvlan",
            "master": "eth1",
            "mode": "l2",
            "ipam": {
              "type": "static",
              "addresses": [
                {
                  "address": "192.168.1.23/24"
                }
              ]
            }
          }
  3. 保存您的更改,再退出文本编辑器以提交更改。

验证

  • 运行以下命令确认 CNO 创建了 NetworkAttachmentDefinition 对象。CNO 创建对象之前可能会有延迟。

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

    其中:

    <namespace>
    指定添加到 CNO 配置中的网络附加的命名空间。

    输出示例

    NAME                 AGE
    test-network-1       14m

13.2.6. 通过应用 YAML 清单来创建额外网络附加

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 使用额外网络配置创建 YAML 文件,如下例所示:

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: next-net
    spec:
      config: |-
        {
          "cniVersion": "0.3.1",
          "name": "work-network",
          "type": "host-device",
          "device": "eth1",
          "ipam": {
            "type": "dhcp"
          }
        }
  2. 运行以下命令来创建额外网络:

    $ oc apply -f <file>.yaml

    其中:

    <file>
    指定包含 YAML 清单的文件名。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.