×

OpenShift Container Platform 集群使用虚拟化网络用于 Pod 和服务网络。

OVN-Kubernetes 网络插件是 Red Hat OpenShift Networking 的一部分,是 OpenShift Container Platform 的默认网络提供程序。OVN-Kubernetes 基于 Open Virtual Network (OVN),并提供基于覆盖网络的网络实现。使用 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 在等同于开放流的逻辑流中实现分布式虚拟路由。例如,如果您有一个向网络上的 DHCP 服务器发送 DHCP 请求的 Pod,则请求中的逻辑流规则可以帮助 OVN-Kubernetes 处理数据包,以便服务器可以响应网关、DNS 服务器、IP 地址和其他信息。

OVN-Kubernetes 在每个节点上运行一个守护进程。数据库和在每个节点上运行的 OVN 控制器都有守护程序集。OVN 控制器对节点上的 Open vSwitch 守护程序进行编程,以支持网络提供程序功能:出口 IP、防火墙、路由器、混合网络、IPSEC 加密、IPv6、网络策略、网络策略日志、硬件卸载和组播。

OVN-Kubernetes 的用途

OVN-Kubernetes 网络插件是一个开源的、功能齐全的 Kubernetes CNI 插件,它使用开放虚拟网络 (OVN) 来管理网络流量流。OVN 是一款社区开发的、与供应商无关的网络虚拟化解决方案。OVN-Kubernetes 网络插件使用以下技术:

  • OVN 来管理网络流量流。

  • Kubernetes 网络策略支持和日志,包括入口和出口规则。

  • 通用网络虚拟化封装 (Geneve) 协议(而不是虚拟可扩展局域网 (VXLAN))来在节点之间创建覆盖网络。

OVN-Kubernetes 网络插件支持以下功能:

  • 混合集群,可以同时运行 Linux 和 Microsoft Windows 工作负载。此环境称为混合网络

  • 将网络数据处理从主机中央处理器 (CPU) 卸载到兼容的网卡和数据处理单元 (DPU)。这称为硬件卸载

  • 在裸机、VMware vSphere、IBM Power®、IBM Z® 和 RHOSP 平台上进行 IPv4 主双栈网络。

  • 在裸机平台上进行 IPv6 单栈网络。

  • 在裸机、VMware vSphere 或 RHOSP 平台上运行的集群上进行 IPv6 主双栈网络。

  • 出口防火墙设备和出口 IP 地址。

  • 以重定向模式运行的出口路由器设备。

  • 集群内通信的 IPsec 加密。

OVN-Kubernetes IPv6 和双栈限制

OVN-Kubernetes 网络插件具有以下限制:

  • 对于配置为双栈网络的集群,IPv4 和 IPv6 流量都必须使用与默认网关相同的网络接口。如果不满足此要求,则ovnkube-node守护程序集中主机的 Pod 将进入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守护程序集中主机的 Pod 将进入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 族都包含默认网关。

会话亲和性

会话亲和性是适用于 Kubernetes Service 对象的功能。如果您希望确保每次连接到<service_VIP>:<Port>时,流量始终负载均衡到相同的后端,则可以使用会话亲和性。有关更多信息(包括如何基于客户端的 IP 地址设置会话亲和性),请参见会话亲和性

会话亲和性的粘性超时

OpenShift Container Platform 的 OVN-Kubernetes 网络插件根据最后一个数据包计算客户端会话的粘性超时。例如,如果您运行 10 次curl命令,则粘性会话计时器将从第十个数据包而不是第一个数据包开始。因此,如果客户端持续联系服务,则会话永远不会超时。当服务在timeoutSeconds参数设置的时间内未收到数据包时,超时将开始。