在 Kube-OVN 中可以通过静态路由方式将 Pod IP 直接对外暴露。在这种情况下 Pod 所在的子网需要将 natOutgoing 设为 false,关闭出网的 nat 映射。
同时需要检查主机节点 iptable 的 Forward 链中是否有 drop 规则,ovn0 网卡以及默认出网网卡需要放开 forward。
物理环境
如果希望将 Pod IP 直接暴露给外部网络,以便外部可以直接通过 Pod IP 来访问容器,需要将对应子网的 natOutgoing 设置为 false。同时需要在外部的路由器上加一条静态路由,将目的地址为子网 cidr 的数据包下一跳设置为集群中的任意一台机器。
子网示例:
- apiVersion: kubeovn.io/v1
- kind: Subnet
- metadata:
- name: subnet-gateway
- spec:
- protocol: IPv4
- default: false
- namespaces:
- - ns1
- - ns2
- cidrBlock: 100.64.0.0/16
- gateway: 100.64.0.1
- excludeIps:
- - 100.64.0.1
- private: false
- gatewayType: distributed
- natOutgoing: false
虚拟网络环境
对于虚拟网络由于安全组或 conntrack 相关的限制,将容器网络的下一跳设置为集群内一台机器的做法,数据包可能会因为非对称路由的原因被 drop。
在这种情况下推荐将 gatewayType 设置为 centralized 并设置对应 gatewayNode。外部访问容器需要将容器 cidr 的路由下一跳设置为 gatewayNode 机器,来避免非对称路由的限制