Kubernetes node的防火牆問題導致pod ip無法訪問

hackeruncle發表於2017-07-06
環境:
1.在hadoop36機器,ping hadoop38機器的pod的ip,為172.30.1.4
2.該pod的service的external-ip的ip為hadoop36的ip
3.下面機器的ip,已經使用 xx.xx.xx.來替代和加圖層覆蓋掉

問題:
 無法透過服務EXTERNAL-IP+port,訪問對應的pod的服務,說白了,就是無法訪問pod ip+port,無法ping通172.30.1.4




步驟:
1.先把服務停掉
[root@hadoop38 ~]#  systemctl stop etcd flanneld docker kubelet kube-proxy

2.檢視當前規則,然後清空
[root@hadoop38 ~]#  iptables -L -n

[root@hadoop38 ~]#  iptables -F &&  iptables -X &&  iptables -F -t nat &&  iptables -X -t nat
[root@hadoop38 ~]#  iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@hadoop38 ~]# 


3.重啟iptables 和 開啟服務
[root@hadoop38 ~]#  systemctl restart iptables
[root@hadoop38 ~]#  systemctl start etcd flanneld docker kubelet kube-proxy

4.再次檢視防火牆策略 和清空掉
[root@hadoop38 ~]#  iptables -L -n
[root@hadoop38 ~]#  iptables -F &&  iptables -X &&  iptables -F -t nat &&  iptables -X -t nat

5.等待一會 最終檢視防火牆策略 
[root@hadoop38 ~]#  iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
KUBE-FIREWALL  all  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
KUBE-FIREWALL  all  --  0.0.0.0/0            0.0.0.0/0           
KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */


Chain KUBE-FIREWALL (2 references)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes firewall for dropping marked packets */ mark match 0x8000/0x8000


Chain KUBE-SERVICES (1 references)
target     prot opt source               destination         
[root@hadoop38 ~]#          destination   


6.在36機器驗證ping 和 telnet檢驗
[root@hadoop36 dns]#  kubectl get all -n cdh -o wide
NAME                    READY     STATUS    RESTARTS   AGE       IP           NODE
po/mysql-master-64k8r   1/1       Running   5          1h        172.30.1.4   xx.xx.xx.38

NAME              DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                                                SELECTOR
rc/mysql-master   1         1         1         1h        master         hadoop35.jiuye/k8sregister/jiuye/mysql5.6-master:v1.6   name=mysql-master

NAME               CLUSTER-IP      EXTERNAL-IP     PORT(S)     AGE       SELECTOR
svc/mysql-master   10.254.56.245    xx.xx.xx.36   13307/TCP   1h        name=mysql-master
[root@hadoop36 dns]# 

[root@hadoop36 dns]# ping 172.30.1.4
PING 172.30.1.4 (172.30.1.4) 56(84) bytes of data.
64 bytes from 172.30.1.4: icmp_seq=1 ttl=63 time=0.388 ms
^Z
[31]+  Stopped                 ping 172.30.1.4

[root@hadoop36 dns]# telnet   xx.xx.xx.36 13307
Trying  xx.xx.xx..36...
Connected to  xx.xx.xx..36.
Escape character is '^]'


備註:
1.這種情況發生過兩次(都是因為vm機器重啟),特此記錄一下步驟,備查。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30089851/viewspace-2141660/,如需轉載,請註明出處,否則將追究法律責任。

相關文章