OVN-Kubernetes 网络插件
Red Hat OpenShift Service on AWS 中的 OVN-Kubernetes 网络插件的深度配置和故障排除
摘要
第 1 章 关于 OVN-Kubernetes 网络插件 复制链接链接已复制到粘贴板!
Red Hat OpenShift Service on AWS 集群使用虚拟网络用于 pod 和服务网络。
Red Hat OpenShift Networking 的一部分,OVN-Kubernetes 网络插件是 Red Hat OpenShift Service on AWS 的默认网络供应商。OVN-Kubernetes 基于 Open Virtual Network(OVN),它提供了一个基于 overlay 的网络实现。使用 OVN-Kubernetes 插件的集群还在每个节点上运行 Open vSwitch (OVS)。OVN 在每个节点上配置 OVS 来实现声明的网络配置。
OVN-Kubernetes 是 Red Hat OpenShift Service on AWS 和单节点 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 控制器。OVN 控制器在节点上对 Open vSwitch 守护进程进行编程,以支持以下网络供应商功能:
- 出口 IP
- 防火墙
- 硬件卸载
- 混合网络
- 互联网协议安全(IPsec)加密
- IPv6
- 多播。
- 网络策略和网络策略日志
- 路由器
1.1. OVN-Kubernetes 目的 复制链接链接已复制到粘贴板!
OVN-Kubernetes 网络插件是一个开源、功能齐全的 Kubernetes CNI 插件,它使用 Open Virtual Network (OVN)来管理网络流量。OVN 是一个社区开发、与供应商无关的网络虚拟化解决方案。OVN-Kubernetes 网络插件使用以下技术:
- OVN 管理网络流量流。
- Kubernetes 网络策略支持和日志,包括入口和出口规则。
- 通用网络虚拟化封装(Geneve)协议,而不是虚拟可扩展局域网(VXLAN),以在节点之间创建覆盖网络。
OVN-Kubernetes 网络插件支持以下功能:
- 可以运行 Linux 和 Microsoft Windows 工作负载的混合集群。此环境称为混合网络。
- 将网络数据处理从主机中央处理单元(CPU)卸载到兼容的网卡和数据处理单元(DPU)。这称为硬件卸载(hardware offloading)。
- IPv4-primary 双栈网络,在裸机、VMware vSphere、IBM Power®、IBM Z® 和 Red Hat OpenStack Platform (RHOSP)平台上。
- RHOSP 和裸机平台上的 IPv6 单堆栈网络。
- 在裸机、VMware vSphere 或 RHOSP 平台上运行的集群的 IPv6-primary 双栈网络。
- 出口防火墙设备和出口 IP 地址。
- 以重定向模式运行的出口路由器设备。
- 集群内通信的 IPsec 加密。
红帽不支持使用 OVN-Kubernetes 网络插件的以下安装后配置:
- 配置主网络接口,包括使用 NMState Operator 为接口配置绑定。
-
在使用 Open vSwitch (OVS)或 OVN-Kubernetes
br-ex网桥网络的网络设备上配置子接口或附加网络接口。 - 在主网络接口上创建其他虚拟局域网(VLAN)。
-
使用您在集群安装过程中为节点创建的主网络接口(如
eth0)来创建其他二级网络。0或 bond
红帽支持以下使用 OVN-Kubernetes 网络插件的安装后配置:
-
从基础物理接口(如
eth0.100)创建额外的 VLAN,其中您将主网络接口配置为集群安装过程中节点的 VLAN。这是因为 Open vSwitch (OVS)网桥附加到初始 VLAN 子接口,如eth0.100,保留基础物理接口可用于新配置。 -
使用
localnet拓扑网络创建额外的 OVN 二级网络需要在NodeNetworkConfigurationPolicy(NNCP)对象中定义二级网络。创建网络后,Pod 或虚拟机(VM)可以附加到网络。这些从属网络为物理网络提供专用连接,可能或不能使用 VLAN 标记。您无法从主机没有所需设置的节点的主机网络访问这些网络,如所需的网络设置。
1.2. 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
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 ens4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 唯一的解析是重新配置主机网络,以便两个 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
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 interfaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 唯一的解析是重新配置主机网络,以便两个 IP 系列都包含默认网关。
-
如果您为集群在
MachineConfig自定义资源(CR)的kernelArgument部分中将ipv6.disable参数设置为1,则 OVN-Kubernetes pod 会进入CrashLoopBackOff状态。另外,将集群更新至 AWS 上的 Red Hat OpenShift Service 的更新版本会失败,因为 Network Operator 处于Degraded状态。红帽不支持为集群禁用 IPv6 寻址,因此不要将ipv6.disable参数设置为1。
1.3. 会话关联性 复制链接链接已复制到粘贴板!
会话关联性是适用于 Kubernetes Service 对象的功能。如果要确保每次连接到 <service_VIP>:<Port> 时,您可以使用 会话关联性,流量始终被加载到同一后端。如需更多信息,包括如何根据客户端的 IP 地址设置会话关联性,请参阅会话关联性。
1.3.1. 会话关联性的粘性超时 复制链接链接已复制到粘贴板!
Red Hat OpenShift Service on AWS 的 OVN-Kubernetes 网络插件根据最后一个数据包计算来自客户端的会话的粘性超时。例如,如果您运行 curl 命令 10 次,则粘性会话计时器从第十个数据包开始,而不是第一个数据包。因此,如果客户端不断联系该服务,则会话永远不会超时。当服务没有收到 timeoutSeconds 参数所设定的时间的数据包时,超时开始。
第 2 章 配置集群范围代理 复制链接链接已复制到粘贴板!
如果使用现有的 Virtual Private Cloud (VPC),您可以在 Red Hat OpenShift Service on AWS 集群安装过程中或安装集群后配置集群范围代理。当您启用代理时,核心集群组件会被拒绝访问互联网,但代理不会影响用户工作负载。
只有集群系统出口流量会被代理,包括对云供应商 API 的调用。
如果使用集群范围代理,您需要维护到集群的代理可用性。如果代理不可用,这可能会影响集群的健康和支持性。
2.1. 配置集群范围代理的先决条件 复制链接链接已复制到粘贴板!
要配置集群范围的代理,您必须满足以下要求。当您在安装过程中或安装后配置代理时,这些要求有效。
2.1.1. 常规要求 复制链接链接已复制到粘贴板!
- 您是集群所有者。
- 您的帐户有足够的权限。
- 集群有一个现有的 Virtual Private Cloud (VPC)。
- 代理可以访问集群的 VPC 和 VPC 的专用子网。代理还必须从 VPC 中用于集群以及 VPC 的专用子网访问。
您已在 VPC 端点中添加了以下端点:
-
ec2.<aws_region>.amazonaws.com -
elasticloadbalancing.<aws_region>.amazonaws.com s3.<aws_region>.amazonaws.com需要这些端点才能完成节点到 AWS EC2 API 的请求。由于代理在容器级别而不是在节点级别工作,因此您必须通过 AWS 专用网络将这些请求路由到 AWS EC2 API。在代理服务器中的允许列表中添加 EC2 API 的公共 IP 地址是不够的。
重要在使用集群范围代理时,您必须将
s3.<aws_region>.amazonaws.com端点配置为类型Gateway。
-
2.1.2. 网络要求 复制链接链接已复制到粘贴板!
如果您的代理重新加密出口流量,则必须为 OpenShift 所需的多个域和端口组合创建排除。
您的代理必须排除以下 OpenShift URL 的重新加密:
| 地址 | 协议/端口 | 功能 |
|---|---|---|
|
| https/443 | 必需。用于管理的 OpenShift 特定遥测。 |
|
| https/443 |
https://console.redhat.com/openshift 站点使用 |
2.2. 其他信任捆绑包的职责 复制链接链接已复制到粘贴板!
如果您提供额外的信任捆绑包,您需要进行以下要求:
- 确保其他信任捆绑包的内容有效
- 确保证书(包括中间证书)包含在额外的信任捆绑包中,且未过期
- 跟踪到期,并为附加信任捆绑包中包含的证书执行必要的续订
- 使用更新的额外信任捆绑包更新集群配置
2.3. 在安装过程中配置代理 复制链接链接已复制到粘贴板!
当您将 Red Hat OpenShift Service on AWS 集群安装到现有的 Virtual Private Cloud (VPC)时,您可以配置 HTTP 或 HTTPS 代理。您可以使用 Red Hat OpenShift Cluster Manager 或 ROSA CLI (rosa) 在安装过程中配置代理。
2.3.1. 使用 OpenShift Cluster Manager 在安装过程中配置代理 复制链接链接已复制到粘贴板!
如果要在 AWS 集群上安装 Red Hat OpenShift Service,您可以在安装过程中使用 Red Hat OpenShift Cluster Manager 启用集群范围的 HTTP 或 HTTPS 代理。
在安装前,您必须验证可以从 VPC 访问代理,该代理是否可从安装到的 VPC 中。该代理还必须从 VPC 的专用子网访问。
有关使用 OpenShift Cluster Manager 在安装过程中配置集群范围代理的详细步骤,请参阅使用 OpenShift Cluster Manager 使用自定义创建集群。
2.3.2. 使用 CLI 在安装过程中配置代理 复制链接链接已复制到粘贴板!
如果要在 AWS 集群上安装 Red Hat OpenShift Service 到现有的 Virtual Private Cloud (VPC)中,您可以使用 ROSA CLI (rosa)在安装过程中启用集群范围的 HTTP 或 HTTPS 代理。
以下流程提供有关在安装过程中配置集群范围代理的 ROSA CLI (rosa) 参数的详细信息。
先决条件
- 您已确认代理可以从安装集群的 VPC 访问。该代理还必须从 VPC 的专用子网访问。
流程
指定创建集群时的代理配置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 4 6
additional-trust-bundle-file、http-proxy和https-proxy参数都是可选。- 2
additional-trust-bundle-file参数是一个指向 PEM 编码 X.509 证书的捆绑包的文件路径,这些证书全部连接在一起。使用 TLS-inspecting 代理的用户需要 additional-trust-bundle-file 参数,除非代理的身份证书由 Red Hat Enterprise Linux CoreOS (RHCOS)信任捆绑包的颁发机构签名。无论代理是透明的,还是需要使用 http-proxy 和 https-proxy 参数显式配置。- 3 5 7
http-proxy和https-proxy参数必须指向有效的 URL。- 8
- 要排除代理的目标域名、IP 地址或网络 CIDR 的逗号分隔列表。
在域前面加上
.以仅匹配子域。例如:.y.com匹配x.y.com,但不匹配y.com。使用*可对所有目的地绕过所有代理。如果您扩展了未包含在安装配置中networking.machineNetwork[].cidr字段定义的 worker,您必须将它们添加到此列表中,以防止连接问题。如果未设置
httpProxy或httpsProxy字段,则此字段将被忽略。
2.4. 安装后配置代理 复制链接链接已复制到粘贴板!
在将 Red Hat OpenShift Service on AWS 集群安装到现有的 Virtual Private Cloud (VPC)后,您可以配置 HTTP 或 HTTPS 代理。您可以使用 Red Hat OpenShift Cluster Manager 或 ROSA CLI (rosa) 在安装后配置代理。
2.4.1. 使用 OpenShift Cluster Manager 在安装后配置代理 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Cluster Manager 将集群范围代理配置添加到 Virtual Private Cloud (VPC) 上的 AWS 集群中的现有 Red Hat OpenShift Service 中。
您还可以使用 OpenShift Cluster Manager 更新现有的集群范围代理配置。例如,如果代理的任何证书颁发机构过期,您可能需要更新代理的网络地址,或者替换额外的信任捆绑包。
集群将代理配置应用到 control plane 和计算节点。在应用配置时,每个集群节点暂时处于不可调度状态,并排空其工作负载。每个节点都会作为进程的一部分重启。
先决条件
- 在 AWS 集群上有一个 Red Hat OpenShift Service。
- 您的集群部署在 VPC 中。
流程
- 进入到 OpenShift Cluster Manager 并选择您的集群。
- 在 Networking 页面上的 Virtual Private Cloud (VPC) 部分下,点 Edit cluster-wide proxy。
在 Edit cluster-wide proxy 页面中,提供代理配置详情:
至少在以下字段之一中输入值:
- 指定有效的 HTTP 代理 URL。
- 指定有效的 HTTPS 代理 URL。
在 Additional trust bundle 字段中,提供 PEM 编码 X.509 证书捆绑包。
如果您要替换现有的信任捆绑包文件,请选择 replace file 来查看字段。捆绑包添加到集群节点的可信证书存储中。如果使用 TLS-inspecting 代理,则需要额外的信任捆绑包文件,除非代理的身份证书由 Red Hat Enterprise Linux CoreOS (RHCOS)信任捆绑包的颁发机构签名。无论代理是透明的,还是需要使用
http-proxy和https-proxy参数显式配置,这个要求都适用。
- 单击 Confirm。
验证
- 在 Networking 页面上的 Virtual Private Cloud (VPC) 部分下,验证集群的代理配置是否如预期。
2.4.2. 使用 CLI 在安装后配置代理 复制链接链接已复制到粘贴板!
您可以使用 ROSA CLI (rosa)将集群范围的代理配置添加到 Virtual Private Cloud (VPC)的现有 ROSA 集群中。
您还可以使用 rosa 更新现有的集群范围代理配置。例如,如果代理的任何证书颁发机构过期,您可能需要更新代理的网络地址,或者替换额外的信任捆绑包。
集群将代理配置应用到 control plane 和计算节点。在应用配置时,每个集群节点暂时处于不可调度状态,并排空其工作负载。每个节点都会作为进程的一部分重启。
前提条件
-
您已在安装主机上安装和配置了最新的 ROSA (
rosa) 和 OpenShift (oc) CLI。 - 您有一个在 VPC 中部署的 Red Hat OpenShift Service on AWS 集群。
流程
编辑集群配置以添加或删除集群范围代理详情:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 4 6
additional-trust-bundle-file、http-proxy和https-proxy参数都是可选。- 2
additional-trust-bundle-file参数是一个指向 PEM 编码 X.509 证书的捆绑包的文件路径,这些证书全部连接在一起。additional-trust-bundle-file 参数是一个指向 PEM 编码 X.509 证书的捆绑包的文件路径,这些证书全部连接在一起。使用 TLS-inspecting 代理的用户需要 additional-trust-bundle-file 参数,除非代理的身份证书由 Red Hat Enterprise Linux CoreOS (RHCOS)信任捆绑包的颁发机构签名。无论代理是透明的,还是需要使用http-proxy和https-proxy参数显式配置。重要不要尝试直接更改集群中的代理或其他信任捆绑包配置。所有更改都必须使用 ROSA CLI (
rosa)或 Red Hat OpenShift Cluster Manager 应用。直接对集群中的受管资源所做的任何更改都会被自动恢复。- 3 5 7
http-proxy和https-proxy参数必须指向有效的 URL。- 8
- 要排除代理的目标域名、IP 地址或网络 CIDR 的逗号分隔列表。
在域前面加上
.以仅匹配子域。例如:.y.com匹配x.y.com,但不匹配y.com。使用*可对所有目的地绕过所有代理。如果您扩展了未包含在安装配置中
networking.machineNetwork[].cidr字段定义的 worker,您必须将它们添加到此列表中,以防止连接问题。如果未设置
httpProxy或httpsProxy字段,则此字段将被忽略。
验证
显示集群的代理配置,并验证详情是否如预期:
oc get proxy cluster -o yaml
$ oc get proxy cluster -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. 删除集群范围代理 复制链接链接已复制到粘贴板!
您可以使用 ROSA CLI 删除集群范围代理。删除集群后,您还应删除添加到集群的任何信任捆绑包。
2.5.1. 使用 CLI 删除集群范围代理 复制链接链接已复制到粘贴板!
您必须使用 ROSA CLI rosa 从集群中删除代理地址。
先决条件
- 您必须具有集群管理员特权。
-
已安装 ROSA CLI (
rosa)。
流程
使用
rosa edit命令修改代理。您必须将空字符串传递给--http-proxy和--https-proxy参数,才能清除集群中的代理:rosa edit cluster -c <cluster_name> --http-proxy "" --https-proxy ""
$ rosa edit cluster -c <cluster_name> --http-proxy "" --https-proxy ""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意虽然代理可能只使用其中一个代理参数,但空字段将被忽略,因此将空字符串传递给
-http-proxy 和--https-proxy参数不会造成任何问题。输出示例
I: Updated cluster <cluster_name>
I: Updated cluster <cluster_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用
rosa describe命令验证代理是否已从集群中删除:$ rosa describe cluster -c <cluster_name>
$ rosa describe cluster -c <cluster_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在删除前,代理 IP 会显示在 proxy 部分:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除代理后,代理部分会被删除:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.2. 删除 Red Hat OpenShift Service on AWS 集群上的证书颁发机构 复制链接链接已复制到粘贴板!
您可以使用 ROSA CLI 从集群中删除证书颁发机构(CA )。
先决条件
- 您必须具有集群管理员特权。
-
已安装 ROSA CLI (
rosa)。 - 集群添加了证书颁发机构。
流程
使用
rosa edit命令修改 CA 信任捆绑包。您必须将空字符串传递给--additional-trust-bundle-file参数,以便从集群中清除信任捆绑包:rosa edit cluster -c <cluster_name> --additional-trust-bundle-file ""
$ rosa edit cluster -c <cluster_name> --additional-trust-bundle-file ""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
I: Updated cluster <cluster_name>
I: Updated cluster <cluster_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用
rosa describe命令验证信任捆绑包是否已从集群中删除:$ rosa describe cluster -c <cluster_name>
$ rosa describe cluster -c <cluster_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在删除前,会显示额外的信任捆绑包部分,以便将其值用于安全目的:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除代理后,额外的信任捆绑包会被删除:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.