$ iptables -t nat -L -n
Chain KUBE-PORTALS-CONTAINER (1 references)
target prot opt source destination
…
REDIRECT tcp -- 0.0.0.0/0 11.1.1.88 /* service-nginx */ tcp dpt:8001 redir ports 43318
Chain KUBE-PORTALS-HOST (1 references)
target prot opt source destination
…
DNAT tcp -- 0.0.0.0/0 11.1.1.88 /* service-nginx */ tcp dpt:8001 to:10.10.103.58:43318
[更新] 顺便说一句,10.10.103.58 只是本地机器 eth0 的 IP。
我看到了答案IPTABLES 中的 DNAT 和 REDIRECT 之间的区别,所以我知道 REDIRECT 仅适用于本地重定向。
[更新] 但我的问题是,在这种情况下,Kubernetes 在同一台机器上同时设置了 DNAT 和 REDIRECT,为什么?
[更新] 从链的名称来看,我猜测DNAT
会将任何从主机发送到的请求转发到11.1.1.88
。10.10.103.58:43318
但是对于从在此主机上运行的容器发送的请求,该REDIRECT
链将起作用。
我对吗?
答案1
无需同时设置两个规则。对于相同类型的流量,其中一个规则就足够了。
- 如果您想要将流量重定向到本地计算机(防火墙),则可以使用其中任意一个。
DNAT
如果您的计算机有多个 IP 地址,并且想要在本地计算机上指定除由 拾取的 IP 地址之外的其他 IP 地址,则使用REDIRECT
可能会很有用。 - 如果您想将流量重定向到其他机器,则需要使用
DNAT
指定新的目的地。
总之DNAT
就是比较通用,可以在所有情况下使用。