配置 Egress Gateway
目录
关于 Egress Gateway实现细节注意事项使用方法创建 Network Attachment Definition创建 VPC Egress Gateway启用基于 BFD 的高可用配置参数VPC BFD PortVPC Egress Gateway相关资源关于 Egress Gateway
Egress Gateway 用于控制 Pod 对外部网络的访问,使用一组静态地址,具备以下特性:
- 通过 ECMP 实现 Active-Active 高可用,支持水平吞吐量扩展
- 通过 BFD 实现快速故障切换(<1秒)
- 支持 IPv6 和双栈
- 通过 NamespaceSelector 和 PodSelector 实现精细的路由控制
- 允许通过 NodeSelector 灵活调度 Egress Gateway
同时,Egress Gateway 存在以下限制:
- 使用 macvlan 作为底层网络连接,需底层网络支持 Underlay
- 多实例 Gateway 模式下需要多个 Egress IP
- 目前仅支持 SNAT,不支持 EIP 和 DNAT
- 目前不支持记录源地址转换关系
实现细节
每个 Egress Gateway 由多个 Pod 组成,每个 Pod 配备多个网络接口。 每个 Pod 有两个网络接口:一个加入虚拟网络,用于 VPC 内通信, 另一个通过 Macvlan 连接到底层物理网络,用于外部网络通信。 虚拟网络流量最终通过 Egress Gateway 实例内的 NAT 访问外部网络。
每个 Egress Gateway 实例在 OVN 路由表中注册其地址。 当 VPC 内的 Pod 需要访问外部网络时, OVN 使用源地址哈希将流量转发到多个 Egress Gateway 实例地址, 实现负载均衡。随着 Egress Gateway 实例数量增加, 吞吐量也能水平扩展。
OVN 使用 BFD 协议探测多个 Egress Gateway 实例。 当某个 Egress Gateway 实例故障时,OVN 将对应路由标记为不可用, 实现快速故障检测和恢复。
注意事项
使用 Egress Gateway 前,集群中必须安装Alauda Container Platform Networking for Multus*。*
安装 Alauda Container Platform Networking for Multus,请参考安装 Multus CNI。
使用方法
创建 Network Attachment Definition
Egress Gateway 使用多网卡访问内网和外网, 因此需要创建 Network Attachment Definition 以连接外部网络。 下面示例展示了使用 macvlan 插件和 Kube-OVN 提供的 IPAM:
- 连接外部网络的宿主机接口。
- provider 名称,格式为
<network attachment definition name>.<namespace>。 - 用于标识外部网络的 provider 名称,必须与 NetworkAttachmentDefinition 中一致。
你可以使用任意 CNI 插件创建 Network Attachment Definition 来访问对应网络。
创建 VPC Egress Gateway
创建 VPC Egress Gateway 资源,示例如下:
- VPC Egress Gateway 实例创建所在的命名空间。
- VPC Egress Gateway 实例副本数。
- 连接外部网络的外部子网。
- 用于调度 VPC Egress Gateway 实例的节点选择器。
- 用于调度 VPC Egress Gateway 实例的容忍度。
- 用于选择通过 VPC Egress Gateway 访问外部网络的 Pod 的命名空间选择器和 Pod 选择器。
- VPC Egress Gateway 的策略,包括 SNAT 及应用的子网/IP 段。
- 是否为该策略启用 SNAT。
- 策略应用的子网。
- 策略应用的 IP 段。
上述资源创建了一个名为 gateway1 的 VPC Egress Gateway,位于 default 命名空间, 以下 Pod 将通过 macvlan1 子网访问外部网络:
- default 命名空间中的 Pod
- subnet1 子网下的 Pod
- IP 属于 CIDR 10.18.0.0/16 的 Pod
匹配 .spec.selectors 的 Pod 将启用 SNAT 访问外部网络。
创建完成后,查看 VPC Egress Gateway 资源:
查看更多信息:
查看工作负载:
查看 Pod 中的 IP 地址、路由和 iptables 规则:
在 Gateway Pod 中抓包验证网络流量:
OVN Logical Router 上自动创建路由策略:
- VPC Egress Gateway 用于转发 .spec.policies 指定 Pod 流量的 Logical Router 策略。
- VPC Egress Gateway 用于转发 .spec.selectors 指定 Pod 流量的 Logical Router 策略。
若需启用负载均衡,修改 .spec.replicas,示例如下:
启用基于 BFD 的高可用
基于 BFD 的高可用依赖于 VPC BFD LRP 功能, 因此需要修改 VPC 资源启用 BFD Port。 以下示例为默认 VPC 启用 BFD Port:
- 是否启用 BFD Port。
- BFD Port 使用的 IP 地址,必须是有效且不与其他 IP/子网冲突的地址。
- 用于选择运行 BFD Port 节点的节点选择器,BFD Port 绑定选中节点的 OVN HA Chassis Group,以 Active/Backup 模式工作。
启用 BFD Port 后,OVN Logical Router 上会自动创建专用于 BFD 的 LRP:
- OVN Logical Router 上创建的 BFD Port。
随后,在 VPC Egress Gateway 中将 .spec.bfd.enabled 设置为 true,示例如下:
- Egress Gateway 所属的 VPC。
- Egress Gateway 实例连接的内部子网。
- Egress Gateway 实例连接的外部子网。
- 是否为 Egress Gateway 启用 BFD。
- BFD 最小接收间隔,单位毫秒。
- BFD 最小发送间隔,单位毫秒。
- BFD 乘数,决定多少个丢包后判定故障。
查看 VPC Egress Gateway 信息:
查看 BFD 连接状态:
若所有 Gateway 实例均不可用,应用了 VPC Egress Gateway 的出口流量将被丢弃。