DevOps Tasks
[Kubernetes] EKS CoreDNS 및 Kubelet 통신 문제 본문
"이게 다 포트 때문이라고?"
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
'Kubernetes' 카테고리의 다른 글
[Kubernetes] Karpenter Spot Node 모니터링을 위한 EventBridge 설정 (0) | 2024.12.03 |
---|---|
[Kubernetes] Karpenter 를 이용한 EKS 노드 그룹 관리 (0) | 2024.12.01 |
Kubernetes 에서 Finalizer로 인한 리소스 삭제 지연 처리 방법 (1) | 2024.09.28 |
[K8S] AWS Load Balancer Controller (0) | 2024.08.04 |
Kubernetes Service Type 과 Ingress Controllers (0) | 2024.08.04 |