Kube-OVN 网络中的 Pod 通过网关来访问集群外的网络,Kube-OVN 目前支持两种类型的网关:分布式网关和集中式网关,用户可以在子网中对网关的类型进行调整。

分布式网关

子网的默认类型网关,每个 node 会作为当前 node 上 pod 访问外部网络的网关。数据包会通过本机的 ovn0 网卡流入主机网络栈,再根据主机的路由规则进行出网。当 natOutgoing 为 true 时,Pod 访问外部网络将会使用当前所在宿主机的 IP。

子网示例,其中gatewayType 字段为 distributed:

  1. apiVersion: kubeovn.io/v1
  2. kind: Subnet
  3. metadata:
  4. name: distributed
  5. spec:
  6. cidrBlock: 10.166.0.0/16
  7. default: false
  8. excludeIps:
  9. - 10.166.0.1
  10. gateway: 10.166.0.1
  11. gatewayType: distributed
  12. natOutgoing: true

集中式网关

如果希望子网内流量访问外网使用固定的 IP,以便审计和白名单等安全操作,可以在子网中设置集中式网关。在集中式网关模式下,Pod 访问外网的数据包会首先被路由到特定节点的 ovn0 网卡,再通过主机的路由规则进行出网。当 natOutgoing 为 true 时,Pod 访问外部网络将会使用特定宿主机的 IP。

子网示例,其中gatewayType 字段为 centralized,gatewayNode 为特定机器在 Kubernetes 中的 node name。其中gatewayNode字段可以为逗号分隔的多台主机,kube-ovn 会自动按照 active-backup 的模式选择状态为 ready 的节点进行故障切换:

  1. apiVersion: kubeovn.io/v1
  2. kind: Subnet
  3. metadata:
  4. name: centralized
  5. spec:
  6. cidrBlock: 10.166.0.0/16
  7. default: false
  8. excludeIps:
  9. - 10.166.0.1
  10. gateway: 10.166.0.1
  11. gatewayType: centralized
  12. gatewayNode: "node1,node2"
  13. natOutgoing: true