Infra Trouble Shooting - 1
Private Subnet에서의 네트워크 에러, DNS 해석 불가
by HOON
0
Last updated on Feb. 27, 2025, 7:45 p.m.
안녕하세요.
오늘은 팀프로젝트 진행 중 Infra 담당하면서 발생한 에러를 작성해보겠습니다.
문제 발생
k8s 주요 서브넷을 private으로 배치하고 , kafka(worker node)에서 master coredns로 통신이 안되는 상황이 생겼습니다.
따라서 running 상태가 된다 하더라도 아래와 같은 에러로그를 발생하고 있습니다.
Unable to resolve address: zookeeper</unresolved>:2181
zookeeper 서버는 올라와있지만, kafka 서버에서 zookeeker의 dns를 해석 할 수 없다는 에러가 보입니다.
따라서 같은 namespace에서 dns-test pod를 생성 후 pod 내부에서 zookeeper , coredns에 dns를 질의해봤지만 여전히 응답 없네요.
dnstools# nslookup zookeeper
;; connection timed out; no servers could be reached
dnstools# cat /etc/resolv.conf
search kafka-namespace.svc.cluster.local svc.cluster.local cluster.local ap-northeast-2.compute.internal
nameserver 10.96.0.10
options ndots:5
dnstools# nslookup kafka 10.96.0.10
;; connection timed out; no servers could be reached
하지만 /etc/resolv.conf 를 참고하면 dns가 제대로 적용된거같아요. (10.96.0.10)
그럼 dns 문제가 아니라 보다 먼저 네트워크 문제같아서 포커싱 해봤습니다.
dnstools# ping -c 4 10.96.0.10
PING 10.96.0.10 (10.96.0.10): 56 data bytes
--- 10.96.0.10 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss
ping 조차 안가는거보니 네트워크 문제가 맞았습니다.
문제 해결
네트워크 문제로 좁혀진다면, 의심해볼만한건 Private Subnet을 사용하게되면서 네트워크 ACL이 엄격해짐에 따라
필요한 포트를 하나하나 개방해야할것같다 판단했습니다.
그 대표적인 포트가 DNS에만 초점을 맞춰 TCP, UDP 53번 포트를 열었으나, DNS가 아닌 CNI 네트워크 플러그인(Flannel)이 사용하는 포트 8472를 오픈 해야한다는걸 깨달았어요.
저는 각각의 SG가 다르기때문에 사용하는 모든 노드의 Inbound 에서 UDP 8472 오픈하겠습니다.
결과적으로 아래와 같이 정상적으로 올라는걸 확인 할 수 있습니다.
Leave a Comment: