×

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

此功能提供以下好处

  • 基于每个命名空间的细粒度出站流量控制

  • 静态和动态外部网关 IP 地址的灵活配置

  • 支持 IPv4 和 IPv6 地址族

先决条件

  • 您的集群使用 OVN-Kubernetes 网络插件。

  • 您的基础架构已配置为路由来自次要外部网关的流量。

OpenShift Container Platform 如何确定外部网关 IP 地址

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

每个 `AdminPolicyBasedExternalRoute` CR 针对的命名空间都不能被任何其他 `AdminPolicyBasedExternalRoute` CR 选择。一个命名空间不能拥有并发次要外部网关。

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

静态分配

直接指定 IP 地址。

动态分配

您可以使用命名空间和 Pod 选择器以及可选的网络附件定义间接指定 IP 地址。

  • 如果提供了网络附件定义的名称,则使用网络附件的外部网关 IP 地址。

  • 如果未提供网络附件定义的名称,则使用 Pod 本身的外部网关 IP 地址。但是,此方法仅在 Pod 配置为将 `hostNetwork` 设置为 `true` 时才有效。

AdminPolicyBasedExternalRoute 对象配置

您可以定义一个 `AdminPolicyBasedExternalRoute` 对象(集群范围),它具有以下属性。一次只能有一个 `AdminPolicyBasedExternalRoute` CR 选择一个命名空间。

表 1. `AdminPolicyBasedExternalRoute` 对象
字段 类型 描述

metadata.name

字符串

指定 `AdminPolicyBasedExternalRoute` 对象的名称。

spec.from

字符串

指定路由策略适用的命名空间选择器。外部流量仅支持 `namespaceSelector`。例如

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

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

spec.nextHops

对象

指定将数据包转发到的目标。必须是 `static` 和 `dynamic` 之一或两者。您必须至少定义一个下一跳。

表 2. `nextHops` 对象
字段 类型 描述

static

数组

指定静态 IP 地址的数组。

dynamic

数组

指定与配置为使用网络附件定义作为外部网关目标的 Pod 对应的 Pod 选择器的数组。

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

ip

字符串

指定下一个目标跳的 IPv4 或 IPv6 地址。

bfdEnabled

布尔值

可选:指定网络是否支持双向转发检测 (BFD)。默认值为 `false`。

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

podSelector

字符串

指定一个 [基于集合的](https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/labels/#set-based-requirement) 标签选择器,用于筛选与该网络配置匹配的命名空间中的 Pod。

namespaceSelector

字符串

指定一个基于集合的选择器,用于筛选 `podSelector` 应用到的命名空间。必须为此字段指定一个值。

bfdEnabled

布尔值

可选:指定网络是否支持双向转发检测 (BFD)。默认值为 `false`。

networkAttachmentName

字符串

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

次要外部网关配置示例

在以下示例中,`AdminPolicyBasedExternalRoute` 对象将两个静态 IP 地址配置为具有 `kubernetes.io/metadata.name: novxlan-externalgw-ecmp-4059` 标签的命名空间中 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

配置辅助外部网关

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

先决条件
  • 您已安装 OpenShift 命令行界面 (oc)。

  • 您已使用具有 cluster-admin 权限的用户登录到集群。

步骤
  1. 创建一个包含 AdminPolicyBasedExternalRoute 对象的 YAML 文件。

  2. 要创建基于管理员策略的外部路由,请输入以下命令

    $ oc create -f <file>.yaml

    其中

    <文件>

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

    示例输出
    adminpolicybasedexternalroute.k8s.ovn.org/default-route-policy created
  3. 要确认已创建基于管理员策略的外部路由,请输入以下命令

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

    其中

    <名称>

    指定 `AdminPolicyBasedExternalRoute` 对象的名称。

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

其他资源