3.2. 使用其他 CNI 插件创建二级网络
以下部分介绍了二级网络的具体配置字段。
3.2.1. 配置桥接二级网络 复制链接链接已复制到粘贴板!
以下对象描述了 Bridge CNI 插件的配置参数:
字段 | 类型 | 描述 |
---|---|---|
|
|
CNI 规格版本。需要 |
|
|
您之前为 CNO 配置提供的 |
|
|
用于配置的 CNI 插件的名称: |
|
| IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。 |
|
|
可选:指定要使用的虚拟网桥名称。如果主机上不存在网桥接口,则进行创建。默认值为 |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
| 可选:指定一个虚拟 LAN (VLAN) 标签作为整数值。默认情况下不分配 VLAN 标签。 |
|
|
可选:指示在连接到网桥的 |
|
|
可选:分配 VLAN 中继标签。默认值为 |
|
| 可选:将最大传输单元 (MTU) 设置为指定的值。默认值由内核自动设置。 |
|
|
可选:为容器侧 |
|
|
可选:启用 mac spoof 检查,将来自容器的流量限制为接口的 mac 地址。默认值为 |
VLAN 参数在 veth
的主机端配置 VLAN 标签,并在网桥接口上启用 vlan_filtering
功能。
要为 L2 网络配置 uplink,您必须使用以下命令在 uplink 接口上允许 VLAN:
bridge vlan add vid VLAN_ID dev DEV
$ bridge vlan add vid VLAN_ID dev DEV
3.2.1.1. Bridge CNI 插件配置示例 复制链接链接已复制到粘贴板!
以下示例配置了一个名为 bridge-net
的二级网络:
3.2.2. 配置 Bond CNI 二级网络 复制链接链接已复制到粘贴板!
Bond Container Network Interface (Bond CNI)允许将多个网络接口聚合到一个逻辑"bonded"接口中,从而增强网络冗余和容错。只有 SR-IOV 虚拟功能(VF)支持使用此插件绑定。
下表描述了 Bond CNI 插件的配置参数:
字段 | 类型 | 描述 |
---|---|---|
|
| 指定提供给此 CNI 网络附加定义的名称。此名称用于识别和引用容器内的接口。 |
|
| CNI 规格版本。 |
|
|
指定要配置的 CNI 插件的名称: |
|
| 以毫秒为单位指定地址解析协议(ARP)链路监控频率。此参数定义绑定接口发送 ARP 请求的频率,以检查其聚合接口的可用性。 |
|
| 可选:指定绑定的最大传输单元(MTU)。默认值为 1500。 |
|
|
可选:指定绑定的 |
|
| 指定绑定策略。 |
|
|
可选:指定是否应在绑定启动时直接在容器网络命名空间内创建用于绑定的网络接口。如果为 |
|
| 指定要绑定的接口。 |
|
| IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。 |
3.2.2.1. bond CNI 插件配置示例 复制链接链接已复制到粘贴板!
以下示例配置了一个名为 bond-net1
的二级网络:
3.2.3. 主机设备二级网络配置 复制链接链接已复制到粘贴板!
仅设置以下参数之一来指定您的网络设备:device
、hwaddr
、kernelpath
或 pciBusID
。
以下对象描述了 host-device CNI 插件的配置参数:
字段 | 类型 | 描述 |
---|---|---|
|
|
CNI 规格版本。需要 |
|
|
您之前为 CNO 配置提供的 |
|
|
用于配置的 CNI 插件的名称: |
|
|
可选:设备的名称,如 |
|
| 可选:设备硬件 MAC 地址。 |
|
|
可选:Linux 内核设备路径,如 |
|
|
可选:网络设备的 PCI 地址,如 |
3.2.3.1. host-device 配置示例 复制链接链接已复制到粘贴板!
以下示例配置了一个名为 hostdev-net
的二级网络:
3.2.4. 配置 VLAN 二级网络 复制链接链接已复制到粘贴板!
以下对象描述了 VLAN, vlan
, CNI 插件的配置参数:
字段 | 类型 | 描述 |
---|---|---|
|
|
CNI 规格版本。需要 |
|
|
您之前为 CNO 配置提供的 |
|
|
要配置的 CNI 插件的名称: |
|
|
与网络附加关联的以太网接口。如果没有指定 |
|
|
设置 |
|
| IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。 |
|
| 可选:将最大传输单元 (MTU) 设置为指定的值。默认值由内核自动设置。 |
|
| 可选:要返回的 DNS 信息。例如,优先排序的 DNS 名称服务器列表。 |
|
|
可选:指定 |
具有 vlan
配置的 NetworkAttachmentDefinition
自定义资源定义(CRD)只能在节点上的单个 pod 上使用,因为 CNI 插件无法在同一 主
接口上创建多个 vlanId
的 vlan
子接口。
3.2.4.1. VLAN 配置示例 复制链接链接已复制到粘贴板!
以下示例演示了一个带有名为 vlan-net
的二级网络的 vlan
配置:
3.2.5. 配置 IPVLAN 二级网络 复制链接链接已复制到粘贴板!
以下对象描述了 IPVLAN, ipvlan
, CNI 插件的配置参数:
字段 | 类型 | 描述 |
---|---|---|
|
|
CNI 规格版本。需要 |
|
|
您之前为 CNO 配置提供的 |
|
|
要配置的 CNI 插件的名称: |
|
| IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。除非插件被串联,否则需要此项。 |
|
|
可选:虚拟网络的操作模式。这个值必须是 |
|
|
可选:与网络附加关联的以太网接口。如果没有指定 |
|
| 可选:将最大传输单元 (MTU) 设置为指定的值。默认值由内核自动设置。 |
|
|
可选:指定 |
-
ipvlan
对象不允许虚拟接口与master
接口通信。因此,容器无法使用ipvlan
接口来访问主机。确保容器加入提供主机连接的网络,如支持 Precision Time Protocol (PTP
) 的网络。 -
单个
master
接口无法同时配置为使用macvlan
和ipvlan
。 -
对于不能与接口无关的 IP 分配方案,可以使用处理此逻辑的较早插件来串联
ipvlan
插件。如果省略master
,则前面的结果必须包含一个接口名称,以便ipvlan
插件进行 enslave。如果省略ipam
,则使用前面的结果来配置ipvlan
接口。
3.2.5.1. IPVLAN CNI 插件配置示例 复制链接链接已复制到粘贴板!
以下示例配置了名为 ipvlan-net
的二级网络:
3.2.6. 配置 MACVLAN 二级网络 复制链接链接已复制到粘贴板!
以下对象描述了 MAC Virtual LAN (MACVLAN) Container Network Interface (CNI) 插件的配置参数:
字段 | 类型 | 描述 |
---|---|---|
|
|
CNI 规格版本。需要 |
|
|
您之前为 CNO 配置提供的 |
|
|
用于配置的 CNI 插件的名称: |
|
| IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。 |
|
|
可选:配置虚拟网络上的流量可见性。必须是 |
|
| 可选:与新创建的 macvlan 接口关联的主机网络接口。如果没有指定值,则使用默认路由接口。 |
|
| 可选:将最大传输单元 (MTU) 到指定的值。默认值由内核自动设置。 |
|
|
可选:指定 |
如果您为插件配置指定 master
key,请使用与主网络插件关联的物理网络接口,以避免可能冲突。
3.2.6.1. MACVLAN CNI 插件配置示例 复制链接链接已复制到粘贴板!
以下示例配置了名为 macvlan-net
的二级网络:
3.2.7. 配置 TAP 二级网络 复制链接链接已复制到粘贴板!
以下对象描述了TAP CNI 插件的配置参数:
字段 | 类型 | 描述 |
---|---|---|
|
|
CNI 规格版本。需要 |
|
|
您之前为 CNO 配置提供的 |
|
|
要配置的 CNI 插件的名称: |
|
| 可选:为接口请求指定的 MAC 地址。 |
|
| 可选:将最大传输单元 (MTU) 设置为指定的值。默认值由内核自动设置。 |
|
| 可选:与 tap 设备关联的 SELinux 上下文。 注意
OpenShift Container Platform 需要 |
|
|
可选:设置为 |
|
| 可选:拥有 tap 设备的用户。 |
|
| 可选:拥有 tap 设备的组。 |
|
| 可选:将 tap 设备设置为已存在的网桥的端口。 |
3.2.7.1. tap 配置示例 复制链接链接已复制到粘贴板!
以下示例配置了一个名为 mynet
的二级网络:
3.2.7.2. 为TAP CNI 插件设置 SELinux 布尔值 复制链接链接已复制到粘贴板!
要使用 container_t
SELinux 上下文创建 tap 设备,请使用 Machine Config Operator (MCO) 在主机上启用 container_use_devices
布尔值。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
创建一个新的 YAML 文件,如
setsebool-container-use-devices.yaml
,详情如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建新的
MachineConfig
对象:oc apply -f setsebool-container-use-devices.yaml
$ oc apply -f setsebool-container-use-devices.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意对
MachineConfig
对象应用任何更改将导致所有受影响的节点在应用更改后安全重启。此更新可能需要一些时间才能应用。运行以下命令验证是否应用了更改:
oc get machineconfigpools
$ oc get machineconfigpools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-e5e0c8e8be9194e7c5a882e047379cfa True False False 3 3 3 0 7d2h worker rendered-worker-d6c9ca107fba6cd76cdcbfcedcafa0f2 True False False 3 3 3 0 7d
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-e5e0c8e8be9194e7c5a882e047379cfa True False False 3 3 3 0 7d2h worker rendered-worker-d6c9ca107fba6cd76cdcbfcedcafa0f2 True False False 3 3 3 0 7d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意所有节点都应处于更新和就绪状态。
3.2.8. 在二级网络上使用 route-override 插件配置路由 复制链接链接已复制到粘贴板!
以下对象描述了 route-override
CNI 插件的配置参数:
字段 | 类型 | 描述 |
---|---|---|
|
|
要配置的 CNI 插件的名称: |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
| 可选:指定要从容器命名空间中删除的路由列表。 |
|
|
可选:指定要添加到容器命名空间的路由列表。每个路由都是带有 |
|
|
可选:将其设置为 |
3.2.8.1. route-override 插件配置示例 复制链接链接已复制到粘贴板!
route-override
CNI 是一个 CNI 类型,它旨在与父 CNI 串联时使用。它不能独立操作,依赖于父 CNI 来首先创建网络接口并分配 IP 地址,然后才能修改路由规则。
以下示例配置了一个名为 mymacvlan
的二级网络。父 CNI 创建一个附加到 eth1
的网络接口,并使用 host-local
IPAM 在 192.168.1.0/24
范围内分配一个 IP 地址。然后,route-override
CNI 链接到父 CNI,并通过清除现有路由来修改路由规则,删除到 192.168.0.0/24
的路由,并使用自定义网关为 192.168.0.0/24
添加新路由。