24.12. 在默认网络中配置外部网关


作为集群管理员,您可以在默认网络上配置外部网关。

此功能提供以下优点:

  • 根据每个命名空间对出口流量进行精细控制
  • 静态和动态外部网关 IP 地址的灵活配置
  • 支持 IPv4 和 IPv6 地址系列

24.12.1. 先决条件

  • 集群使用 OVN-Kubernetes 网络插件。
  • 您的基础架构配置为路由来自二级外部网关的流量。

24.12.2. OpenShift Container Platform 如何决定外部网关 IP 地址

您可以使用 k8s.ovn.org API 组中的 AdminPolicyBasedExternalRoute 自定义资源 (CR) 配置二级外部网关。CR 支持静态和动态方法来指定外部网关的 IP 地址。

AdminPolicyBasedExternalRoute CR 目标的每个命名空间不能被任何其他 AdminPolicyBasedExternalRoute CR 选择。命名空间不能有并发二级外部网关。

对策略的更改在控制器中被隔离。如果策略应用失败,对其他策略的更改不会触发其他策略的重试。策略只会重新评估,在对策略本身或与策略相关的对象(如目标命名空间、Pod 网关或命名空间从动态跃点托管它们)时应用更改可能出现的差异。

静态分配
您可以直接指定 IP 地址。
动态分配

您可以间接指定 IP 地址,带有命名空间和 pod 选择器,以及可选的网络附加定义。

  • 如果提供了网络附加定义的名称,则使用网络附加定义的外部网关 IP 地址。
  • 如果没有提供网络附加定义的名称,则使用 pod 本身的外部网关 IP 地址。但是,只有在 pod 配置为将 hostNetwork 设置为 true 时,此方法才能正常工作。

24.12.3. AdminPolicyBasedExternalRoute 对象配置

您可以使用以下属性来定义集群范围的 AdminPolicyBasedExternalRoute 对象。命名空间一次只能由一个 AdminPolicyBasedExternalRoute CR 选择。

表 24.13. AdminPolicyBasedExternalRoute 对象
字段类型描述

metadata.name

string

指定 AdminPolicyBasedExternalRoute 对象的名称。

spec.from

string

指定路由策略应用到的命名空间选择器。外部流量只支持 namespaceSelector。例如:

from:
  namespaceSelector:
    matchLabels:
      kubernetes.io/metadata.name: novxlan-externalgw-ecmp-4059

命名空间只能由一个 AdminPolicyBasedExternalRoute CR 为目标。如果命名空间由多个 AdminPolicyBasedExternalRoute CR 选择,则第二个和后续 CR 中针对同一命名空间会出现一个 failed 错误状态。要应用更新,您必须将策略本身或相关的对象更改为策略,如目标命名空间、Pod 网关或命名空间,以便从动态跃点托管它们,以便策略重新评估并要应用您的更改。

spec.nextHops

object

指定数据包转发到的目的地。需要是 staticdynamic 中的一个或这两个。您必须至少定义一个下一个跃点。

表 24.14. nextHops 对象
字段类型描述

static

数组

指定静态 IP 地址的数组。

dynamic

数组

指定与配置了网络附加定义的 pod 对应的 pod 选择器,用作外部网关目标。

表 24.15. nextHops.static 对象
字段类型描述

ip

string

指定下一个目的地跃点的 IPv4 或 IPv6 地址。

bfdEnabled

布尔值

可选:指定网络是否支持 Bi-Directional Forwarding Detection (BFD)。默认值为 false

表 24.16. nextHops.dynamic 对象
字段类型描述

podSelector

string

指定一个 [set-based](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#set-based-requirement)标签选择器来过滤与此网络配置匹配的命名空间中的 pod。

namespaceSelector

string

指定一个 set-based 选择器,用于过滤 podSelector 应用到的命名空间。必须为此字段指定一个值。

bfdEnabled

布尔值

可选:指定网络是否支持 Bi-Directional Forwarding Detection (BFD)。默认值为 false

networkAttachmentName

string

可选:指定网络附加定义的名称。名称必须与与 pod 关联的逻辑网络列表匹配。如果没有指定此字段,则使用 pod 的主机网络。但是,pod 必须配置为主机网络 pod,才能使用主机网络。

24.12.3.1. 二级外部网关配置示例

在以下示例中,AdminPolicyBasedExternalRoute 对象使用 kubernetes.io/metadata.name: novxlan-externalgw-ecmp-4059 标签在命名空间中将两个静态 IP 地址配置为 pod 的外部网关。

apiVersion: k8s.ovn.org/v1
kind: AdminPolicyBasedExternalRoute
metadata:
  name: default-route-policy
spec:
  from:
    namespaceSelector:
      matchLabels:
        kubernetes.io/metadata.name: novxlan-externalgw-ecmp-4059
  nextHops:
    static:
    - ip: "172.18.0.8"
    - ip: "172.18.0.9"

在以下示例中,AdminPolicyBasedExternalRoute 对象配置一个动态外部网关。用于外部网关的 IP 地址派生自与所选 pod 关联的额外网络附加。

apiVersion: k8s.ovn.org/v1
kind: AdminPolicyBasedExternalRoute
metadata:
  name: shadow-traffic-policy
spec:
  from:
    namespaceSelector:
      matchLabels:
        externalTraffic: ""
  nextHops:
    dynamic:
    - podSelector:
        matchLabels:
          gatewayPod: ""
      namespaceSelector:
        matchLabels:
          shadowTraffic: ""
      networkAttachmentName: shadow-gateway
    - podSelector:
        matchLabels:
          gigabyteGW: ""
      namespaceSelector:
        matchLabels:
          gatewayNamespace: ""
      networkAttachmentName: gateway

在以下示例中,AdminPolicyBasedExternalRoute 对象同时配置静态和动态外部网关。

apiVersion: k8s.ovn.org/v1
kind: AdminPolicyBasedExternalRoute
metadata:
  name: multi-hop-policy
spec:
  from:
    namespaceSelector:
      matchLabels:
        trafficType: "egress"
  nextHops:
    static:
    - ip: "172.18.0.8"
    - ip: "172.18.0.9"
    dynamic:
    - podSelector:
        matchLabels:
          gatewayPod: ""
      namespaceSelector:
        matchLabels:
          egressTraffic: ""
      networkAttachmentName: gigabyte

24.12.4. 配置二级外部网关

您可以为集群中的命名空间在默认网络中配置外部网关。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 使用具有 cluster-admin 权限的用户登陆到集群。

流程

  1. 创建包含 AdminPolicyBasedExternalRoute 对象的 YAML 文件。
  2. 要创建基于 admin 策略的外部路由,请输入以下命令:

    $ oc create -f <file>.yaml

    其中:

    <file>
    指定您在上一步中创建的 YAML 文件的名称。

    输出示例

    adminpolicybasedexternalroute.k8s.ovn.org/default-route-policy created

  3. 要确认已创建了基于 admin 策略的外部路由,请输入以下命令:

    $ oc describe apbexternalroute <name> | tail -n 6

    其中:

    <name>
    指定 AdminPolicyBasedExternalRoute 对象的名称。

    输出示例

    Status:
      Last Transition Time:  2023-04-24T15:09:01Z
      Messages:
      Configured external gateway IPs: 172.18.0.8
      Status:  Success
    Events:  <none>

24.12.5. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.