现象:
从内部某个pod的容器里直接访问service的cluster地址,请求可以被正常转发到各个node上的pod里
但是从外部网络,访问nodeport发布的服务,则发现请求不能被转发到其他node上
排错发现,请求没有被转发到其他node的物理接口,说明问题出在接受请求的那台node本身上
查看iptables filter表发现,转发数据包匹配一条docker创建的规则导致丢弃
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@docker3 ~]# iptables -nL -v --line-number Chain INPUT (policy ACCEPT 525 packets, 70924 bytes) num pkts bytes target prot opt in out source destination 1 258K 33M KUBE-FIREWALL all -- * * 0.0.0.0/0 0.0.0.0/0 2 259K 33M KUBE-SERVICES all -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes service portals */ Chain FORWARD (policy DROP 1 packets, 64 bytes) num pkts bytes target prot opt in out source destination 1 1657 205K DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0 2 1657 205K DOCKER-ISOLATION all -- * * 0.0.0.0/0 0.0.0.0/0 3 790 132K ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 4 35 2224 DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0 5 818 70064 ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0 6 0 0 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0 7 35 2224 ACCEPT all -- !docker0 docker0 0.0.0.0/0 0.0.0.0/0 |
forward链中的 第1,2规则都导致丢弃
强制增加iptables -I FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT 规则后,问题解决
但重启会失效,持久化的一个方法见此文最后 http://www.cnadn.net/post/2304.htm
文章评论
有意义!