서두
Kubernetes 클러스터 운영중 Calico CNI를 사용하는 경우, 노드에 여러 NIC가 존재할 때 특정 (대규모 재앙급 장애) 상황에서 라우팅 인터페이스가 예상과 다르게 설정되어 pod to pod 통신 불가로 인한 Service Discovery, DNS, API 서버와의 통신까지 실패하는 상황이 발생했다.
이번 글에서는 실제 운영 환경에서 발생한 라우팅 경로 인터페이스 불일치로 인한 복합 장애 사례와 그 해결 방법을 정리한다.
( 공식 사이트에서 발췌한 내용을 기반으로 작성하였으나, 명확하지 않은 부분은 경험을 토대로 작성하였습니다. 이는 정확한 정보가 아닐 수 있음을 알려드립니다.)
공식 사이트
광고 클릭은 큰 힘이 됩니다!
Configure IP autodetection | Calico Documentation
Calico IP autodetection ensures the correct IP address is used for routing. Learn how to customize it.
docs.tigera.io
Felix configuration | Calico Documentation
API for this Calico resource.
docs.tigera.io
서론
사전 내용
Calico CNI 사용 중이며 BGP 기반 네트워크 구성
노드마다 2개 이상의 NIC 존재 (예: eth0, eth1)
라우팅 불일치 상태
이번 글은 재현이 어렵습니다.
재현이 어렵기에 이게 최선의 방법인지도 헷갈리지만 참고용으로 봐주시면 감사하겠습니다.
중론
Kubernetes의 Overlay 터널 통신에 사용되는 메인 인터페이스는 eth0192.0.2.0/26과 같은 특정 Pod 대역이 eth1 인터페이스 경유로 설정되어 경로 자체는 존재하나 통신이 실패하는 구조
라우팅 경로 상태 비교
pod cidr을 잘못된 노드 경유지로 보내고 있음
10.0.0.1/26 via 172.0.0.10 dev tunl0 proto bird onlink
정상적인 경유 routing
10.0.0.64/26 via 192.168.0.10 dev tunl0 proto bird onlink
10.0.0.129/26 via 192.168.60.11 dev tunl0 proto bird onlink
10.0.0.123/26 via 192.168.60.12 dev tunl0 proto bird onlink
통신 실패 구조
+--------------------+ +---------------------------+
| Pod (Node A) | --→--tunl0--→--| Pod (Node B) |
| | | 10.0.0.1/26 |
+--------------------+ +---------------------------+
▲ ▲
│ │
│ 잘못된 인터페이스 라우팅 │
└──── dev tunl0 via eth1 ──────────────┘
Pod-to-Pod 연결 시도는 터널을 통해 전달되나, 대상 노드의 eth1 인터페이스는 eth0 대역을 모름 → 통신 실패
해결 방법
Calico가 노드 IP를 자동 탐지할 때 eth1를 우선 선택하면서bird가 설정한 경로와 Route 인터페이스가 불일치하게 된 것이다.
calico-node DaemonSet에 다음 환경 변수를 추가해 정확한 노드 내부 IP 탐지 기준을 지정한다.
- name: IP_AUTODETECTION_METHOD
value: kubernetes-internal-ip
절차
편집
kubectl edit ds calico-node -n kube-system
env: 항목에 설정 추가 저장 후 자동 롤링 → Calico 노드 재시작 -> 상태 확인
ip route | grep 172
정리
여러 NIC가 존재할 경우 Calico의 자동 IP 탐지로 인해 BGP 경로는 eth0인데 실제 라우팅은 eth1로 설정되는 경우
Overlay 터널이 잘못된 경로로 전송되어 Pod 간 통신, DNS, API 서버 연결까지 실패할 수 있으며 명시적 설정을 통해 현상 해결 가능
중요
잘못된 정보나, 문의등은 댓글로 메일과 함께 적어주시면 감사하겠습니다.
'Kubernetes' 카테고리의 다른 글
| MinIO 공식 Docker 이미지 배포 중단 사태 (0) | 2025.10.29 |
|---|---|
| Kubernetes Internal Network 변경 절차 (0) | 2025.09.24 |
| Istio Mesh Network 그리고 Timeout (0) | 2025.09.02 |
| Kubernetes Node Name - 불변(Immutable) (2) | 2025.08.04 |
| Kubernetes-AI Karpor (with Ollama) (3) | 2025.03.13 |