我知道链中的规则是一个标记规则:
iptables -t nat -nvL KUBE-MARK-MASQ
Chain KUBE-MARK-MASQ (123 references)
pkts bytes target prot opt in out source destination
16 960 MARK all -- * * 0.0.0.0/0 0.0.0.0/0 MARK or 0x4000它是为了标记一个包,然后数据包可以在KUBE-POSTROUTING链中执行SNAT,源IP可以更改为节点的ip.But,为什么k8s链中有这么多不同的KUBE- mark -MASQ规则呢?例如,在KUBE-服务链中,有很多KUBE-MARK rules.What标记吗? pod..Or?
让我们看看一个例子:
KUBE-MARK-MASQ tcp -- * * !10.244.0.0/16 10.96.0.10 /* kube-system/kube-dns:metrics cluster IP */ tcp dpt:9153它是一个KUBE的集群rule.My端口,其CIDR为10.244.0.0/16。为什么该规则的源ip有!?如果节点中的一个pod想要向外发送数据包,它不应该有!,那么它可以在KUBE中执行SNAT以更改节点的ip,我的理解是错误的吗?
在链中还有其他规则:
KUBE-MARK-MASQ all -- * * 10.244.2.162 0.0.0.0/0 /* default/echo-load-balance: */
DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* default/echo-load-balance: */ tcp to:10.244.2.162:8080pod的ip为10.244.2.162,规则源的ip与pod的ip.What相匹配,它是否用于?
在KUBE-FW-XXX链中:
KUBE-MARK-MASQ all -- * * 0.0.0.0/0 0.0.0.0/0 /* default/echo-load-balance: loadbalancer IP */
KUBE-SVC-P24HJGZOUZD6OJJ7 all -- * * 0.0.0.0/0 0.0.0.0/0 /* default/echo-load-balance: loadbalancer IP */
KUBE-MARK-DROP all -- * * 0.0.0.0/0 0.0.0.0/0 /* default/echo-load-balance: loadbalancer IP */为什么源的ip是0.0.0.0/0?它是用来做什么的?
发布于 2022-08-02 11:50:57
要查看所有规则,iptables-save输出是有用的。
iptables处理图表可能有助于理解这一点:

(维基百科图表)
当您为单个服务隔离规则时,nat规则如下所示:
*nat
-A KUBE-MARK-MASQ -j MARK --set-xmark 0x4000/0x4000
-A KUBE-SEP-232DQYSHL5HNRYWJ -s 10.244.0.7/32 -m comment --comment "kube-system/kube-dns:dns" -j KUBE-MARK-MASQ
-A KUBE-SEP-232DQYSHL5HNRYWJ -p udp -m comment --comment "kube-system/kube-dns:dns" -m udp -j DNAT --to-destination 10.244.0.7:53
-A KUBE-SEP-LPGSDLJ3FDW46N4W -s 10.244.0.5/32 -m comment --comment "kube-system/kube-dns:dns" -j KUBE-MARK-MASQ
-A KUBE-SEP-LPGSDLJ3FDW46N4W -p udp -m comment --comment "kube-system/kube-dns:dns" -m udp -j DNAT --to-destination 10.244.0.5:53
-A KUBE-SERVICES -d 10.96.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-SVC-TCOU7JCQXEZGVUNU
-A KUBE-SVC-TCOU7JCQXEZGVUNU ! -s 10.244.0.0/16 -d 10.96.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-MARK-MASQ
-A KUBE-SVC-TCOU7JCQXEZGVUNU -m comment --comment "kube-system/kube-dns:dns -> 10.244.0.5:53" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-LPGSDLJ3FDW46N4W
-A KUBE-SVC-TCOU7JCQXEZGVUNU -m comment --comment "kube-system/kube-dns:dns -> 10.244.0.7:53" -j KUBE-SEP-232DQYSHL5HNRYWJ
-A KUBE-POSTROUTING -m mark ! --mark 0x4000/0x4000 -j RETURN
-A KUBE-POSTROUTING -j MARK --set-xmark 0x4000/0x0
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -j MASQUERADE --random-fully在这种情况下,它将两个实例之间的DNS查询与50%访问一个DNS实例的机会进行平衡:
--mode random --probability 0.5是的,看起来确实有点复杂。但是当你为所有情况建立通用的解决方案时,你就会得到这样的结果。
发布于 2021-06-30 03:15:20
IP地址0.0.0.0/0意味着它匹配任何类型的IP,我唯一不确定的是下面的规则:
KUBE-MARK-MASQ all -- * * 10.244.2.162 0.0.0.0/0 /* default/echo-load-balance: */
DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* default/echo-load-balance: */ tcp to:10.244.2.162:8080当源IP地址本身存在时,为什么我们需要伪装数据包?
https://stackoverflow.com/questions/67915730
复制相似问题