12-13 01:56
반응형
250x250
Recent Posts
Recent Comments
Link
관리 메뉴

DevOps Tasks

[Kubernetes] EKS CoreDNS 및 Kubelet 통신 문제 본문

Kubernetes

[Kubernetes] EKS CoreDNS 및 Kubelet 통신 문제

데밥스 2024. 11. 30. 17:20
728x90
반응형

"이게 다 포트 때문이라고?"

Kubernetes 클러스터를 운영하다 보면 예상치 못한 문제를 자주 겪게 됩니다. 이번 사례도 그런 상황 중 하나였지만, 특히 인프라 설정의 중요성을 다시 한번 확인할 수 있었습니다.

 

Liveness와 Readiness Probe 실패의 원인이 특정 포트 차단으로 밝혀졌고, 이로 인해 클러스터 동작에 심각한 지장이 발생했습니다.

작은 설정 하나가 클러스터 전체에 영향을 미칠 수 있다는 사실을 다시 한번 실감한 경험이었습니다.

 

문제의 시작 : "왜 얘만 안 돼?"

Karpenter 컨트롤러 두 대가 배포되었는데, 이상하게도 한 대는 문제가 없었고, 특정 가용 영역(AZ)에서만 계속 재시작만 반복했습니다.

문제의 pod에서는 이런 로그들이 반복적으로 남았죠

  • Liveness Probe 실패
Liveness probe failed: Get "http://10.xx.xx.xx:8081/healthz": read tcp 169.254.175.250:57200->
10.xx.xx.xx:8081: read: connection reset by peer
  • Readiness Probe 실패
Readiness probe failed: Get "http://10.xx.xx.xx:8081/readyz":
dial tcp 10.xx.xx.xx:8081: connect: connection refused

 

처음에는 네트워크 문제인가 싶었지만, 다른 pod는 아무 문제없었습니다.


 

포트의 역할 : "이게 다 DNS랑 Kubelet 때문이었어!"

알고 보니, Kubernetes에서 CoreDNS와 Kubelet이 사용하는 포트들이 열려있지 않으면 통신 문제가 발생할 수 있다는 사실을 깨달았습니다.

CoreDNS는 53번 포트를 통해 DNS 요청을 처리하고, Kubelet은 10250번 포트로 API 서버와 통신하며 Liveness와 Readiness 상태를 보고합니다.

10250번 포트가 막혀 있으면 Kubelet이 API 서버와 소통할 수 없어 프로브 체크가 실패할 수밖에 없습니다.

이번 상황에서 한쪽 pod는 API 호출이 막혀 있었고, 다른 pod는 문제가 없었던 거죠.

 

문제 해결 : "포트 설정 다시 확인하기"

결국 해결책은 간단했습니다. NACL과 보안 그룹 설정에서 다음과 같이 포트를 개방했습니다:

  • 인바운드: TCP/UDP 53번, TCP 9153번
  • 아웃바운드: TCP/UDP 53번, TCP 10250번

이제야 Kubelet이 API 서버와 정상적으로 통신하고, CoreDNS가 DNS 요청을 처리할 수 있게 되었습니다.

 


 

"기본적으로 필요한 포트 목록"

Kubernetes 클러스터를 안정적으로 운영하기 위해 아래 포트들의 설정을 꼭 확인하세요.

보안 그룹(Security Group)과 네트워크 ACL(NACL)에서 허용되지 않은 포트가 있다면 클러스터 동작에 문제가 생길 수 있습니다.

구분 프로토콜 포트 설명
API Server TCP 443, 6443 클러스터와 노드 간 통신
Kubelet TCP 10250 Probe 상태 및 Pod 업데이트 통신
CoreDNS TCP/UDP 53 DNS 요청 처리
CoreDNS (메트릭) TCP 9153 Prometheus 메트릭 (옵션)
NodePort TCP/UDP 30000-32767 NodePort 서비스
etcd TCP 2379-2380 etcd 데이터 동기화
CNI UDP 67/68 IP 할당 처리
Ingress Controller TCP 80, 443 HTTP/HTTPS 요청

위 포트 설정을 사전에 점검하고 확인하면 Kubernetes 클러스터 운영 중 예상치 못한 문제를 예방할 수 있습니다.

 

결론: "포트 설정, 이제는 잊지 말자"

 

이번 경험을 통해 포트 설정의 중요성을 느꼈습니다.

Kubernetes 클러스터 운영 시, 특히 CoreDNS와 Kubelet이 사용하는 포트들이 열려 있지 않으면 심각한 문제가 발생할 수 있다는 사실을 잊지 마세요.

클러스터 내 통신 문제가 발생할 때는 포트 설정부터 다시 확인해 보는 것이 중요합니다.

작은 포트 설정 하나가 큰 차이를 만들 수 있다는 점, 잊지 말아야겠습니다.

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/sec-group-reqs.html

 

클러스터에 대한 Amazon EKS 보안 그룹 요구 사항 보기 - Amazon EKS

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

 

728x90
반응형