20.7. 在默认网络中配置外部网关
作为集群管理员,您可以在默认网络上配置外部网关。
此功能提供以下优点:
- 根据每个命名空间对出口流量进行精细控制
- 静态和动态外部网关 IP 地址的灵活配置
- 支持 IPv4 和 IPv6 地址系列
20.7.1. 先决条件
- 集群使用 OVN-Kubernetes 网络插件。
- 您的基础架构配置为路由来自二级外部网关的流量。
20.7.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
时,此方法才能正常工作。
20.7.3. AdminPolicyBasedExternalRoute 对象配置
您可以使用以下属性来定义集群范围的 AdminPolicyBasedExternalRoute
对象。命名空间一次只能由一个 AdminPolicyBasedExternalRoute
CR 选择。
字段 | 类型 | 描述 |
---|---|---|
|
|
指定 |
|
|
指定路由策略应用到的命名空间选择器。外部流量只支持 from: namespaceSelector: matchLabels: kubernetes.io/metadata.name: novxlan-externalgw-ecmp-4059
命名空间只能由一个 |
|
|
指定数据包转发到的目的地。需要是 |
字段 | 类型 | 描述 |
---|---|---|
|
| 指定静态 IP 地址的数组。 |
|
| 指定与配置了网络附加定义的 pod 对应的 pod 选择器,用作外部网关目标。 |
字段 | 类型 | 描述 |
---|---|---|
|
| 指定下一个目的地跃点的 IPv4 或 IPv6 地址。 |
|
|
可选:指定网络是否支持 Bi-Directional Forwarding Detection (BFD)。默认值为 |
字段 | 类型 | 描述 |
---|---|---|
|
| 指定一个 [set-based](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#set-based-requirement)标签选择器来过滤与此网络配置匹配的命名空间中的 pod。 |
|
|
指定一个 |
|
|
可选:指定网络是否支持 Bi-Directional Forwarding Detection (BFD)。默认值为 |
|
| 可选:指定网络附加定义的名称。名称必须与与 pod 关联的逻辑网络列表匹配。如果没有指定此字段,则使用 pod 的主机网络。但是,pod 必须配置为主机网络 pod,才能使用主机网络。 |
20.7.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
20.7.4. 配置二级外部网关
您可以为集群中的命名空间在默认网络中配置外部网关。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
使用具有
cluster-admin
权限的用户登陆到集群。
流程
-
创建包含
AdminPolicyBasedExternalRoute
对象的 YAML 文件。 要创建基于 admin 策略的外部路由,请输入以下命令:
$ oc create -f <file>.yaml
其中:
<file>
- 指定您在上一步中创建的 YAML 文件的名称。
输出示例
adminpolicybasedexternalroute.k8s.ovn.org/default-route-policy created
要确认已创建了基于 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>
20.7.5. 其他资源
- 有关额外网络附加的更多信息,请参阅了解多个网络