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
.
我有一个有 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
.