2017-01-05 12 views
1

3x 노드 kubernetes 클러스터 인 node1 (마스터), node2 및 node3이 있습니다. 현재 클러스터에 외부 적으로 노출되기를 원하는 노드 3에 예약 된 포드가 있습니다. 그래서 nodePort 유형이 30080 인 nodePort 서비스가 있습니다. 각 노드에서 node1, node2 및 node3을 로컬로 성공적으로 수행 할 수 있습니다 (curl localhost:30080). 그러나 외부 적으로 curl nodeX:30080은 node3에 대해서만 작동합니다. 다른 두 시간 초과. tcpdump는 node1과 node2가 요청을 받고 있지만 응답하지 않음을 확인합니다.Kubernetes 네트워킹 문제 - 서비스 nodePort에 외부로 연결할 수 없습니다.

세 노드 모두에서이 작업을 수행 할 수 있으므로 현재 포드가 어떤 노드를 예약했는지 추적 할 필요가 없습니다. 내 최고의 추측은 소스 IP가 localhost가 아니면 DNAT 트래픽에 대한 iptables 규칙이없는 iptables 문제입니다. 즉,이 문제를 확인하고 문제를 해결하는 방법을 해결하는 방법을 모릅니다. 그 규칙이 자동으로 거기에 있어야하는 것 같습니다.
KUBE-ravi196 : 10.163.148.196
KUBE-ravi197 : 10.163.148.197
KUBE-ravi198 : 10.163.148.198
CNI : 운하 (플란넬 + 패브릭)
호스트 여기

는 몇 가지 정보 내 설정이다 OS : 우분투 16.04
클러스터 kubeadm을 통해 노드 라비 - kube196에서 localhost를 곱슬 곱슬

$ kubectl get pods --namespace=kube-system -l "k8s-app=kube-registry" -o wide 
NAME      READY  STATUS RESTARTS AGE  IP    NODE 
kube-registry-v0-1mthd 1/1  Running 0   39m  192.168.75.13 ravi-kube198 

$ kubectl get service --namespace=kube-system -l "k8s-app=kube-registry" 
NAME   CLUSTER-IP  EXTERNAL-IP PORT(S)   AGE 
kube-registry 10.100.57.109 <nodes>  5000:30080/TCP 5h 

$ kubectl get pods --namespace=kube-system -l "k8s-app=kube-proxy" -o wide 
NAME    READY  STATUS RESTARTS AGE  IP    NODE 
kube-proxy-1rzz8 1/1  Running 0   40m  10.163.148.198 ravi-kube198 
kube-proxy-fz20x 1/1  Running 0   40m  10.163.148.197 ravi-kube197 
kube-proxy-lm7nm 1/1  Running 0   40m  10.163.148.196 ravi-kube196 

참고 성공을 (404 좋다) 설정합니다.

[email protected]:~$ curl localhost:30080/test 
404 page not found 

그러나 클러스터 외부의 시스템에서 IP 컬 시도는 실패
[email protected]:~$ curl 10.163.148.196:30080/test 
(hangs) 

그런 다음 포드는 작품 :

[email protected]:~$ curl 10.163.148.198:30080/test 
404 page not found 
에 예정되어 노드 IP를 곱슬 곱슬 시도

다음은 196 노드의 해당 서비스/포드에 대한 iptables 규칙입니다.

[email protected]:~$ sudo iptables-save | grep registry 
-A KUBE-NODEPORTS -p tcp -m comment --comment "kube-system/kube-registry:registry" -m tcp --dport 30080 -j KUBE-MARK-MASQ 
-A KUBE-NODEPORTS -p tcp -m comment --comment "kube-system/kube-registry:registry" -m tcp --dport 30080 -j KUBE-SVC-JV2WR75K33AEZUK7 
-A KUBE-SEP-7BIJVD3LRB57ZVM2 -s 192.168.75.13/32 -m comment --comment "kube-system/kube-registry:registry" -j KUBE-MARK-MASQ 
-A KUBE-SEP-7BIJVD3LRB57ZVM2 -p tcp -m comment --comment "kube-system/kube-registry:registry" -m tcp -j DNAT --to-destination 192.168.75.13:5000 
-A KUBE-SEP-7QBKTOBWZOW2ADYZ -s 10.163.148.196/32 -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc:" -j KUBE-MARK-MASQ 
-A KUBE-SEP-7QBKTOBWZOW2ADYZ -p tcp -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc:" -m tcp -j DNAT --to-destination 10.163.148.196:1 
-A KUBE-SEP-DARQFIU6CIZ6DHSZ -s 10.163.148.198/32 -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc:" -j KUBE-MARK-MASQ 
-A KUBE-SEP-DARQFIU6CIZ6DHSZ -p tcp -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc:" -m tcp -j DNAT --to-destination 10.163.148.198:1 
-A KUBE-SEP-KXX2UKHAML22525B -s 10.163.148.197/32 -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc:" -j KUBE-MARK-MASQ 
-A KUBE-SEP-KXX2UKHAML22525B -p tcp -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc:" -m tcp -j DNAT --to-destination 10.163.148.197:1 
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.106.192.243/32 -p tcp -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc: cluster IP" -m tcp --dport 1 -j KUBE-MARK-MASQ 
-A KUBE-SERVICES -d 10.106.192.243/32 -p tcp -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc: cluster IP" -m tcp --dport 1 -j KUBE-SVC-E66MHSUH4AYEXSQE 
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.100.57.109/32 -p tcp -m comment --comment "kube-system/kube-registry:registry cluster IP" -m tcp --dport 5000 -j KUBE-MARK-MASQ 
-A KUBE-SERVICES -d 10.100.57.109/32 -p tcp -m comment --comment "kube-system/kube-registry:registry cluster IP" -m tcp --dport 5000 -j KUBE-SVC-JV2WR75K33AEZUK7 
-A KUBE-SVC-E66MHSUH4AYEXSQE -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-7QBKTOBWZOW2ADYZ 
-A KUBE-SVC-E66MHSUH4AYEXSQE -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-KXX2UKHAML22525B 
-A KUBE-SVC-E66MHSUH4AYEXSQE -m comment --comment "kube-system/glusterfs-dynamic-kube-registry-pvc:" -j KUBE-SEP-DARQFIU6CIZ6DHSZ 
-A KUBE-SVC-JV2WR75K33AEZUK7 -m comment --comment "kube-system/kube-registry:registry" -j KUBE-SEP-7BIJVD3LRB57ZVM2 
노드에서210

KUBE-프록시 로그 :

[email protected]:~$ kubectl logs --namespace=kube-system kube-proxy-lm7nm 
I0105 06:47:09.813787  1 server.go:215] Using iptables Proxier. 
I0105 06:47:09.815584  1 server.go:227] Tearing down userspace rules. 
I0105 06:47:09.832436  1 conntrack.go:81] Set sysctl 'net/netfilter/nf_conntrack_max' to 131072 
I0105 06:47:09.836004  1 conntrack.go:66] Setting conntrack hashsize to 32768 
I0105 06:47:09.836232  1 conntrack.go:81] Set sysctl 'net/netfilter/nf_conntrack_tcp_timeout_established' to 86400 
I0105 06:47:09.836260  1 conntrack.go:81] Set sysctl 'net/netfilter/nf_conntrack_tcp_timeout_close_wait' to 3600 
+0

마스터에서 서비스에 액세스 할 수 없으므로 10.163.148.197부터 서비스를받을 수 없다는 것을 확인할 수 있습니까? – kellanburket

+0

아니, 그것은 196 (주인)뿐만 아니라 197 동안 타임 아웃한다. 왜 내가 마스터에게서 서비스에 액세스 할 수 없을 것이라고 말합니까? 내 이해에서 모든 노드는 포드를 예정된 노드에 서비스를 프록시해야합니다.마스터 나 임의의 미니언 노드에서'curl localhost : 30080'을 직접 실행하면 프록 싱이 실제로 작동합니다. 외부 적으로는 실패합니다. – ravishi

+0

죄송합니다 - 마스터 노드 문제에 대해 당신이 옳았습니다 - 저의 실수. – kellanburket

답변

1

나는 서비스가 외부에서 접근 할 수없는 이유의 원인을 발견했다. iptables FORWARD 체인이 패킷을 삭제했기 때문입니다. 나는 kubernetes에 관한 문제를 https://github.com/kubernetes/kubernetes/issues/39658에 제기했다. (좋지 않은) 일시적인 해결책은 기본 FORWARD 정책을 ACCEPT로 변경하는 것입니다. 운하 특정 문제로 나타나는

업데이트 1/10

나는, 운하, https://github.com/projectcalico/canal/issues/31에 문제를 제기했다. flannel.1 인터페이스로 전달되는 트래픽이 감소하고 있습니다. 기본 FORWARD 정책을 ACCEPT로 변경하는 것보다 더 나은 해결 방법은 flannel.1 인터페이스에 대한 규칙을 추가하는 것입니다. sudo iptables -A FORWARD -o flannel.1 -j ACCEPT.