在 Kube-OVN 中可以通过静态路由方式将 Pod IP 直接对外暴露。在这种情况下 Pod 所在的子网需要将 natOutgoing 设为 false,关闭出网的 nat 映射。

同时需要检查主机节点 iptable 的 Forward 链中是否有 drop 规则,ovn0 网卡以及默认出网网卡需要放开 forward。

物理环境

如果希望将 Pod IP 直接暴露给外部网络,以便外部可以直接通过 Pod IP 来访问容器,需要将对应子网的 natOutgoing 设置为 false。同时需要在外部的路由器上加一条静态路由,将目的地址为子网 cidr 的数据包下一跳设置为集群中的任意一台机器。

子网示例:

  1. apiVersion: kubeovn.io/v1
  2. kind: Subnet
  3. metadata:
  4. name: subnet-gateway
  5. spec:
  6. protocol: IPv4
  7. default: false
  8. namespaces:
  9. - ns1
  10. - ns2
  11. cidrBlock: 100.64.0.0/16
  12. gateway: 100.64.0.1
  13. excludeIps:
  14. - 100.64.0.1
  15. private: false
  16. gatewayType: distributed
  17. natOutgoing: false

虚拟网络环境

对于虚拟网络由于安全组或 conntrack 相关的限制,将容器网络的下一跳设置为集群内一台机器的做法,数据包可能会因为非对称路由的原因被 drop。

在这种情况下推荐将 gatewayType 设置为 centralized 并设置对应 gatewayNode。外部访问容器需要将容器 cidr 的路由下一跳设置为 gatewayNode 机器,来避免非对称路由的限制