Iptables 添加 DNAT 规则以将 IP:port 上的请求转发到容器端口

Iptables Add DNAT rules to forward request on an IP:port to a container port

我有一个有 2 个接口的 kubernetes 集群: eth0:10.10.10.100(内部) eth1:20.20.20.100(外部)

集群中很少有pods 运行 flannel 联网。 POD1:172.16.54.4(nginx服务)

我想从连接到上述k8s集群的另一台主机访问20.20.20.100:80,这样我就可以到达nginx POD。

我启用了 ip 转发并添加了 DNAT 规则如下:

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.54.4:80

在此之后,当我尝试在 20.20.20.100 上进行卷曲时,我得到

Failed to connect to 10.10.65.161 port 80: Connection refused

我如何让它工作?

为什么不使用 nodeport 类型?我认为这是通过 hostIP 访问服务的更好方法。请尝试 iptables -nvL -t nat 并告诉我详细信息。

你可以试试

iptables -t nat -A PREROUTING -p tcp -d 20.20.20.100 --dport 80 -j DNAT --to-destination 172.16.54.4:80

但我不建议你自己管理iptables,维护规则很痛苦...

你可以在k8s中使用hostPort。您可以使用 kubenet 作为网络插件,因为 cni 插件不支持 hostPort.