-
如果提供了网络附件定义的名称,则使用网络附件的外部网关 IP 地址。
-
如果未提供网络附件定义的名称,则使用 Pod 本身的外部网关 IP 地址。但是,此方法仅在 Pod 配置为将 `hostNetwork` 设置为 `true` 时才有效。
作为集群管理员,您可以在默认网络上配置外部网关。
此功能提供以下好处
基于每个命名空间的细粒度出站流量控制
静态和动态外部网关 IP 地址的灵活配置
支持 IPv4 和 IPv6 地址族
您可以使用来自 `k8s.ovn.org` API 组的 `AdminPolicyBasedExternalRoute` 自定义资源 (CR) 配置次要外部网关。CR 支持指定外部网关 IP 地址的静态和动态方法。
每个 `AdminPolicyBasedExternalRoute` CR 针对的命名空间都不能被任何其他 `AdminPolicyBasedExternalRoute` CR 选择。一个命名空间不能拥有并发次要外部网关。
策略更改在控制器中是隔离的。如果策略应用失败,对其他策略的更改不会触发其他策略的重试。只有当更新策略本身或与策略相关的对象(例如目标命名空间、Pod 网关或从动态跳跃托管它们的命名空间)时,才会重新评估策略,并应用可能由更改引起的任何差异。
直接指定 IP 地址。
您可以使用命名空间和 Pod 选择器以及可选的网络附件定义间接指定 IP 地址。
如果提供了网络附件定义的名称,则使用网络附件的外部网关 IP 地址。
如果未提供网络附件定义的名称,则使用 Pod 本身的外部网关 IP 地址。但是,此方法仅在 Pod 配置为将 `hostNetwork` 设置为 `true` 时才有效。
您可以定义一个 `AdminPolicyBasedExternalRoute` 对象(集群范围),它具有以下属性。一次只能有一个 `AdminPolicyBasedExternalRoute` CR 选择一个命名空间。
字段 | 类型 | 描述 |
---|---|---|
|
|
指定 `AdminPolicyBasedExternalRoute` 对象的名称。 |
|
|
指定路由策略适用的命名空间选择器。外部流量仅支持 `namespaceSelector`。例如
一个命名空间只能被一个 `AdminPolicyBasedExternalRoute` CR 作为目标。如果一个命名空间被多个 `AdminPolicyBasedExternalRoute` CR 选择,则在第二个及后续针对同一命名空间的 CR 上会出现 `failed` 错误状态。要应用更新,您必须更改策略本身或与策略相关的对象(例如目标命名空间、Pod 网关或从动态跳跃托管它们的命名空间),以便重新评估策略并应用您的更改。 |
|
|
指定将数据包转发到的目标。必须是 `static` 和 `dynamic` 之一或两者。您必须至少定义一个下一跳。 |
字段 | 类型 | 描述 |
---|---|---|
|
|
指定静态 IP 地址的数组。 |
|
|
指定与配置为使用网络附件定义作为外部网关目标的 Pod 对应的 Pod 选择器的数组。 |
字段 | 类型 | 描述 |
---|---|---|
|
|
指定下一个目标跳的 IPv4 或 IPv6 地址。 |
|
|
可选:指定网络是否支持双向转发检测 (BFD)。默认值为 `false`。 |
字段 | 类型 | 描述 |
---|---|---|
|
|
指定一个 [基于集合的](https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/labels/#set-based-requirement) 标签选择器,用于筛选与该网络配置匹配的命名空间中的 Pod。 |
|
|
指定一个基于集合的选择器,用于筛选 `podSelector` 应用到的命名空间。必须为此字段指定一个值。 |
|
|
可选:指定网络是否支持双向转发检测 (BFD)。默认值为 `false`。 |
|
|
可选:指定网络附件定义的名称。该名称必须与与 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
权限的用户登录到集群。
创建一个包含 AdminPolicyBasedExternalRoute
对象的 YAML 文件。
要创建基于管理员策略的外部路由,请输入以下命令
$ oc create -f <file>.yaml
其中
<文件>
指定您在上一步中创建的 YAML 文件的名称。
adminpolicybasedexternalroute.k8s.ovn.org/default-route-policy created
要确认已创建基于管理员策略的外部路由,请输入以下命令
$ 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>
有关附加网络连接的更多信息,请参见 理解多个网络