Istio 3-2편: Partially Enrolled Pod와 Untaint Controller
데브옵스
Istio 3-2편: Partially Enrolled Pod와 Untaint Controller
두줄요약
Ambient mode에서 Pod은 Ready인데 mesh 트래픽이 실패하는 partially enrolled 문제를 다뤘습니다. istio-cni 준비 전에는 일반 Pod이 스케줄되지 않도록 startup taint와 untaint-controller를 활용했습니다.
문제 상황
- Ambient mode 롤아웃 중 특정 노드의 신규 Pod이 Running 및 readiness 통과에도 mesh 트래픽을 받지 못하는 현상
- client 측 Envoy 에러로 보이는 upstream connect failure, connection termination 관찰
- Kubernetes 관점 정상과 mesh dataplane 관점 미준비가 어긋나는 partially enrolled 상태
원인 분석
- istio-cni와 ztunnel 같은 node-local 컴포넌트 준비가 Pod 스케줄보다 늦어지는 race condition
- redirection rule은 일부 적용됐지만 ztunnel registration이 완료되지 않은 pending 상태 발생
- startup taint가 없어 CNI 미준비 노드에 일반 workload Pod이 먼저 올라가는 구조
해결 방법
- cni.istio.io/not-ready startup taint를 노드에 걸고, istio-cni Ready 후 untaint-controller로 제거
- Karpenter NodePool 등의 인프라 레벨에서 startupTaints 설정
- pilot.taint.enabled와 PILOT_ENABLE_NODE_UNTAINT_CONTROLLERS 같은 Istio 설정 함께 점검
