OVN-Kubernetes 网络插件


OpenShift Dedicated 4

OpenShift Dedicated 中 OVN-Kubernetes 网络插件的深度配置和故障排除

Red Hat OpenShift Documentation Team

摘要

本文档提供有关 OpenShift Dedicated 中 OVN-Kubernetes 网络插件的架构、配置和故障排除的信息。

第 1 章 关于 OVN-Kubernetes 网络插件

OpenShift Dedicated 集群将虚拟网络用于 pod 和服务网络。

Red Hat OpenShift Networking 的一部分,OVN-Kubernetes 网络插件是 OpenShift Dedicated 的默认网络供应商。OVN-Kubernetes 基于 Open Virtual Network(OVN),它提供了一个基于 overlay 的网络实现。使用 OVN-Kubernetes 插件的集群还在每个节点上运行 Open vSwitch (OVS)。OVN 在每个节点上配置 OVS 来实现声明的网络配置。

注意

OVN-Kubernetes 是 OpenShift Dedicated 和单节点 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)。
  • 使用您在集群安装过程中为节点创建的主网络接口(如 eth 0 或 bond 0)来创建其他二级网络。

红帽支持以下使用 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
    Copy to Clipboard Toggle word wrap

    唯一的解析是重新配置主机网络,以便两个 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
    Copy to Clipboard Toggle word wrap

    唯一的解析是重新配置主机网络,以便两个 IP 系列都包含默认网关。

  • 如果您为集群在 MachineConfig 自定义资源(CR)的 kernelArgument 部分中将 ipv6.disable 参数设置为 1,则 OVN-Kubernetes pod 会进入 CrashLoopBackOff 状态。另外,将集群更新至 OpenShift Dedicated 的更新版本会失败,因为 Network Operator 处于 Degraded 状态。红帽不支持为集群禁用 IPv6 寻址,因此不要将 ipv6.disable 参数设置为 1

1.3. 会话关联性

会话关联性是适用于 Kubernetes Service 对象的功能。如果要确保每次连接到 <service_VIP>:<Port> 时,您可以使用 会话关联性,流量始终被加载到同一后端。如需更多信息,包括如何根据客户端的 IP 地址设置会话关联性,请参阅会话关联性

1.3.1. 会话关联性的粘性超时

OpenShift Dedicated 的 OVN-Kubernetes 网络插件根据最后一个数据包计算来自客户端的会话的粘性超时。例如,如果您运行 curl 命令 10 次,则粘性会话计时器从第十个数据包开始,而不是第一个数据包。因此,如果客户端不断联系该服务,则会话永远不会超时。当服务没有收到 timeoutSeconds 参数所设定的时间的数据包时,超时开始。

作为 OpenShift Dedicated 集群管理员,您可以从 OpenShift SDN 网络插件启动迁移到 OVN-Kubernetes 网络插件,并使用 OCM CLI 验证迁移状态。

开始迁移前的一些注意事项包括:

  • 集群版本必须是 4.16.43 及更高版本。
  • 迁移过程无法中断。
  • 无法迁移回 SDN 网络插件。
  • 集群节点将在迁移过程中重新引导。
  • 对节点中断的工作负载不会有影响。
  • 根据集群大小和工作负载配置,迁移时间可能会在几分钟和小时之间而有所不同。
警告

您只能在版本 4.16.43 及更高版本的集群中启动迁移。

重要

OpenShift Cluster Manager API 命令行界面(ocm)只是一个技术预览功能。有关红帽开发人员预览功能的支持范围的更多信息,请参阅 开发人员预览支持范围

流程

  1. 使用以下内容创建 JSON 文件:

    {
      "type": "sdnToOvn"
    }
    Copy to Clipboard Toggle word wrap
    • 可选:在 JSON 文件中,您可以使用任何或所有选项 加入伪装和传输,以及每个选项的一个 CIDR 配置内部子网,如下例所示:

      {
        "type": "sdnToOvn",
        "sdn_to_ovn": {
          "transit_ipv4": "192.168.255.0/24",
          "join_ipv4": "192.168.255.0/24",
          "masquerade_ipv4": "192.168.255.0/24"
        }
      }
      Copy to Clipboard Toggle word wrap
      注意

      OVN-Kubernetes 保留以下 IP 地址范围:

      100.64.0.0/16。默认情况下,此 IP 地址范围用于 OVN-Kubernetes 的 internalJoinSubnet 参数。

      100.88.0.0/16。默认情况下,此 IP 地址范围用于 OVN-Kubernetes 的 internalTransSwitchSubnet 参数。

      如果 OpenShift SDN 使用这些 IP 地址,或者任何可能会与此集群通信的外部网络,则您必须在启动有限的实时迁移前使用不同的 IP 地址范围。如需更多信息,请参阅附加资源部分中的 对 OVN-Kubernetes 地址范围 进行补丁。

  2. 要启动迁移,请在终端窗口中运行以下命令:

    $ ocm post /api/clusters_mgmt/v1/clusters/{cluster_id}/migrations 
    1
    
      --body=myjsonfile.json 
    2
    Copy to Clipboard Toggle word wrap
    1
    {cluster_id} 替换为您要迁移到 OVN-Kubernetes 网络插件的集群 ID。
    2
    myjsonfile.json 替换为您在上一步中创建的 JSON 文件的名称。

    输出示例

    {
      "kind": "ClusterMigration",
      "href": "/api/clusters_mgmt/v1/clusters/2gnts65ra30sclb114p8qdc26g5c8o3e/migrations/2gois8j244rs0qrfu9ti2o790jssgh9i",
      "id": "7sois8j244rs0qrhu9ti2o790jssgh9i",
      "cluster_id": "2gnts65ra30sclb114p8qdc26g5c8o3e",
      "type": "sdnToOvn",
      "state": {
        "value": "scheduled",
        "description": ""
      },
      "sdn_to_ovn": {
        "transit_ipv4": "100.65.0.0/16",
        "join_ipv4": "100.66.0.0/16"
      },
      "creation_timestamp": "2025-02-05T14:56:34.878467542Z",
      "updated_timestamp": "2025-02-05T14:56:34.878467542Z"
    }
    Copy to Clipboard Toggle word wrap

验证

  • 要检查迁移的状态,请运行以下命令:

    $ ocm get cluster <cluster_id>/migrations 
    1
    Copy to Clipboard Toggle word wrap
    1
    <cluster_id > 替换为迁移应用到的集群 ID。

第 3 章 配置集群范围代理

如果使用现有的 Virtual Private Cloud (VPC),您可以在 OpenShift Dedicated 集群安装过程中或安装集群后配置集群范围代理。当您启用代理时,核心集群组件会被拒绝访问互联网,但代理不会影响用户工作负载。

注意

只有集群系统出口流量会被代理,包括对云供应商 API 的调用。

您只能为使用客户云订阅 (CCS) 模型的 OpenShift Dedicated 集群启用代理。

如果使用集群范围代理,您需要维护到集群的代理可用性。如果代理不可用,这可能会影响集群的健康和支持性。

3.1. 配置集群范围代理的先决条件

要配置集群范围的代理,您必须满足以下要求。当您在安装过程中或安装后配置代理时,这些要求有效。

3.1.1. 常规要求

  • 您是集群所有者。
  • 您的帐户有足够的权限。
  • 集群有一个现有的 Virtual Private Cloud (VPC)。
  • 您为集群使用客户云订阅 (CCS) 模型。
  • 代理可以访问集群的 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

3.1.2. 网络要求

如果您的代理重新加密出口流量,则必须为 OpenShift 所需的多个域和端口组合创建排除。

您的代理必须排除以下 OpenShift URL 的重新加密:

Expand
表 3.1. 要从出口流量重新加密中排除的 URL
地址协议/端口功能

observatorium-mst.api.openshift.com

https/443

必需。用于管理的 OpenShift 特定遥测。

sso.redhat.com

https/443

https://console.redhat.com/openshift 站点使用 sso.redhat.com 中的身份验证下载集群 pull secret,并使用 Red Hat SaaS 解决方案来简化订阅、集群清单和计费报告的监控。

3.2. 其他信任捆绑包的职责

如果您提供额外的信任捆绑包,您需要进行以下要求:

  • 确保其他信任捆绑包的内容有效
  • 确保证书(包括中间证书)包含在额外的信任捆绑包中,且未过期
  • 跟踪到期,并为附加信任捆绑包中包含的证书执行必要的续订
  • 使用更新的额外信任捆绑包更新集群配置

3.3. 在安装过程中配置代理

当您将带有客户云订阅 (CCS) 集群的 OpenShift Dedicated 安装到现有的 Virtual Private Cloud (VPC) 时,您可以配置 HTTP 或 HTTPS 代理。您可以使用 Red Hat OpenShift Cluster Manager 在安装过程中配置代理。

如果要将 OpenShift Dedicated 集群安装到现有的 Virtual Private Cloud (VPC) 中,您可以使用 Red Hat OpenShift Cluster Manager 在安装过程中启用集群范围的 HTTP 或 HTTPS 代理。您只能为使用客户云订阅 (CCS) 模型的集群启用代理。

在安装前,您必须验证可以从 VPC 访问代理,该代理是否可从安装到的 VPC 中。该代理还必须从 VPC 的专用子网访问。

有关使用 OpenShift Cluster Manager 在安装过程中配置集群范围代理的详细步骤,请参阅在 AWS 上创建集群 或 在 Google Cloud 上创建集群

3.4. 安装后配置代理

当您将带有客户云订阅 (CCS) 集群的 OpenShift Dedicated 安装到现有的 Virtual Private Cloud (VPC) 时,您可以配置 HTTP 或 HTTPS 代理。您可以使用 Red Hat OpenShift Cluster Manager 在安装后配置代理。

您可以使用 Red Hat OpenShift Cluster Manager 将集群范围的代理配置添加到 Virtual Private Cloud (VPC)的现有 OpenShift Dedicated 集群中。您只能为使用客户云订阅 (CCS) 模型的集群启用代理。

您还可以使用 OpenShift Cluster Manager 更新现有的集群范围代理配置。例如,如果代理的任何证书颁发机构过期,您可能需要更新代理的网络地址,或者替换额外的信任捆绑包。

重要

集群将代理配置应用到 control plane 和计算节点。在应用配置时,每个集群节点暂时处于不可调度状态,并排空其工作负载。每个节点都会作为进程的一部分重启。

先决条件

  • 您有一个使用客户云订阅(CCS)模型的 OpenShift Dedicated 集群。
  • 您的集群部署在 VPC 中。

流程

  1. 进入到 OpenShift Cluster Manager 并选择您的集群。
  2. Networking 页面上的 Virtual Private Cloud (VPC) 部分下,点 Edit cluster-wide proxy
  3. Edit cluster-wide proxy 页面中,提供代理配置详情:

    1. 至少在以下字段之一中输入值:

      • 指定有效的 HTTP 代理 URL
      • 指定有效的 HTTPS 代理 URL
      • Additional trust bundle 字段中,提供 PEM 编码 X.509 证书捆绑包。

        如果您要替换现有的信任捆绑包文件,请选择 replace file 来查看字段。捆绑包添加到集群节点的可信证书存储中。如果使用 TLS-inspecting 代理,则需要额外的信任捆绑包文件,除非代理的身份证书由 Red Hat Enterprise Linux CoreOS (RHCOS)信任捆绑包的颁发机构签名。无论代理是透明的,还是需要使用 http-proxyhttps-proxy 参数显式配置,这个要求都适用。

    2. 单击 Confirm

验证

  • Networking 页面上的 Virtual Private Cloud (VPC) 部分下,验证集群的代理配置是否如预期。

第 4 章 为项目启用多播

4.1. 关于多播

通过使用 IP 多播,数据可同时广播到许多 IP 地址。

重要
  • 目前,多播最适用于低带宽协调或服务发现。它不是一个高带宽解决方案。
  • 默认情况下,网络策略会影响命名空间中的所有连接。但是,多播不受网络策略的影响。如果在与网络策略相同的命名空间中启用了多播,则始终允许多播,即使有一个 deny-all 网络策略。在启用网络策略前,集群管理员应考虑对多播的影响。

默认情况下,OpenShift Dedicated pod 间的多播流量被禁用。如果使用 OVN-Kubernetes 网络插件,可以根据每个项目启用多播。

4.2. 启用 pod 间多播

您可以为项目启用 pod 间多播。

先决条件

  • 安装 OpenShift CLI (oc) 。
  • 您必须使用具有 cluster-admindedicated-admin 角色的用户登录集群。

流程

  • 运行以下命令,为项目启用多播。使用您要启用多播的项目的名称替换 <namespace>

    $ oc annotate namespace <namespace> \
        k8s.ovn.org/multicast-enabled=true
    Copy to Clipboard Toggle word wrap
    提示

    您还可以应用以下 YAML 来添加注解:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: <namespace>
      annotations:
        k8s.ovn.org/multicast-enabled: "true"
    Copy to Clipboard Toggle word wrap

验证

要验证项目是否启用了多播,请完成以下步骤:

  1. 将您的当前项目更改为启用多播的项目。使用项目名替换 <project>

    $ oc project <project>
    Copy to Clipboard Toggle word wrap
  2. 创建 pod 以作为多播接收器:

    $ cat <<EOF| oc create -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: mlistener
      labels:
        app: multicast-verify
    spec:
      containers:
        - name: mlistener
          image: registry.access.redhat.com/ubi9
          command: ["/bin/sh", "-c"]
          args:
            ["dnf -y install socat hostname && sleep inf"]
          ports:
            - containerPort: 30102
              name: mlistener
              protocol: UDP
    EOF
    Copy to Clipboard Toggle word wrap
  3. 创建 pod 以作为多播发送器:

    $ cat <<EOF| oc create -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: msender
      labels:
        app: multicast-verify
    spec:
      containers:
        - name: msender
          image: registry.access.redhat.com/ubi9
          command: ["/bin/sh", "-c"]
          args:
            ["dnf -y install socat && sleep inf"]
    EOF
    Copy to Clipboard Toggle word wrap
  4. 在新的终端窗口或选项卡中,启动多播监听程序。

    1. 获得 Pod 的 IP 地址:

      $ POD_IP=$(oc get pods mlistener -o jsonpath='{.status.podIP}')
      Copy to Clipboard Toggle word wrap
    2. 输入以下命令启动多播监听程序:

      $ oc exec mlistener -i -t -- \
          socat UDP4-RECVFROM:30102,ip-add-membership=224.1.0.1:$POD_IP,fork EXEC:hostname
      Copy to Clipboard Toggle word wrap
  5. 启动多播传输。

    1. 获取 pod 网络 IP 地址范围:

      $ CIDR=$(oc get Network.config.openshift.io cluster \
          -o jsonpath='{.status.clusterNetwork[0].cidr}')
      Copy to Clipboard Toggle word wrap
    2. 要发送多播信息,请输入以下命令:

      $ oc exec msender -i -t -- \
          /bin/bash -c "echo | socat STDIO UDP4-DATAGRAM:224.1.0.1:30102,range=$CIDR,ip-multicast-ttl=64"
      Copy to Clipboard Toggle word wrap

      如果多播正在工作,则上一个命令会返回以下输出:

      mlistener
      Copy to Clipboard Toggle word wrap

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.

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat