配置集中式网关
集中式网关允许子网内的 Pods 使用固定 IP 访问外部网络。这在网络审计、IP 白名单和防火墙规则管理等安全运维场景中尤其有用,因为这些场景需要识别并控制来自特定源 IP 的流量。在集中式网关模式下,来自 Pods 的所有出站流量都会经由指定的网关节点转发,从而实现统一的网络策略强制执行和监控。
NOTE
集中式子网下的 Pods 不能通过 hostport 或 externalTrafficPolicy: Local 的 NodePort 类型 Service 访问。
如果你希望子网内的流量以固定 IP 访问外部网络,用于审计和白名单等安全运维场景,
可以将 Subnet 中的网关类型设置为集中式。
在集中式网关模式下,来自 Pods 访问外部网络的数据包会先被路由到特定节点的 ovn0 网卡,
然后通过主机的路由规则向外转发。
当 natOutgoing 为 true 时,Pod 访问外部网络时将使用特定节点的 IP。
集中式网关示例如下,其中 gatewayType 字段为 centralized
,gatewayNode 为 Kubernetes 中特定机器的 NodeName。
- 如果集中式网关需要为出站网络指定某台机器的特定网卡,
gatewayNode格式可以改为kube-ovn-worker:172.18.0.2, kube-ovn-control-plane:172.18.0.3。 - 自 Kube-OVN v1.12.0 起,Subnet crd 定义中新增了
enableEcmpspec 字段,用于将 ECMP 开关迁移到子网级别。你可以根据不同的子网设置是否启用 ECMP 模式。kube-ovn-controllerdeployment 中的enable-ecmp参数已不再使用。在升级到 v1.12.0 后,之前版本的子网开关会自动继承原全局开关参数的值。
NOTE
在集中式网关 ECMP 模式下,kube-ovn-controller 通过 ping 主动探测节点状态,5s 内检测故障,并在 5s-10s 内完成故障切换,在此期间部分流量可能会失败。
在集中式网关主备模式下,故障切换基于 Node Ready 状态,在断电情况下可能需要几分钟才能完成切换。
使用 Label 选择器指定网关节点
除了直接指定节点名称外,你还可以使用 gatewayNodeSelectors 通过 label 选择器动态选择网关节点。
这种方式更加灵活,尤其适用于节点名称不固定,或者需要根据 label 动态选择网关的场景。
NOTE
- 如果
gatewayNode不为空,则优先使用gatewayNode,并忽略gatewayNodeSelectors。 - 多个选择器之间采用 OR 逻辑进行评估——匹配任意一个选择器的节点都会成为网关节点。
- 当节点 label 发生变化时,系统会自动更新网关节点列表。