트러블슈팅: localhost가 응답하지 않던 이유
증상
클러스터를 처음 올린 뒤 http://localhost/가 응답하지 않았습니다. 그런데 노드 컨테이너 안에서 curl 127.0.0.1:30080을 치면 200이 나왔습니다.
원인
- 호스트 :80은 kind의
extraPortMappings로 control-plane 노드의 30080에만 연결돼 있습니다. - 그런데 Envoy Pod는 worker 노드에 떠 있었습니다.
- Envoy Gateway가 만드는 Service의 기본값은
externalTrafficPolicy: Local입니다. "이 노드에 Pod가 있을 때만 받는다"는 뜻이라, control-plane으로 들어온 트래픽은 그냥 버려졌습니다.
해결
EnvoyProxy 설정에서 Service를 NodePort 30080 + externalTrafficPolicy: Cluster로 바꿨습니다. 이제 kube-proxy가 다른 노드의 Pod로 트래픽을 전달합니다.
대가: Cluster 정책에서는 SNAT 때문에 클라이언트 원본 IP가 가려집니다. 지금은 터널을 쓰기 때문에 영향이 적습니다.
배운 점
kind에는 LoadBalancer가 없어서 NodePort로 대신하게 됩니다. 이때 "포트가 연결된 노드"와 "Pod가 뜬 노드"가 같은지 꼭 확인해야 합니다.
← 기술블로그 목록