第 5 章 多网络
5.1. 关于使用多个网络
除了默认的 OVN-Kubernetes Container Network Interface (CNI)插件外,MicroShift Multus CNI 还可用于串联其他 CNI 插件。安装和使用 MicroShift Multus 是可选的。
5.1.1. MicroShift 中的额外网络
在集群安装过程中,默认 pod 网络配置有默认值,除非您自定义配置。默认网络处理集群中的所有一般网络流量。使用 MicroShift Multus CNI 插件,您可以从其他网络向 pod 添加其他接口。这可让您灵活地配置提供交换或路由等网络功能的 pod。
5.1.1.1. 支持用于网络隔离的额外网络
MicroShift 4.17 支持以下额外网络:
- bridge :允许同一主机上的 pod 相互通信,并与主机通信。
IPVLAN :允许主机上的 pod 与其他主机通信。
- 这与基于 MACVLAN 的额外网络类似。
- 每个 pod 共享与父物理网络接口相同的 MAC 地址,这与基于 MACVLAN 的额外网络不同。
- MACVLAN:允许主机上的 pod 通过使用物理网络接口与其他主机和那些其他主机上的 pod 通信。附加到基于 MACVLAN 的额外网络的每个 pod 都会有一个唯一的 MAC 地址。
不支持为额外网络设置网络策略。
5.1.1.2. 使用案例:用于网络隔离的额外网络
您可以在需要网络隔离的情况下使用额外网络,包括 control plane 和数据平面分离。例如,如果您希望 pod 访问主机上的网络,并且与部署到边缘的设备通信,您可以配置额外的接口。这些边缘设备可能位于隔离的 Operator 网络中,或者定期断开连接。
隔离网络流量对以下性能和安全性原因很有用:
- 性能
- 您可以在两个不同的平面上发送流量,以管理每个平面上的流量数量。
- 安全性
- 您可以将敏感的流量发送到专为安全考虑而管理的网络平面,也可隔离不能在租户或客户间共享的私密数据。
当 MicroShift 服务启动时,Multus CNI 插件会被部署。因此,如果在 MicroShift 启动后添加了 microshift-multus
RPM 软件包,则需要主机重启。重启可确保使用 Multus 注解重新创建所有容器。
5.1.1.3. 如何实现额外网络
集群中的所有 pod 仍然使用集群范围的默认网络,以维持整个集群中的连通性。每个 pod 都有一个 eth0
接口,附加到集群范围的 pod 网络。
-
您可以使用
oc get pod <pod_name> -o=jsonpath='{ .metadata.annotations.k8s\.v1\.cni\.cncf\.io/network-status }'
命令来查看 pod 的接口。 -
如果您添加了使用 MicroShift Multus CNI 的额外网络接口,它们名为
net1
,net2
, …,netN
。 - CNI 配置是在 MicroShift Multus DaemonSet 启动时创建的。此配置是自动生成的,包括默认委托的主 CNI。对于 MicroShift,默认 CNI 是 OVN-Kubernetes。
5.1.1.4. 如何将额外网络附加到 pod
要将额外网络接口附加到 pod,您必须创建并应用配置来定义接口的附加方式。
- 您必须配置任何要使用的额外网络。由于网络的不同,不会提供默认配置。
-
您必须应用 YAML 清单,以使用
NetworkAttachmentDefinition
自定义资源(CR)指定每个接口。每个 CR 中的配置定义如何创建该接口。 CRI-O 必须配置为使用 Multus。
microshift-multus
RPM 包含了默认配置。- 如果在现有的 MicroShift 实例上安装了 Multus CNI,则必须重启主机。
- 如果 Multus CNI 与 MicroShift 一起安装,您可以添加 CR 和 pod,然后启动 MicroShift 服务。在这种情况下不需要重启主机。
5.1.1.5. 额外网络类型的配置
以下部分介绍了额外网络的具体配置字段。
5.1.2. 在正在运行的集群中安装 Multus CNI 插件
如果要将额外网络附加到用于高性能网络配置的 pod,您可以安装 MicroShift Multus RPM 软件包。安装后,需要主机重启才能使用 Multus 注解重新创建所有 pod。
不支持卸载 Multus CNI 插件。
先决条件
- 有到主机的 root 访问权限。
流程
运行以下命令来安装 Multus RPM 软件包:
$ sudo dnf install microshift-multus
提示如果现在为额外网络创建自定义资源(CR),您可以使用一个重启完成安装并应用配置。
要将软件包清单应用到活跃集群,请运行以下命令重启主机:
$ sudo systemctl restart
验证
重启后,运行以下命令来确保创建 Multus CNI 插件组件:
$ oc get pod -A | grep multus
输出示例
openshift-multus dhcp-daemon-ktzqf 1/1 Running 0 45h openshift-multus multus-4frf4 1/1 Running 0 45h
后续步骤
- 如果您还没有这样做,请配置并应用您要使用的额外网络。
- 部署使用创建的 CR 的应用程序。
5.1.3. 配置桥接额外网络
以下对象描述了 Bridge CNI 插件的配置参数:
字段 | 类型 | 描述 |
---|---|---|
|
|
CNI 规格版本。需要 |
|
|
用于配置的 CNI 插件的名称: |
|
| IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。 |
|
|
可选:指定要使用的虚拟网桥名称。如果主机上不存在网桥接口,则进行创建。默认值为 |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
|
可选:设置为 |
|
| 可选:将最大传输单元 (MTU) 设置为指定的值。默认值由内核自动设置。 |
|
|
可选:为容器侧 |
|
|
可选:启用 mac spoof 检查,将来自容器的流量限制为接口的 mac 地址。默认值为 |
5.1.3.1. Bridge CNI 插件配置示例
以下示例配置了名为 bridge-conf
的额外网络,用于 MicroShift Multus CNI:
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: bridge-conf spec: config: '{ "cniVersion": "0.4.0", "type": "bridge", "bridge": "test-bridge", "mode": "bridge", "ipam": { "type": "host-local", "ranges": [ [ { "subnet": "10.10.0.0/16", "rangeStart": "10.10.1.20", "rangeEnd": "10.10.3.50", "gateway": "10.10.0.254" } ] ], "dataDir": "/var/lib/cni/test-bridge" } }'
5.1.4. 配置 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
接口。
5.1.4.1. 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" } ] } }
5.1.5. 配置 macvlan 额外网络
以下对象描述了 MACVLAN CNI 插件的配置参数:
字段 | 类型 | 描述 |
---|---|---|
|
|
CNI 规格版本。需要 |
|
|
您之前为 CNO 配置提供的 |
|
|
用于配置的 CNI 插件的名称: |
|
| IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。 |
|
|
可选:配置虚拟网络上的流量可见性。必须是 |
|
| 可选:与新创建的 macvlan 接口关联的主机网络接口。如果没有指定值,则使用默认路由接口。 |
|
| 可选:将最大传输单元 (MTU) 到指定的值。默认值由内核自动设置。 |
|
|
可选:指定 |
如果您为插件配置指定 master
key,请使用与主网络插件关联的物理网络接口,以避免可能冲突。
5.1.5.1. MACVLAN CNI 插件配置示例
以下示例配置了名为 macvlan-net
的额外网络:
{ "cniVersion": "0.3.1", "name": "macvlan-net", "type": "macvlan", "master": "eth1", "linkInContainer": false, "mode": "bridge", "ipam": { "type": "dhcp" } }