繁体   English   中英

在Kubernetes上使用服务类型clusterip时如何避免出现小巧?

[英]how to avoid snat when using service type clusterip on kubernetes?

对于k8s集群中的每项服务,kubernetes都会对请求数据包进行过滤。 iptables规则是:

-A KUBE-SERVICES ! -s 10.254.0.0/16 -d 10.254.186.26/32 -p tcp -m comment --comment "policy-demo/nginx: cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.254.186.26/32 -p tcp -m comment --comment "policy-demo/nginx: cluster IP" -m tcp --dport 80 -j KUBE-SVC-3VXIGVIYYFN7DHDA



-A KUBE-MARK-MASQ -j MARK --set-xmark 0x4000/0x4000


-A POSTROUTING -m comment --comment "kubernetes postrouting rules" -j KUBE-POSTROUTING
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -m mark --mark 0x4000/0x4000 -j MASQUERADE

它在大多数情况下都可以正常运行,但是在网络策略中却不能。 Caclico使用ipset实施网络策略,并且匹配的集合仅包含pod ip。

因此,当服务容器在节点1上运行,而访问容器在节点2上运行时。 由于请求的src ip是node2的ip或flannel.1 ip,因此networkpolicy将丢弃该请求。

我认为可能有一种关闭clusterat服务的小程序的方法,但是我在任何地方都找不到,有人可以帮我吗?

非常感谢你!

这个问题已经解决。

我将--cluster-cidr=10.254.0.0/16更改为--cluster-cidr=172.30.0.0/16 然后效果很好。

kube-proxy cluster-cidr需要与控制器管理器上使用的一台相匹配,也要与calico使用的一台相匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM