Istio Mesh Network 그리고 Timeout

2025. 9. 2. 16:58·Kubernetes
728x90

현상

Istio Mesh Network를 통해 멀티 클러스터 환경에서 노드 재기동 절차중 발생한 어플리케이션 호출 응답 에러 발생

분명 Pod는 정상적으로 살아 있고 클러스터 내부 네트워킹에는 전혀 문제가 없어보였다.

 

윗 단 네트워크부터 몇달간 보이지 않는 로그를 긁어가며 드디어 원인을 밝히게 되었다.

 

( 공식 사이트에서 발췌한 내용을 기반으로 작성하였으나, 명확하지 않은 부분은 경험을 토대로 작성하였습니다.

이는 정확한 정보가 아닐 수 있음을 알려드립니다. )

공식 사이트

https://istio.io/latest/docs/reference/config/istio.mesh.v1alpha1/#MeshNetworks

 

Global Mesh Options

Configuration affecting the service mesh as a whole.

istio.io


사전 환경 설명

클러스터가 두 개 이상 존재하며, Istio가 meshNetwork를 통해 어플리케이션이 반대 편 엔드포인트를 바라봐야한다.
각 클러스터의 east-west 게이트웨이는 NodePort 형태로 노출되어 있고, meshNetworks endpoint는 NodeIP:NodePort가 직접 나열되어 있는 상태이다.

 


 

원인

[Client]
   │ 
   │ 어플리케이션 호출
   ▼
[IngressGateway Envoy]
   │  (1) Gateway가 호스트 수신, VirtualService 매칭 → route.destination = POD.SVC
   │  (2) DestinationRule(POD.SVC)로드 - 연결 정책 확인(라운드 로빈 방식, least 연결 방식 등)  
   │  (3) EDS 조회: 엔드포인트 조회
   │      - 로컬에 POD.SVC 없음
   │      - 원격 네트워크 meshNetworks endpoint 사용
   ▼
[업스트림 선택]
   └─ (정적 게이트웨이 사용) meshNetworks endpoint address: 192.168.x.x:15xxx(실제노드)
          │  Real Node IP이기에 K8s/EDS의 노드 상태 반영 없음
          │
          ├─ (1) Envoy가 선택된 주소(192.168.x.x:15xxx)로 TCP Connect 시도
          │      - 대상 노드 Down → SYN/Connect 실패 (connectTimeout 경과)
          │
          ├─ (2) (VirtualService에 retry가 있으면) 다음 정적 주소로 재시도
          │      - 다음 주소 Alive ⇒ 성공
          │      - 다음 주소도 Down/불통 ⇒ 반복 실패
          │
          └─ (3) (재시도 없거나 모두 실패한 경우)
                 - 클라이언트: 타임아웃 / 504 Gateway Timeout
                 - (추가) DR의 OutlierDetection이 있어도 “최초 연결 시도” 자체는 막지 못함

 

 

멀티클러스터에서 meshNetworks(istio-system/ConfigMap istio)에 게이트웨이 엔드포인트를

정적 IP(예: address: 192.168.x.x, port: 15xxx) 로 등록해두면, Istiod/Envoy는 이를 정적 업스트림 노드 목록으로만 취급한다.

→ 노드 상태/헬스는 감시하지 않는다.

 

따라서 Envoy가 게이트웨이로 연결 시 라운드로빈(또는 내부 기본 정책) 으로 해당 IP에 바로 TCP 연결을 시도하게된다.

→ 대상 노드 Down(혹은 Network가 도달할 수 없는)상태이면 SYN 타임아웃(혹은 connectTimeout 초과)까지 대기하게 되고,

그동안 요청이 지연/실패한다.

 

(추가)이 현상은 서비스에 설정한 DestinationRule의 OutlierDetection/로드밸런싱과 별개이다.
결과적으로 게이트웨이 IP가 죽어 있어도 첫 연결 시도는 타임아웃으로 끝나며, 재시도 정책이 없다면 연쇄적인 지연이 발생한다.
DR은 서비스 파드 엔드포인트 선택/퇴출 단계에서 동작하고, meshNetworks 게이트웨이 IP 선택에는 적용되지 않는다.

 

임시방편

더보기

정말 급하다면 Endpoint 자체를 configmap에서 임시로 제거한 뒤 노드 정상화 이후 복구하는걸 추천, 혹은 EnvoyFilter를 사용할것 


한줄 정리

이슈의 핵심은 meshNetworks는 Endpoint의 상태를 감지하지 않으며,

DR의 outlierDetection은 게이트웨이에는 적용되지 않는다.

따라서, 게이트웨이 계층에도 헬스 기반 퇴출 로직을 적용하거나,

VIP 단일화로 구조를 개선해야 connect timeout 반복을 방지할 수 있다.

 

중요

잘못된 정보나, 문의등은 댓글로 메일과 함께 적어주시면 감사하겠습니다.

728x90
저작자표시 비영리 (새창열림)

'Kubernetes' 카테고리의 다른 글

Kubernetes Internal Network 변경 절차  (0) 2025.09.24
[Calico] calico-node Routing 경로 불일치로 인한 pod to pod 통신 실패  (0) 2025.09.19
Kubernetes Node Name - 불변(Immutable)  (2) 2025.08.04
Kubernetes-AI Karpor (with Ollama)  (3) 2025.03.13
Kubernetes에서 변경 불가능한(Immutable) Pod란  (0) 2025.03.10
'Kubernetes' 카테고리의 다른 글
  • Kubernetes Internal Network 변경 절차
  • [Calico] calico-node Routing 경로 불일치로 인한 pod to pod 통신 실패
  • Kubernetes Node Name - 불변(Immutable)
  • Kubernetes-AI Karpor (with Ollama)
MAGUJOB
MAGUJOB
Officially Kubestronaut 사파스러운 블로그 느립니다.
  • MAGUJOB
    마구잡
    MAGUJOB
  • 전체
    오늘
    어제
    • 분류 전체보기 (65) N
      • Kubernetes (54) N
        • Kubernetes 버전별 변경 이력 (8)
        • 작은팁-짧은글 (11) N
      • 운영체제 (1)
      • 오픈스택 (1)
      • 책 후기 (2)
      • 운동 (1)
        • 헬스 (0)
        • 클라이밍 (1)
      • 기타팁 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 링크드인
  • 공지사항

  • 인기 글

  • 태그

    캠핑
    KVM
    티스토리챌린지
    v1.35
    피카푸글램핑
    Calico
    gatewayAPI
    파드
    AI
    ingressnginx
    GPU
    클라우드
    kube-ai
    업데이트
    글램핑
    오블완
    CKA
    virt-manager
    POD
    쿠버네티스
    kubernetes
    쿠버네티스기초
    버전
    CKS
    쿠버네티스 생명주기
    IT
    k8s
    1.35
    피카푸클램핑도봉산
    피카푸캠핑도봉산
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
MAGUJOB
Istio Mesh Network 그리고 Timeout
상단으로

티스토리툴바