https://100.116.194.42:8080(server1의 target-tracking-service)가 "예전엔 됐었는데 겑자기 안 된다"는 증상으로 시작해서, 실제로는 server1(Control Plane) 노드의 flannel VXLAN 인터페이스 자체가 사라진 클러스터 전역 장애였던 걸 밝혀낸 과정.
https://100.116.194.42:8080/ 접속 시 ERR_CONNECTION_REFUSEDtailscale status
ping -c 3 100.116.194.42
→ tailscale status에 server1이 active로 표시되고, ping도 정상 응답. VPN/언더레이 네트워크 자체는 문제가 없다는 걸 가장 먼저 제거.
curl -vk https://100.116.194.42:8080/
nc -zv 100.116.194.42 8080
→ Connection refused. 방화벽에 막혀 패킷이 드롭되는 것(타임아웃)이 아니라, 그 포트에 리스닝하는 프로세스가 아예 없다는 신호.
kubectl get pods -A로 c4i 네임스페이스에서 예상 밖 상태 발견: kafka와 target-tracking-service(server1) 파드가 CrashLoopBackOff, target-tracking-service(server2) 파드만 Running. 같은 앱인데 노드에 따라 결과가 다르다는 게 첫 결정적 단서 — 코드/이미지 문제였다면 모든 replica가 동일하게 실패해야 한다.
ERROR Timed out waiting for connection to Zookeeper serverjava.net.UnknownHostException: postgres-service.c4i.svc.cluster.local두 실패의 공통점: 실패하는 두 서비스 쌍이 전부 서로 다른 노드에 떠 있다. 정상 동작하던 target-tracking-service replica는 postgres와 같은 노드(server2)에 있었다. → "노드 내부 통신은 되는데 노드 간 통신이 안 된다" 가설 수립.
같은 네임스페이스에 임시 디버그 파드(nicolaka/netshoot)를 특정 노드에 강제 스케줄링해서 파드 간 통신을 직접 찌러봤다.
# server3 파드 → server1 파드 IP로 기본 ping
kubectl exec netdebug-server3 -- ping -c 5 10.42.0.18
# → 5 packets transmitted, 0 received, 100% packet loss