[k8s] NodePort 접속 오류 해결 (진행중)

2022. 10. 17. 18:36[ 트러블슈팅-개선 ]

k8s 클러스터 상태

- worker 1, 2로 총 두 개 사용

- worker1 IP: 10.100.0.101 / worker2 IP: 10.100.0.102

- 각 워커에 nginx pod를 deployment controller로 띄운 상태 (label = app: webui)

- app: webui label에 대한 NodePort Service 구동 완료

- nginx Pod의 index.html의 컨텐츠를 해당 Pod가 띄워져 있는 노드 번호로 설정한 상태

- 포트 충돌 여지를 줄이기 위해 NodePort definition(yaml)에서 nodePort 키 값 주석처리 

- ClusterIP 10.100.100.200 / NodePort 32096 사용 (NodePort는 k8s에서 자동 생성 사용)

- 모든 worker, master 노드는 방화벽을 해제함

 

 

NodePort Service 결과

- NodePort 32096과 ClusterIP 10.100.100.200으로 정상적으로 Service가 구동 중

- app: webui label에 대한 Pod EndPoint 3개가 정상적으로 묶여있는 상태

 

 


문제 상황

 

1. station(VM을 실행한 호스트 PC, 윈도우)에서 호출한 결과 NodePort에 대해 TimeOut 발생

 

2. VM(worker node)에 대해 호스트 PC에서 NodePort를 포워딩한 후 실행한 결과 TimeOut 발생

- 포트포워딩: 호스트PC(192.168.154.72):32096 <-> node1(10.100.0.101):32096

- 호스트PC의 32096 포트는 사용하지 않는 상태임을 확인 후 포워딩 진행

 

호스트PC(윈도우)에서 포트포워딩한 상태
외부(MacOS)에서 호출한 결과

 

 

원인 파악

노드 1, 2에서 각각 실행한 결과

노드 1, 2에서 각 자신의 IP와 NodePort로 접속 시도한 결과 노드1에 있는 nginx Pod와 노드2에 있는 nginx Pod가 번갈아 가며 정상적으로 실행되었다.

 

즉, 노드 자체에서 자기 자신 IP와 NodePort를 통해 호출하는 것은 문제가 없지만 외부에서 노드의 IP로 호출하는 것은 통하지 않는 상태인 것임을 확인했다.

 

 

 

문제 상황 정리

 

위 NodePort 구성도에서 VM(worker) 자체에서 자기 자신을 NodePort로 호출한 것은 정상적으로 실행되지만 외부에서 VM을 실행했을 때에는 정상적으로 Pod와 연결되지 않은 것으로 보아, 호스트PC에서의 포트포워딩 문제이거나, 호스트PC가 방화벽 등으로 VM(worker)에 접속하는 것을 제한한 상태일 것으로 예상된다. 즉, 쿠버네티스 클러스터나 Service 자체에는 문제가 없지만, 해당 NodePort로 외부에서 접속하는 중에 문제가 발생한 것으로 추측된다.

 

따라서 아래와 같이 호스트PC에서 ping으로 VM(worker)에 테스트를 진행했다.

 

1) 호스트PC -> 게스트PC(VM, Worker1) ping test : 실패

 

2) 게스트PC -> 호스트PC(윈도우) ping test : 성공

 

VM에 모두 방화벽을 비활성화해두었지만 호스트에서 게스트로의 ping이 실패했다. 호스트(윈도우)에서도 방화벽을 모두 disable 하고 게스트로 ping을 다시 진행했지만 해결되지 않았다.

 

* 문제 해결 진행 중...