第 6 章 路由公告


6.1. 关于路由公告

此功能为 OVN-Kubernetes 网络插件提供路由公告功能。Border Gateway Router (BGP) 供应商是必需的。如需更多信息,请参阅关于 BGP 路由

6.1.1. 使用边框网关协议公告集群网络路由

在启用路由公告后,OVN-Kubernetes 网络插件支持默认 pod 网络和集群用户定义的(CUDN)网络公告网络路由到提供商网络,包括 EgressIPs,以及将提供商网络中的路由导入到默认 pod 网络和 CUDN。从提供商网络中,可以直接访问从默认 pod 网络和 CUDN 公告的 IP 地址。

例如,您可以将路由导入到默认 pod 网络,因此不再需要在每个节点上手动配置路由。在以前的版本中,您可能已将 routingViaHost 参数设置为 true,并在每个节点上手动配置路由与大约类似的配置。通过路由公告,您可以无缝完成此任务,并将 routingViaHost 参数设置为 false

您还可以在集群的 Network 自定义资源 CR 中将 routingViaHost 参数设置为 true,但必须在每个节点上手动配置路由来模拟类似的配置。启用路由公告时,您可以在 Network CR 中设置 routingViaHost=false,而无需手动配置每个节点的路由。

支持提供商网络上的路由反映器,并可减少在大型网络上公告路由所需的 BGP 连接数量。

如果您使用启用了路由广告的 EgressIPs,则第 3 层提供商网络会支持 EgressIP 故障转移。这意味着您可以找到在第 2 层段上托管 EgressIPs 的集群节点,在以前,只有第 2 层提供商网络支持,因此需要所有出口节点都位于同一个第 2 层段中。

6.1.1.1. 支持的平台

在裸机基础架构类型上支持带有边框网关协议(BGP)的广告路由。

6.1.1.2. 基础架构要求

要使用路由公告,您必须为网络基础架构配置了 BGP。在网络基础架构出现中断或被错误配置时可能会导致集群网络中断。

6.1.1.3. 与其他网络功能兼容

路由公告支持以下 OpenShift Container Platform 网络功能:

多外部网关(MEG)
MEG 不支持此功能。
EgressIPs

支持使用和公告 EgressIPs。出口 IP 地址所在的节点公告 EgressIP。出口 IP 地址必须与出口节点位于同一个第 2 层网络子网。以下限制适用:

  • 不支持以第 2 层模式运行的用户定义的网络(CUDN)的广告 EgressIP。
  • 将出口 IP 地址分配给主网络接口和分配给额外网络接口的出口 IP 地址的网络的广告 EgressIP 是不切实际的。所有 EgressIPs 都会在所选 FRRConfiguration 实例的所有 BGP 会话上公告,无论这些会话是否在 EgressIP 分配给的同一接口上创建。这可能会导致不需要的公告。
服务
与 MetalLB Operator 一起工作,向提供商网络公告服务。
Egress 服务
完全支持。
出口防火墙
完全支持。
Egress QoS
完全支持。
网络策略
完全支持。
直接 pod ingress
完全支持默认集群网络以及集群用户定义的(CUDN)网络。

6.1.1.4. MetalLB Operator 中使用的注意事项

MetalLB Operator 作为集群的附加组件安装。MetalLB Operator 的部署会自动启用 FRR-K8s 作为额外的路由功能供应商。此功能和 MetalLB Operator 使用相同的 FRR-K8s 部署。

当在 FRRConfiguration CR 中引用 VRF 设备时,VRF 名称需要与 VRF 的 CUDN 名称相同,它需要小于或等于 15 个字符。建议您使用 VRF 名称不要超过 15 个字符,以便从 CUDN 名称中推断 VRF 名称。

6.1.1.6. BGP 路由自定义资源

以下自定义资源(CR)用于通过 BGP 配置路由公告:

RouteAdvertisements
此 CR 定义 BGP 路由公告。在这个 CR 中,OVN-Kubernetes 控制器生成一个 FRRConfiguration 对象,它将 FRR 守护进程配置为公告集群网络路由。此 CR 是集群范围。
FRRConfiguration
此 CR 用于定义 BGP 对等点,并配置从提供商网络到集群网络的路由导入。在应用 RouteAdvertisements 对象前,必须首先定义一个 FRRConfiguration 对象来配置 BGP 对等点。此 CR 针对于特定命名空间。

为每个网络和由 RouteAdvertisements CR 选择的节点生成 FRRConfiguration 对象,其中包含适用于每个节点的适当公告前缀。OVN-Kubernetes 控制器检查 RouteAdvertisements-CR-selected 节点是否是 RouteAdvertisements-CR-selected FRR 配置选择的节点子集。

要接收的任何过滤或选择前缀都不会在从 RouteAdvertisement CR 生成的 FRRConfiguration 对象中考虑。配置要在其他 FRRConfiguration 对象上接收的任何前缀。OVN-Kubernetes 将路由从 VRF 导入到适当的网络中。

6.1.1.8. Cluster Network Operator 配置

Cluster Network Operator (CNO) API 会公开几个字段来配置路由公告:

  • spec.additionalRoutingCapabilities.providers: 指定额外的路由供应商,该供应商需要公告路由。唯一支持的值是 FRR,它为集群启用 FRR-K8S 守护进程部署。启用后,FRR-K8S 守护进程会在所有节点上部署。
  • spec.defaultNetwork.ovnKubernetesConfig.routeAdvertisements: 为默认集群网络和 CUDN 网络启用路由公告。spec.additionalRoutingCapabilities 字段必须设置为 FRR 才能启用此功能。

6.1.2. RouteAdvertisements 对象配置

您可以使用以下属性定义 RouteAdvertisements 对象,该对象是集群范围的。

下表中描述了 RouteAdvertisements 自定义资源 (CR) 的字段:

Expand
表 6.1. RouteAdvertisements 对象
字段类型描述

metadata.name

字符串

指定 RouteAdvertisements 对象的名称。

advertisements

数组

指定包含要公告的不同类型的网络列表的数组。只支持 "PodNetwork""EgressIP" 值。

frrConfigurationSelector

对象

确定 OVN-Kubernetes 驱动的 FRRConfiguration CR 基于哪个 FRRConfiguration CR。

networkSelector

对象

指定要在默认集群网络和集群网络(CUDN)之间公告的网络。

nodeSelector

对象

将公告限制为所选节点。当选择了 advertises="PodNetwork" 时,必须选择所有节点。当选择了 advertisements="EgressIP" 时,只会公告分配给所选节点的出口 IP 地址。

targetVRF

字符串

决定在哪个路由器中公告路由。路由在与此虚拟路由和转发(VRF)目标关联的路由器上公告,如所选 FRRConfiguration CR 中指定的。如果省略,默认的 VRF 将作为目标。当指定为 auto 时,名称与网络名称相同的 VRF 与目标一起使用。

6.1.3. 使用 BGP 广告 pod IP 地址示例

以下示例描述了使用边框网关协议(BGP)广告 pod IP 地址和 EgressIPs 的几个配置。外部网络边框路由器具有 172.18.0.5 IP 地址。这些配置假设您配置了外部路由反映器,它可以将路由转发到集群网络上的所有节点。

6.1.3.1. 公告默认集群网络

在这种情况下,默认集群网络会公开给外部网络,以便 pod IP 地址和 EgressIPs 被公告到提供商网络。

这个场景依赖于以下 FRRConfiguration 对象:

FRRConfiguration CR

apiVersion: k8s.ovn.org/v1
kind: RouteAdvertisements
metadata:
  name: default
spec:
  advertisements:
  - PodNetwork
  - EgressIP
  networkSelectors:
  - networkSelectionType: DefaultNetwork
  frrConfigurationSelector:
    matchLabels:
      routeAdvertisements: receive-all
  nodeSelector: {}
Copy to Clipboard Toggle word wrap

当 OVN-Kubernetes 控制器看到这个 RouteAdvertisements CR 时,它会根据将 FRR 守护进程配置为公告默认集群网络的路由,生成其他 FRRConfiguration 对象。

OVN-Kubernetes 生成的 FRRConfiguration CR 示例

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: ovnk-generated-abcdef
  namespace: openshift-frr-k8s
spec:
  bgp:
    routers:
    - asn: 64512
      neighbors:
        - address: 172.18.0.5
          asn: 64512
          toReceive:
            allowed:
              mode: filtered
          toAdvertise:
            allowed:
              prefixes:
              - <default_network_host_subnet>
      prefixes:
      - <default_network_host_subnet>
  nodeSelector:
    matchLabels:
      kubernetes.io/hostname: ovn-worker
Copy to Clipboard Toggle word wrap

在生成的 FRRConfiguration 对象中,<default_network_host_subnet> 是公告到提供商网络的默认集群网络的子网。

在这种情况下,blue 集群用户定义的网络(CUDN)公开给外部网络,以便网络的 pod IP 地址和 EgressIPs 会公告到提供商网络。

这个场景依赖于以下 FRRConfiguration 对象:

FRRConfiguration CR

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: receive-all
  namespace: openshift-frr-k8s
  labels:
    routeAdvertisements: receive-all
spec:
  bgp:
    routers:
    - asn: 64512
      neighbors:
      - address: 172.18.0.5
        asn: 64512
        disableMP: true
        toReceive:
          allowed:
            mode: all
Copy to Clipboard Toggle word wrap

使用这个 FRRConfiguration 对象,路由将从邻居 172.18.0.5 导入到默认的 VRF 中,并可用于默认集群网络。

CUDN 通过默认的 VRF 公告,如下图所示:

Red CUDN
  • 名为 red 的 VRF 与名为 red 的 CUDN 关联
  • 子网 10.0.0.0/24
Blue CUDN
  • 名为 blue 的 VRF 与名为 blue 的 CUDN 关联
  • 子网 10.0.1.0/24

在此配置中,定义了两个单独的 CUDN。red 网络涵盖 10.0.0.0/24 子网,blue 网络涵盖 10.0.1.0/24 子网。red 和 blue 网络被标记为 export: true

以下 RouteAdvertisements CR 描述了 red 和 blue 租户的配置:

red 和 blue 租户的 RouteAdvertisements CR

apiVersion: k8s.ovn.org/v1
kind: RouteAdvertisements
metadata:
  name: advertise-cudns
spec:
  advertisements:
  - PodNetwork
  - EgressIP
  networkSelectors:
  - networkSelectionType: ClusterUserDefinedNetworks
    clusterUserDefinedNetworkSelector:
      networkSelector:
        matchLabels:
          export: "true"
  frrConfigurationSelector:
    matchLabels:
      routeAdvertisements: receive-all
  nodeSelector: {}
Copy to Clipboard Toggle word wrap

当 OVN-Kubernetes 控制器看到这个 RouteAdvertisements CR 时,它会根据将 FRR 守护进程配置为公告路由的所选 FRRConfiguration 对象生成其他 FRRConfiguration 对象。以下示例是这样的配置对象,根据所选的节点和网络创建 FRRConfiguration 对象的数量。

OVN-Kubernetes 生成的 FRRConfiguration CR 示例

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: ovnk-generated-abcdef
  namespace: openshift-frr-k8s
spec:
  bgp:
    routers:
    - asn: 64512
      vrf: blue
      imports:
      - vrf: default
    - asn: 64512
      neighbors:
        - address: 172.18.0.5
          asn: 64512
          toReceive:
            allowed:
              mode: filtered
          toAdvertise:
            allowed:
              prefixes:
              - 10.0.1.0/24
      prefixes:
      - 10.0.1.0/24
      imports:
      - vrf: blue
  nodeSelector:
    matchLabels:
      kubernetes.io/hostname: ovn-worker
Copy to Clipboard Toggle word wrap

生成的 FRRConfiguration 对象配置子网 10.0.1.0/24,它属于网络 blue,以导入到默认的 VRF 中,并公告到 172.18.0.5 邻居。为每个网络和由 RouteAdvertisements CR 选择的节点生成 FRRConfiguration 对象,其具有适用于每个节点的适当前缀。

当省略 targetVRF 字段时,路由会被泄漏,并通过默认的 VRF 公告。另外,在初始 FRRConfiguration 对象定义后导入到默认 VRF 的路由也会导入到 blue VRF 中。

在这种情况下,VLAN 接口附加到与 blue 网络关联的 VRF 设备。此设置提供了一个 VRF lite 设计,其中 FRR-K8S 用于通过 blue 网络 VRF/VLAN 链路上对应的 BGP 会话向下一跃点提供 Edge (PE)路由器公告 blue 网络。red 租户使用相同的配置。blue 和 red 网络被标记为 export: true

重要

这个场景不支持使用 EgressIP。

下图演示了此配置:

Red CUDN
  • 名为 red 的 VRF 与名为 red 的 CUDN 关联
  • 附加到 VRF 设备的 VLAN 接口并连接到外部 PE 路由器
  • 分配的子网 10.0.2.0/24
Blue CUDN
  • 名为 blue 的 VRF 与名为 blue 的 CUDN 关联
  • 附加到 VRF 设备的 VLAN 接口并连接到外部 PE 路由器
  • 分配的子网 10.0.1.0/24
注意

只有在 OVN-Kubernetes 网络插件的 ovnKubernetesConfig.gatewayConfig 规格中设置 routingViaHost=true 时,这个方法才可用。

在以下配置中,额外的 FRRConfiguration CR 使用 blue 和 red VLAN 上的 PE 路由器配置对等路由器:

为 BGP VPN 设置手动配置 FRRConfiguration CR

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: vpn-blue-red
  namespace: openshift-frr-k8s
  labels:
    routeAdvertisements: vpn-blue-red
spec:
  bgp:
    routers:
    - asn: 64512
      vrf: blue
      neighbors:
      - address: 182.18.0.5
        asn: 64512
        toReceive:
          allowed:
            mode: filtered
    - asn: 64512
      vrf: red
      neighbors:
      - address: 192.18.0.5
        asn: 64512
        toReceive:
          allowed:
            mode: filtered
Copy to Clipboard Toggle word wrap

以下 RouteAdvertisements CR 描述了 blue 和 red 租户的配置:

blue 和 red 租户的 RouteAdvertisements CR

apiVersion: k8s.ovn.org/v1
kind: RouteAdvertisements
metadata:
  name: advertise-vrf-lite
spec:
  targetVRF: auto
  advertisements:
  - "PodNetwork"
  nodeSelector: {}
  frrConfigurationSelector:
    matchLabels:
      routeAdvertisements: vpn-blue-red
  networkSelectors:
  - networkSelectionType: ClusterUserDefinedNetworks
    clusterUserDefinedNetworkSelector:
      networkSelector:
        matchLabels:
          export: "true"
Copy to Clipboard Toggle word wrap

RouteAdvertisements CR 中,目标VRF 被设置为 auto,以便在与所选独立网络的 VRF 设备中进行公告。在这种情况下,blue VRF 设备的 Pod 子网会公告,而 red VRF 设备的 pod 子网会公告红色的 VRF 设备。另外,每个 BGP 会话导入路由只路由到由初始 FRRConfiguration 对象定义的对应 CUDN VRF。

当 OVN-Kubernetes 控制器看到这个 RouteAdvertisements CR 时,它会根据将 FRR 守护进程配置为公告 blue 和 red 租户的路由,生成其他 FRRConfiguration 对象。

OVN-Kubernetes 生成的 FRRConfiguration CR 用于 blue 和 red 租户

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: ovnk-generated-abcde
  namespace: openshift-frr-k8s
spec:
  bgp:
    routers:
    - asn: 64512
      neighbors:
      - address: 182.18.0.5
        asn: 64512
        toReceive:
          allowed:
            mode: filtered
        toAdvertise:
          allowed:
            prefixes:
            - 10.0.1.0/24
      vrf: blue
      prefixes:
        - 10.0.1.0/24
    - asn: 64512
      neighbors:
      - address: 192.18.0.5
        asn: 64512
        toReceive:
          allowed:
            mode: filtered
        toAdvertise:
          allowed:
            prefixes:
            - 10.0.2.0/24
      vrf: red
      prefixes:
         - 10.0.2.0/24
  nodeSelector:
     matchLabels:
        kubernetes.io/hostname: ovn-worker
Copy to Clipboard Toggle word wrap

在这种情况下,必须在定义对等关系的 FRRConfiguration CR 中完成要接收的任何过滤或选择路由。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat