7.4. 配置桥接网络
作为集群管理员,您可以使用 bridge Container Network Interface (CNI) 插件为集群配置额外网络。配置之后,节点上的所有 Pod 都会连接到虚拟交换机。每个 Pod 都会在额外网络中分配一个 IP 地址。
7.4.1. 使用 bridge CNI 插件创建额外网络附加
Cluster Network Operator (CNO) 管理额外网络定义。当您指定要创建的额外网络时,CNO 会自动创建 NetworkAttachmentDefinition 自定义资源 (CR)。
请勿编辑 Cluster Network Operator 所管理的 NetworkAttachmentDefinition CR。这样做可能会破坏额外网络上的网络流量。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
要为集群创建额外网络,请完成以下步骤:
运行以下命令来编辑 CNO CR:
$ oc edit networks.operator.openshift.io cluster
通过为要创建的额外网络添加配置来修改您要创建的 CR,如以下示例 CR 中所示。
以下 YAML 配置 bridge 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", "name": "test-network-1", "type": "bridge", "ipam": { "type": "static", "addresses": [ { "address": "191.168.1.7" } ] } }'
- 1
- 指定额外网络附加定义的配置。
- 保存您的更改,再退出文本编辑器以提交更改。
可选:通过运行以下命令确认 CNO 创建了 NetworkAttachmentDefinition CR。CNO 创建 CR 之前可能会有延迟。
$ oc get network-attachment-definitions -n <namespace>
输出示例
NAME AGE test-network-1 14m
7.4.1.1. 配置网桥
使用 bridge 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
以下对象描述了 bridge CNI 插件的配置参数:
bridge CNI 插件 JSON 配置对象
{ "cniVersion": "0.3.1", "name": "<name>", 1 "type": "bridge", "bridge": "<bridge>", 2 "ipam": { 3 ... }, "ipMasq": false, 4 "isGateway": false, 5 "isDefaultGateway": false, 6 "forceAddress": false, 7 "hairpinMode": false, 8 "promiscMode": false, 9 "vlan": <vlan>, 10 "mtu": <mtu> 11 }
- 1
- 为您之前为 CNO 配置提供的
name
参数指定值。 - 2
- 指定要使用的虚拟网桥名称。如果主机上不存在网桥接口,则进行创建。默认值为
cni0
。 - 3
- 为 ipam CNI 插件指定配置对象。该插件为网络附加定义管理 IP 地址分配。
- 4
- 设置为
true
,从而为离开虚拟网络的流量启用 IP 伪装。所有流量的源 IP 地址都会改写为网桥 IP 地址。如果网桥没有 IP 地址,此设置无效。默认值为false
。 - 5
- 设置为
true
,从而为网桥分配 IP 地址。默认值为false
。 - 6
- 设置为
true
,从而将网桥配置为虚拟网络的默认网关。默认值为false
。如果isDefaultGateway
设置为true
,则isGateway
也会自动设置为true
。 - 7
- 设置为
true
,从而允许将之前分配的 IP 地址分配给虚拟网桥。设置为false
时,如果将来自于重叠子集的 IPv4 地址或者 IPv6 地址分配给虚拟网桥,则会发生错误。默认值为false
。 - 8
- 设置为
true
,从而允许虚拟网桥通过接收了以太网帧的虚拟端口将其重新发送回去。这个模式也被称为反射中继。默认值为false
。 - 9
- 设置为
true
,从而在网桥上启用混杂模式。默认值为false
。 - 10
- 以整数值形式指定虚拟 LAN (VLAN) 标签。默认情况下不分配 VLAN 标签。
- 11
- 将最大传输单位 (MTU) 设置为指定的值。默认值由内核自动设置。
7.4.1.1.1. 网桥配置示例
以下示例配置了名为 bridge-net
的额外网络:
name: bridge-net
namespace: work-network
type: Raw
rawCNIConfig: '{ 1
"cniVersion": "0.3.1",
"name": "work-network",
"type": "bridge",
"isGateway": true,
"vlan": 2,
"ipam": {
"type": "dhcp"
}
}'
- 1
- 以 YAML 字符串形式指定 CNI 配置对象。
7.4.1.2. 配置 ipam CNI 插件
ipam Container Network Interface (CNI) 插件为其他 CNI 插件提供 IP 地址管理 (IPAM)。您可以配置 ipam 以进行静态 IP 地址分配或使用 DHCP 进行动态 IP 地址分配。您指定的 DHCP 服务器必须可从额外网络访问。
以下 JSON 配置对象描述了您可以设置的参数。
7.4.1.2.1. 静态 IP 地址分配配置
以下 JSON 描述了静态 IP 地址分配的配置:
静态分配配置
{ "ipam": { "type": "static", "addresses": [ 1 { "address": "<address>", 2 "gateway": "<gateway>" 3 } ], "routes": [ 4 { "dst": "<dst>" 5 "gw": "<gw>" 6 } ], "dns": { 7 "nameservers": ["<nameserver>"], 8 "domain": "<domain>", 9 "search": ["<search_domain>"] 10 } } }
- 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.4.1.2.2. 动态 IP 地址分配配置
以下 JSON 描述了使用 DHCP 进行动态 IP 地址地址分配的配置:
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 rawCNIConfig: |- { "name": "dhcp-shim", "cniVersion": "0.3.1", "type": "bridge", "master": "ens5", "ipam": { "type": "dhcp" } }
DHCP 分配配置
{ "ipam": { "type": "dhcp" } }
7.4.1.2.3. 静态 IP 地址分配配置示例
您可以配置 ipam 以进行静态 IP 地址分配:
{ "ipam": { "type": "static", "addresses": [ { "address": "191.168.1.7" } ] } }
7.4.1.2.4. 使用 DHCP 的动态 IP 地址分配配置示例
您可以配置 ipam 以使用 DHCP:
{ "ipam": { "type": "dhcp" } }