×

桥接辅助网络配置

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

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

cniVersion

字符串

CNI 规范版本。需要 0.3.1 值。

name

字符串

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

type

字符串

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

ipam

对象

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

bridge

字符串

可选:指定要使用的虚拟桥的名称。如果主机上不存在桥接接口,则会创建它。默认值为 cni0

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 标签。

preserveDefaultVlan

字符串

可选:指示是否必须在连接到桥接的 veth 端保留默认 vlan。默认为 true。

vlanTrunk

列表

可选:分配 VLAN 中继标签。默认值为 none

mtu

整数

可选:将最大传输单元 (MTU) 设置为指定值。默认值由内核自动设置。

enabledad

布尔值

可选:为容器端 veth 启用重复地址检测。默认值为 false

macspoofchk

布尔值

可选:启用 mac 欺骗检查,将源自容器的流量限制为接口的 mac 地址。默认值为 false

VLAN 参数配置 veth 主机端的 VLAN 标签,并启用桥接接口上的 vlan_filtering 功能。

要为 L2 网络配置上行链路,必须使用以下命令允许上行链路接口上的 VLAN

$  bridge vlan add vid VLAN_ID dev DEV

Bridge CNI 插件配置示例

以下示例配置名为 bridge-net 的辅助网络

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

主机设备辅助网络配置

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

以下对象描述了主机设备 CNI 插件的配置参数

表 2. 主机设备 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

主机设备配置示例

以下示例配置一个名为hostdev-net的附加网络。

{
  "cniVersion": "0.3.1",
  "name": "hostdev-net",
  "type": "host-device",
  "device": "eth1"
}

VLAN附加网络配置

以下对象描述了VLAN(vlan)CNI插件的配置参数。

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

cniVersion

字符串

CNI 规范版本。需要 0.3.1 值。

name

字符串

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

type

字符串

要配置的CNI插件名称:vlan

master

字符串

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

vlanId

整数

设置vlan的ID。

ipam

对象

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

mtu

整数

可选:将最大传输单元 (MTU) 设置为指定值。默认值由内核自动设置。

dns

整数

可选:要返回的DNS信息。例如,按优先级排序的DNS名称服务器列表。

linkInContainer

布尔值

可选:指定master接口是在容器网络命名空间还是主网络命名空间中。将值设置为true以请求使用容器命名空间master接口。

具有vlan配置的NetworkAttachmentDefinition自定义资源定义 (CRD) 只能在一个节点上的单个Pod上使用,因为CNI插件无法在同一个master接口上创建多个具有相同vlanIdvlan子接口。

VLAN配置示例

以下示例演示了一个具有名为vlan-net的附加网络的vlan配置。

{
  "name": "vlan-net",
  "cniVersion": "0.3.1",
  "type": "vlan",
  "master": "eth0",
  "mtu": 1500,
  "vlanId": 5,
  "linkInContainer": false,
  "ipam": {
      "type": "host-local",
      "subnet": "10.1.1.0/24"
  },
  "dns": {
      "nameservers": [ "10.1.1.1", "8.8.8.8" ]
  }
}

IPVLAN附加网络配置

以下对象描述了IPVLAN(ipvlan)CNI插件的配置参数。

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

cniVersion

字符串

CNI 规范版本。需要 0.3.1 值。

name

字符串

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

type

字符串

要配置的CNI插件名称:ipvlan

ipam

对象

IPAM CNI插件的配置对象。该插件管理附加定义的IP地址分配。这是必需的,除非插件是链式的。

mode

字符串

可选:虚拟网络的操作模式。值必须是l2l3l3s。默认值为l2

master

字符串

可选:与网络连接关联的以太网接口。如果未指定master,则使用默认网络路由的接口。

mtu

整数

可选:将最大传输单元 (MTU) 设置为指定值。默认值由内核自动设置。

linkInContainer

布尔值

可选:指定master接口是在容器网络命名空间还是主网络命名空间中。将值设置为true以请求使用容器命名空间master接口。

  • ipvlan对象不允许虚拟接口与master接口通信。因此,容器无法使用ipvlan接口访问主机。请确保容器加入提供与主机连接的网络,例如支持精密时间协议 (PTP) 的网络。

  • 单个master接口不能同时配置为使用macvlanipvlan

  • 对于无法区分接口的IP分配方案,可以将ipvlan插件与处理此逻辑的早期插件链接。如果省略了master,则之前的结果必须包含单个接口名称,以便ipvlan插件将其作为从属接口。如果省略了ipam,则使用之前的结果来配置ipvlan接口。

IPVLAN CNI插件配置示例

以下示例配置一个名为ipvlan-net的附加网络。

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

MACVLAN附加网络配置

以下对象描述了MACVLAN CNI插件的配置参数。

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

cniVersion

字符串

CNI 规范版本。需要 0.3.1 值。

name

字符串

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

type

字符串

要配置的CNI插件名称:macvlan

ipam

对象

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

mode

字符串

可选:配置虚拟网络上的流量可见性。必须是bridgepassthruprivatevepa之一。如果未提供值,则默认值为bridge

master

字符串

可选:与新创建的macvlan接口关联的主机网络接口。如果未指定值,则使用默认路由接口。

mtu

字符串

可选:将最大传输单元 (MTU) 设置为指定值。默认值由内核自动设置。

linkInContainer

布尔值

可选:指定master接口是在容器网络命名空间还是主网络命名空间中。将值设置为true以请求使用容器命名空间master接口。

如果为插件配置指定了master键,请使用与主网络插件关联的物理网络接口不同的接口,以避免可能的冲突。

MACVLAN CNI插件配置示例

以下示例配置一个名为macvlan-net的附加网络。

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

TAP附加网络配置

以下对象描述了TAP CNI插件的配置参数。

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

cniVersion

字符串

CNI 规范版本。需要 0.3.1 值。

name

字符串

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

type

字符串

要配置的CNI插件名称:tap

mac

字符串

可选:为接口请求指定的MAC地址。

mtu

整数

可选:将最大传输单元 (MTU) 设置为指定值。默认值由内核自动设置。

selinuxcontext

字符串

可选:与tap设备关联的SELinux上下文。

OpenShift Container Platform需要值system_u:system_r:container_t:s0

multiQueue

布尔值

可选:设置为true以启用多队列。

owner

整数

可选:拥有tap设备的用户。

group

整数

可选:拥有tap设备的组。

bridge

字符串

可选:将tap设备设置为现有网桥的端口。

Tap配置示例

以下示例配置一个名为mynet的附加网络。

{
 "name": "mynet",
 "cniVersion": "0.3.1",
 "type": "tap",
 "mac": "00:11:22:33:44:55",
 "mtu": 1500,
 "selinuxcontext": "system_u:system_r:container_t:s0",
 "multiQueue": true,
 "owner": 0,
 "group": 0
 "bridge": "br1"
}

设置TAP CNI插件的SELinux布尔值

要使用container_t SELinux上下文创建tap设备,请使用机器配置操作符 (MCO) 在主机上启用container_use_devices布尔值。

先决条件
  • 您已安装OpenShift CLI (oc)。

步骤
  1. 创建一个新的YAML文件,例如setsebool-container-use-devices.yaml,其中包含以下详细信息。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 99-worker-setsebool
    spec:
      config:
        ignition:
          version: 3.2.0
        systemd:
          units:
          - enabled: true
            name: setsebool.service
            contents: |
              [Unit]
              Description=Set SELinux boolean for the TAP CNI plugin
              Before=kubelet.service
    
              [Service]
              Type=oneshot
              ExecStart=/usr/sbin/setsebool container_use_devices=on
              RemainAfterExit=true
    
              [Install]
              WantedBy=multi-user.target graphical.target
  2. 通过运行以下命令创建新的MachineConfig对象。

    $ oc apply -f setsebool-container-use-devices.yaml

    应用对MachineConfig对象的任何更改都会导致所有受影响的节点在更改应用后优雅地重新启动。此更新可能需要一些时间才能应用。

  3. 通过运行以下命令验证更改是否已应用。

    $ oc get machineconfigpools
    预期输出
    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

    所有节点都应处于已更新并准备就绪的状态。

其他资源