第 24 章 OVN-Kubernetes 网络插件
24.1. 关于 OVN-Kubernetes 网络插件
OpenShift Container Platform 集群在 pod 和服务网络中使用虚拟网络。
Red Hat OpenShift Networking 的一部分,OVN-Kubernetes 网络插件是 OpenShift Container Platform 的默认网络供应商。OVN-Kubernetes 基于 Open Virtual Network(OVN),它提供了一个基于 overlay 的网络实现。使用 OVN-Kubernetes 插件的集群还在每个节点上运行 Open vSwitch (OVS)。OVN 在每个节点上配置 OVS 来实现声明的网络配置。
OVN-Kubernetes 是 OpenShift Container Platform 和单节点 OpenShift 部署的默认网络解决方案。
OVN-Kubernetes (来自 OVS 项目)使用许多相同的结构,如开放流规则,以确定数据包通过网络传输的方式。如需更多信息,请参阅 Open Virtual Network 网站。
OVN-Kubernetes 是 OVS 的一系列守护进程,用于将虚拟网络配置转换为 OpenFlow
规则。OpenFlow
是一种用于与网络交换机和路由器通信的协议,为远程控制网络设备上的网络流量流提供了方法,让网络管理员能够配置、管理和监控网络流量的流。
OVN-Kubernetes 提供了 OpenFlow
提供的更多高级功能。OVN 支持分布式虚拟路由、分布式逻辑交换机、访问控制、DHCP 和 DNS。OVN 在逻辑流中实施分布式虚拟路由,这些路由等同于开放流。例如,如果您有一个 pod 在网络上发送 DHCP 请求,它会发送出该广播查找 DHCP 地址的逻辑流规则,该逻辑流规则与该数据包匹配,并且响应了网关,DNS 服务器是 IP 地址等。
OVN-Kubernetes 在每个节点上运行一个守护进程。数据库和 OVN 控制器都有守护进程集,每个节点上运行的 OVN 控制器。OVN 控制器在节点上对 Open vSwitch 守护进程进行编程,以支持网络提供程序功能;出口 IP、防火墙、路由器、混合网络、IPSEC 加密、IPv6 加密、网络策略日志、网络策略日志、硬件卸载和多播。
24.1.1. OVN-Kubernetes 目的
OVN-Kubernetes 网络插件是一个开源、功能齐全的 Kubernetes CNI 插件,它使用 Open Virtual Network (OVN)来管理网络流量。OVN 是一个社区开发、与供应商无关的网络虚拟化解决方案。OVN-Kubernetes 网络插件:
- 使用 OVN(开源虚拟网络)管理网络流量。OVN 是一个社区开发、与供应商无关的网络虚拟化解决方案。
- 实现 Kubernetes 网络策略支持,包括入口和出口规则。
- 使用 Geneve(通用网络虚拟化封装)协议而不是 VXLAN 在节点间创建覆盖网络。
OVN-Kubernetes 网络插件比 OpenShift SDN 提供以下优点。
- 在支持的平台上完全支持 IPv6 单堆栈和 IPv4/IPv6 双栈网络
- 支持 Linux 和 Microsoft Windows 工作负载中的混合集群
- 可选的、集群内通信的 IPsec 加密
- 将网络数据处理从主机 CPU 卸载到兼容的网卡和数据处理单元 (DPU)
24.1.2. 支持的网络插件功能列表
Red Hat OpenShift Networking 为网络插件(OpenShift SDN 和 OVN-Kubernetes)提供了两个选项,用于网络插件。下表总结了这两个网络插件的当前功能支持:
功能 | OVN-Kubernetes | OpenShift SDN |
---|---|---|
出口 IP | 支持 | 支持 |
Egress 防火墙 [1] | 支持 | 支持 |
出口路由器 | 支持 [2] | 支持 |
混合网络 | 支持 | 不支持 |
集群内通信的 IPsec 加密 | 支持 | 不支持 |
IPv6 | 支持 [3] [4] | 不支持 |
Kubernetes 网络策略 | 支持 | 支持 |
Kubernetes 网络策略日志 | 支持 | 不支持 |
硬件卸载 | 支持 | 不支持 |
多播 | 支持 | 支持 |
- 在 OpenShift SDN 中,出口防火墙也称为出口网络策略。这和网络策略出口不同。
- OVN-Kubernetes 的出口路由器仅支持重定向模式。
- IPv6 仅支持裸机、vSphere、IBM Power® 和 IBM Z® 集群。
- IBM Power® 和 IBM Z® 集群不支持 IPv6 单堆栈。
24.1.3. OVN-Kubernetes IPv6 和双栈限制
OVN-Kubernetes 网络插件有以下限制:
对于为双栈网络配置的集群,IPv4 和 IPv6 流量都必须使用与默认网关相同的网络接口。如果不满足此要求,则
ovnkube-node
守护进程集中的主机上的容器集进入CrashLoopBackOff
状态。如果您使用oc get pod -n openshift-ovn-kubernetes -l app=ovnkube-node -o yaml
等命令显示 pod,则status
字段包含多个有关默认网关的消息,如以下输出所示:I1006 16:09:50.985852 60651 helper_linux.go:73] Found default gateway interface br-ex 192.168.127.1 I1006 16:09:50.985923 60651 helper_linux.go:73] Found default gateway interface ens4 fe80::5054:ff:febe:bcd4 F1006 16:09:50.985939 60651 ovnkube.go:130] multiple gateway interfaces detected: br-ex ens4
唯一的解析是重新配置主机网络,以便两个 IP 系列都针对默认网关使用相同的网络接口。
对于为双栈网络配置的集群,IPv4 和 IPv6 路由表必须包含默认网关。如果不满足此要求,则
ovnkube-node
守护进程集中的主机上的容器集进入CrashLoopBackOff
状态。如果您使用oc get pod -n openshift-ovn-kubernetes -l app=ovnkube-node -o yaml
等命令显示 pod,则status
字段包含多个有关默认网关的消息,如以下输出所示:I0512 19:07:17.589083 108432 helper_linux.go:74] Found default gateway interface br-ex 192.168.123.1 F0512 19:07:17.589141 108432 ovnkube.go:133] failed to get default gateway interface
唯一的解析是重新配置主机网络,以便两个 IP 系列都包含默认网关。
24.1.4. 会话关联性
会话关联性是适用于 Kubernetes Service
对象的功能。如果要确保每次连接到 <service_VIP>:<Port> 时,您可以使用 会话关联性,流量始终被加载到同一后端。如需更多信息,包括如何根据客户端的 IP 地址设置会话关联性,请参阅会话关联性。
会话关联性的粘性超时
OpenShift Container Platform 的 OVN-Kubernetes 网络插件根据最后一个数据包计算来自客户端的会话的粘性超时。例如,如果您运行 curl
命令 10 次,则粘性会话计时器从第十个数据包开始,而不是第一个数据包。因此,如果客户端不断联系该服务,则会话永远不会超时。当服务没有收到 timeoutSeconds
参数所设定的时间的数据包时,超时开始。