Kube-OVN 网络中的 Pod 通过网关来访问集群外的网络,Kube-OVN 目前支持两种类型的网关:分布式网关和集中式网关,用户可以在子网中对网关的类型进行调整。
分布式网关
子网的默认类型网关,每个 node 会作为当前 node 上 pod 访问外部网络的网关。数据包会通过本机的 ovn0 网卡流入主机网络栈,再根据主机的路由规则进行出网。当 natOutgoing 为 true 时,Pod 访问外部网络将会使用当前所在宿主机的 IP。
子网示例,其中gatewayType 字段为 distributed:
- apiVersion: kubeovn.io/v1
- kind: Subnet
- metadata:
- name: distributed
- spec:
- cidrBlock: 10.166.0.0/16
- default: false
- excludeIps:
- - 10.166.0.1
- gateway: 10.166.0.1
- gatewayType: distributed
- natOutgoing: true
集中式网关
如果希望子网内流量访问外网使用固定的 IP,以便审计和白名单等安全操作,可以在子网中设置集中式网关。在集中式网关模式下,Pod 访问外网的数据包会首先被路由到特定节点的 ovn0 网卡,再通过主机的路由规则进行出网。当 natOutgoing 为 true 时,Pod 访问外部网络将会使用特定宿主机的 IP。
子网示例,其中gatewayType 字段为 centralized,gatewayNode 为特定机器在 Kubernetes 中的 node name。其中gatewayNode字段可以为逗号分隔的多台主机,kube-ovn 会自动按照 active-backup 的模式选择状态为 ready 的节点进行故障切换:
- apiVersion: kubeovn.io/v1
- kind: Subnet
- metadata:
- name: centralized
- spec:
- cidrBlock: 10.166.0.0/16
- default: false
- excludeIps:
- - 10.166.0.1
- gateway: 10.166.0.1
- gatewayType: centralized
- gatewayNode: "node1,node2"
- natOutgoing: true