×

您可以使用集群网络操作符 (CNO) 在 OpenShift Container Platform 集群上部署和管理集群网络组件,包括在安装期间为集群选择的容器网络接口 (CNI) 网络插件。

集群网络操作符

集群网络操作符实现来自 `operator.openshift.io` API 组的 `network` API。操作符使用守护程序集部署 OVN-Kubernetes 网络插件或您在集群安装期间选择的网络提供程序插件。

步骤

集群网络操作符在安装期间作为 Kubernetes `Deployment` 部署。

  1. 运行以下命令以查看 Deployment 状态

    $ oc get -n openshift-network-operator deployment/network-operator
    示例输出
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    network-operator   1/1     1            1           56m
  2. 运行以下命令以查看集群网络操作符的状态

    $ oc get clusteroperator/network
    示例输出
    NAME      VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    network   4.16.1     True        False         False      50m

    以下字段提供有关操作符状态的信息:`AVAILABLE`、`PROGRESSING` 和 `DEGRADED`。当集群网络操作符报告可用状态条件时,`AVAILABLE` 字段为 `True`。

查看集群网络配置

每个新的 OpenShift Container Platform 安装都具有名为 `cluster` 的 `network.config` 对象。

步骤
  • 使用 `oc describe` 命令查看集群网络配置

    $ oc describe network.config/cluster
    示例输出
    Name:         cluster
    Namespace:
    Labels:       <none>
    Annotations:  <none>
    API Version:  config.openshift.io/v1
    Kind:         Network
    Metadata:
      Creation Timestamp:  2024-08-08T11:25:56Z
      Generation:          3
      Resource Version:    29821
      UID:                 808dd2be-5077-4ff7-b6bb-21b7110126c7
    Spec: (1)
      Cluster Network:
        Cidr:         10.128.0.0/14
        Host Prefix:  23
      External IP:
        Policy:
      Network Diagnostics:
        Mode:
        Source Placement:
        Target Placement:
      Network Type:  OVNKubernetes
      Service Network:
        172.30.0.0/16
    Status: (2)
      Cluster Network:
        Cidr:               10.128.0.0/14
        Host Prefix:        23
      Cluster Network MTU:  1360
      Conditions:
        Last Transition Time:  2024-08-08T11:51:50Z
        Message:
        Observed Generation:   0
        Reason:                AsExpected
        Status:                True
        Type:                  NetworkDiagnosticsAvailable
      Network Type:            OVNKubernetes
      Service Network:
        172.30.0.0/16
    Events:  <none>
    1 `Spec` 字段显示集群网络的已配置状态。
    2 `Status` 字段显示集群网络配置的当前状态。

查看集群网络操作符状态

您可以使用 `oc describe` 命令检查状态并查看集群网络操作符的详细信息。

步骤
  • 运行以下命令以查看集群网络操作符的状态

    $ oc describe clusteroperators/network

全局启用 IP 转发

从 OpenShift Container Platform 4.14 开始,基于 OVN-Kubernetes 的集群部署中全局 IP 地址转发被禁用,以防止节点充当路由器的集群管理员出现不良影响。但是,在管理员期望转发流量的某些情况下,可以使用新的配置参数 `ipForwarding` 来允许转发所有 IP 流量。

要在 OVN-Kubernetes 管理的接口上重新启用所有流量的 IP 转发,请按照以下步骤将集群网络操作符中的 `gatewayConfig.ipForwarding` 规范设置为 `Global`

步骤
  1. 通过运行以下命令备份现有网络配置

    $ oc get network.operator cluster -o yaml > network-config-backup.yaml
  2. 运行以下命令以修改现有网络配置

    $ oc edit network.operator cluster
    1. 在以下示例中所示的 `spec` 下添加或更新以下块

      spec:
        clusterNetwork:
        - cidr: 10.128.0.0/14
          hostPrefix: 23
        serviceNetwork:
        - 172.30.0.0/16
        networkType: OVNKubernetes
        clusterNetworkMTU: 8900
        defaultNetwork:
          ovnKubernetesConfig:
            gatewayConfig:
              ipForwarding: Global
    2. 保存并关闭文件。

  3. 应用更改后,OpenShift 集群网络操作符 (CNO) 会在整个集群中应用更新。您可以使用以下命令监控进度

    $ oc get clusteroperators network

    状态最终应报告为 `Available`、`Progressing=False` 和 `Degraded=False`。

  4. 或者,您可以通过运行以下命令全局启用 IP 转发

    $ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}

    此参数的另一个有效选项是 `Restricted`,如果您想恢复此更改。`Restricted` 是默认值,使用此设置将禁用全局 IP 地址转发。

查看集群网络操作符日志

您可以使用 `oc logs` 命令查看集群网络操作符日志。

步骤
  • 运行以下命令以查看集群网络操作符的日志

    $ oc logs --namespace=openshift-network-operator deployment/network-operator

集群网络操作员配置

集群网络的配置指定为集群网络操作员 (CNO) 配置的一部分,并存储在一个名为cluster的自定义资源 (CR) 对象中。CR 指定了operator.openshift.io API 组中Network API 的字段。

在集群安装期间,CNO 配置从Network.config.openshift.io API 组中的Network API 继承以下字段

clusterNetwork

分配 Pod IP 地址的 IP 地址池。

serviceNetwork

服务的 IP 地址池。

defaultNetwork.type

集群网络插件。安装过程中,唯一支持的插件是OVNKubernetes

集群安装后,您只能修改clusterNetwork IP 地址范围。

您可以通过设置名为cluster的 CNO 对象中defaultNetwork对象的字段来指定集群的集群网络插件配置。

集群网络操作员配置对象

集群网络操作员 (CNO) 的字段在以下表格中描述

表 1. 集群网络操作员配置对象
字段 类型 描述

metadata.name

字符串

CNO 对象的名称。此名称始终为cluster

spec.clusterNetwork

数组

指定分配 Pod IP 地址的 IP 地址块以及分配给集群中每个节点的子网前缀长度的列表。例如:

spec:
  clusterNetwork:
  - cidr: 10.128.0.0/19
    hostPrefix: 23
  - cidr: 10.128.32.0/19
    hostPrefix: 23

spec.serviceNetwork

数组

服务的 IP 地址块。OVN-Kubernetes 网络插件只支持服务网络的单个 IP 地址块。例如:

spec:
  serviceNetwork:
  - 172.30.0.0/14

此值为只读,并在集群安装期间从名为clusterNetwork.config.openshift.io对象继承。

spec.defaultNetwork

对象

配置集群网络的网络插件。

spec.kubeProxyConfig

对象

此对象的字段指定 kube-proxy 配置。如果您使用的是 OVN-Kubernetes 集群网络插件,则 kube-proxy 配置无效。

对于需要跨多个网络部署对象的集群,请确保为install-config.yaml文件中定义的每种网络类型指定相同的clusterNetwork.hostPrefix参数值。为每个clusterNetwork.hostPrefix参数设置不同的值可能会影响 OVN-Kubernetes 网络插件,插件无法有效地路由不同节点之间的对象流量。

defaultNetwork 对象配置

defaultNetwork 对象的值在以下表格中定义

表 2. defaultNetwork 对象
字段 类型 描述

type

字符串

OVNKubernetes。安装过程中选择 Red Hat OpenShift Networking 网络插件。集群安装后无法更改此值。

OpenShift Container Platform 默认使用 OVN-Kubernetes 网络插件。OpenShift SDN 对于新的集群不再可用作安装选项。

ovnKubernetesConfig

对象

此对象仅对 OVN-Kubernetes 网络插件有效。

OVN-Kubernetes 网络插件的配置

下表描述了 OVN-Kubernetes 网络插件的配置字段

表 3. ovnKubernetesConfig 对象
字段 类型 描述

mtu

整数

Geneve(通用网络虚拟化封装)覆盖网络的最大传输单元 (MTU)。此值通常自动配置。

genevePort

整数

Geneve 覆盖网络的 UDP 端口。

ipsecConfig

对象

描述集群 IPsec 模式的对象。

ipv4

对象

指定 IPv4 设置的配置对象。

ipv6

对象

指定 IPv6 设置的配置对象。

policyAuditConfig

对象

指定一个配置对象来自定义网络策略审计日志记录。如果未设置,则使用默认审计日志设置。

gatewayConfig

对象

可选:指定一个配置对象来自定义如何将出站流量发送到节点网关。

迁移出站流量期间,在集群网络操作员 (CNO) 成功推出更改之前,您可能会遇到工作负载和服务流量的一些中断。

表 4. ovnKubernetesConfig.ipv4 对象
字段 类型 描述

internalTransitSwitchSubnet

字符串

如果您的现有网络基础设施与100.88.0.0/16 IPv4 子网重叠,您可以为 OVN-Kubernetes 指定不同的内部使用 IP 地址范围。启用东西向流量的分布式转接交换机的子网。此子网不能与 OVN-Kubernetes 或主机本身使用的任何其他子网重叠。它必须足够大,能够容纳集群中每个节点的一个 IP 地址。

默认值为100.88.0.0/16

internalJoinSubnet

字符串

如果您的现有网络基础设施与100.64.0.0/16 IPv4 子网重叠,您可以为 OVN-Kubernetes 指定不同的内部使用 IP 地址范围。您必须确保 IP 地址范围不与 OpenShift Container Platform 安装使用的任何其他子网重叠。IP 地址范围必须大于可以添加到集群中的最大节点数。例如,如果clusterNetwork.cidr值为10.128.0.0/14,而clusterNetwork.hostPrefix值为/23,则最大节点数为2^(23-14)=512

默认值为100.64.0.0/16

表 5. ovnKubernetesConfig.ipv6 对象
字段 类型 描述

internalTransitSwitchSubnet

字符串

如果您的现有网络基础设施与fd97::/64 IPv6 子网重叠,您可以为 OVN-Kubernetes 指定不同的内部使用 IP 地址范围。启用东西向流量的分布式转接交换机的子网。此子网不能与 OVN-Kubernetes 或主机本身使用的任何其他子网重叠。它必须足够大,能够容纳集群中每个节点的一个 IP 地址。

默认值为fd97::/64

internalJoinSubnet

字符串

如果您的现有网络基础设施与fd98::/64 IPv6 子网重叠,您可以为 OVN-Kubernetes 指定不同的内部使用 IP 地址范围。您必须确保 IP 地址范围不与 OpenShift Container Platform 安装使用的任何其他子网重叠。IP 地址范围必须大于可以添加到集群中的最大节点数。

默认值为fd98::/64

表 6. policyAuditConfig 对象
字段 类型 描述

rateLimit

整数

每个节点每秒生成的最多消息数。默认值为每秒20条消息。

maxFileSize

整数

审计日志的最大大小(字节)。默认值为50000000或 50 MB。

maxLogFiles

整数

保留的最大日志文件数。

destination

字符串

以下附加审计日志目标之一

libc

主机上 journald 进程的 libc syslog() 函数。

udp:<host>:<port>

syslog 服务器。将<host>:<port>替换为 syslog 服务器的主机和端口。

unix:<file>

<file>指定的 Unix 域套接字文件。

null

不将审计日志发送到任何其他目标。

syslogFacility

字符串

syslog 设施,例如 RFC5424 中定义的kern。默认值为local0

表 7. gatewayConfig 对象
字段 类型 描述

routingViaHost

布尔值

将此字段设置为true可将 Pod 的出站流量发送到主机网络堆栈。对于依赖于内核路由表中手动配置的路由的高度专业化安装和应用程序,您可能希望将出站流量路由到主机网络堆栈。默认情况下,出站流量在 OVN 中处理以退出集群,并且不受内核路由表中专用路由的影响。默认值为false

此字段与 Open vSwitch 硬件卸载功能交互。如果将此字段设置为true,则无法获得卸载带来的性能优势,因为出站流量由主机网络堆栈处理。

ipForwarding

对象

您可以使用Network资源中的ipForwarding规范来控制OVN-Kubernetes管理接口上所有流量的IP转发。指定Restricted仅允许与Kubernetes相关的流量进行IP转发。指定Global允许转发所有IP流量。对于新安装,默认值为Restricted。对于OpenShift Container Platform 4.14或更高版本的更新,默认值为Global

ipv4

对象

可选:指定一个对象来配置用于IPv4地址的主机到服务的内部OVN-Kubernetes伪装地址。

ipv6

对象

可选:指定一个对象来配置用于IPv6地址的主机到服务的内部OVN-Kubernetes伪装地址。

表 8. gatewayConfig.ipv4 对象
字段 类型 描述

internalMasqueradeSubnet

字符串

内部用于启用主机到服务流量的伪装IPv4地址。主机也配置了这些IP地址以及共享网关桥接接口。默认值为169.254.169.0/29

对于OpenShift Container Platform 4.17及更高版本,集群使用169.254.0.0/17作为默认伪装子网。对于升级的集群,默认伪装子网不会更改。

表 9. gatewayConfig.ipv6 对象
字段 类型 描述

internalMasqueradeSubnet

字符串

内部用于启用主机到服务流量的伪装IPv6地址。主机也配置了这些IP地址以及共享网关桥接接口。默认值为fd69::/125

对于OpenShift Container Platform 4.17及更高版本,集群使用fd69::/112作为默认伪装子网。对于升级的集群,默认伪装子网不会更改。

表 10. ipsecConfig 对象
字段 类型 描述

mode

字符串

指定IPsec实现的行为。必须是以下值之一

  • Disabled:在集群节点上未启用IPsec。

  • External:对于与外部主机的网络流量,启用IPsec。

  • Full:对于Pod流量和与外部主机的网络流量,启用IPsec。

您只能在集群安装期间更改集群网络插件的配置,但gatewayConfig字段例外,它可以在安装后作为后期活动进行更改。

启用IPSec的OVN-Kubernetes配置示例
defaultNetwork:
  type: OVNKubernetes
  ovnKubernetesConfig:
    mtu: 1400
    genevePort: 6081
      ipsecConfig:
        mode: Full

集群网络操作员示例配置

以下示例中指定了完整的CNO配置

集群网络操作员对象示例
apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  serviceNetwork:
  - 172.30.0.0/16
  networkType: OVNKubernetes
      clusterNetworkMTU: 8900