首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库伯奈特链中不同的库伯-马克-马斯克规则有什么不同?

库伯奈特链中不同的库伯-马克-马斯克规则有什么不同?
EN

Stack Overflow用户
提问于 2021-06-10 06:17:43
回答 2查看 977关注 0票数 0

我知道链中的规则是一个标记规则:

代码语言:javascript
复制
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?

让我们看看一个例子:

代码语言:javascript
复制
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,我的理解是错误的吗?

在链中还有其他规则:

代码语言:javascript
复制
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

pod的ip为10.244.2.162,规则源的ip与pod的ip.What相匹配,它是否用于?

在KUBE-FW-XXX链中:

代码语言:javascript
复制
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?它是用来做什么的?

EN

回答 2

Stack Overflow用户

发布于 2022-08-02 11:50:57

要查看所有规则,iptables-save输出是有用的。

iptables处理图表可能有助于理解这一点:

(维基百科图表)

当您为单个服务隔离规则时,nat规则如下所示:

代码语言:javascript
复制
*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实例的机会进行平衡:

代码语言:javascript
复制
--mode random --probability 0.5

是的,看起来确实有点复杂。但是当你为所有情况建立通用的解决方案时,你就会得到这样的结果。

票数 1
EN

Stack Overflow用户

发布于 2021-06-30 03:15:20

IP地址0.0.0.0/0意味着它匹配任何类型的IP,我唯一不确定的是下面的规则:

代码语言:javascript
复制
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地址本身存在时,为什么我们需要伪装数据包?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67915730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档