第 7 章 多网络

7.1. 了解多网络

在 Kubernetes 中,容器联网由实现了 Container Network Interface (CNI) 的网络插件负责。

OpenShift Container Platform 使用 Multus CNI 插件来实现对 CNI 插件的链接。在集群安装过程中,您要配置default Pod 网络。默认网络处理集群中的所有一般网络流量。您可以基于可用的 CNI 插件定义额外网络,并将一个或多个这种网络附加到 Pod。您可以根据需要为集群定义多个额外网络。这可让您灵活地配置提供交换或路由等网络功能的 Pod。

7.1.1. 额外网络使用场景

您可以在需要网络隔离的情况下使用额外网络,包括分离数据平面与控制平面。隔离网络流量对以下性能和安全性原因很有用:

性能
您可以在两个不同的平面上发送流量,以管理每个平面上流量的多少。
安全性
您可以将敏感的流量发送到专为安全考虑而管理的网络平面,也可隔离不能在租户或客户间共享的私密数据。

集群中的所有 Pod 仍然使用集群范围的默认网络,以维持整个集群中的连通性。每个 Pod 都有一个 eth0 接口,附加到集群范围的 Pod 网络。您可以使用 oc exec -it <pod_name> -- ip a 命令来查看 Pod 的接口。如果您添加了使用 Multus CNI 的额外网络接口,它们会命名为 net1net2、...、netN

要将额外网络接口附加到 Pod,您必须创建配置来定义接口的附加方式。您可以使用 NetworkAttachmentDefinition 类型的自定义资源 (CR) 来指定各个接口。各个 CR 中的 CNI 配置定义如何创建该接口。

7.1.2. OpenShift Container Platform 中的额外网络

OpenShift Container Platform 提供以下 CNI 插件,以便在集群中创建额外网络:

  • bridge创建基于网桥的额外网络可让同一主机中的 Pod 相互通信,并与主机通信。
  • host-device创建 host-device 额外网络可让 Pod 访问主机系统上的物理以太网网络设备。
  • macvlan创建基于 macvlan 的额外网络可让主机上的 Pod 通过使用物理网络接口与其他主机和那些主机上的 Pod 通信。附加到基于 macvlan 的额外网络的每个 Pod 都会获得一个唯一的 MAC 地址。
  • ipvlan创建基于 ipvlan 的额外网络可让主机上的 Pod 与其他主机和那些主机上的 Pod 通信,这类似于基于 macvlan 的额外网络。与基于 macvlan 的额外网络不同,每个 Pod 共享与父级物理网络接口相同的 MAC 地址。
  • SR-IOV创建基于 SR-IOV 的额外网络可让 Pod 附加到主机系统上支持 SR-IOV 的硬件的虚拟功能 (VF) 接口。