Istio Ambient Mode의 HBONE, Envoy Config로 파헤치다
Istio Ambient Mode의 핵심 기술인 HBONE의 구현 방식을 Envoy config를 통해 분석
Gateway에서 Pod까지의 HTTP 요청 흐름을 Listener → Route → Cluster → Endpoint 순서로 추적
Destination Pod의 mesh 참여 여부에 따라 Endpoint 설정이 달라지며, Transport Socket Match가 핵심
ztunnel이 Pod 네트워크 네임스페이스 내에 소켓을 생성하여 트래픽을 가로채는 원리 설명
다음 글에서는 프로덕션 환경에서 발생한 503 에러 및 Half-Open Connection 문제 해결 과정 공개 예정
Envoy Proxy의 핵심 구조
본문은 Istio Ambient Mode에서 Envoy Proxy(Envoy Proxy)가 요청을 처리하는 기본 흐름을 설명한다.
Listener: 특정 포트에서 트래픽 수신 및 Filter Chain(Filter Chain) 결정
Filter Chain: HTTP 트래픽 처리 로직 정의, HttpConnectionManager(HttpConnectionManager) 활용
Route: Virtual Host 기반으로 Cluster(Cluster) 선택
Cluster: Endpoint들의 논리적 그룹, 로드밸런싱 정책(Load Balancing Policy) 적용
Endpoint: 실제 트래픽 전달 목적지, Pod IP:Port 조합
Istio는 istiod를 통해 xDS API로 각 Envoy에 설정을 전파하며, 쿠버네티스 클러스터 상태 변화에 따라 config를 업데이트한다.
Gateway에서 Pod까지의 트래픽 흐름
글에서는 Istio Gateway를 통과하여 Pod에 도달하는 HTTP 요청의 흐름을 상세히 분석한다. 특히, Destination Pod의 mesh 참여 여부에 따라 Endpoint 설정이 달라지는 점을 강조한다.
Out-of-mesh: Pod IP로 직접 연결하며, HBONE 터널링 없이 Plaintext 전송
In-mesh: Envoy 내부의 Internal Listener(Internal Listener)로 연결하여 HBONE 터널링
Waypoint 설정: Waypoint Proxy(Waypoint Proxy)를 경유하며, Waypoint 메타데이터 추가
결과적으로, Endpoint의 메타데이터와 Transport Socket 설정에 따라 트래픽 경로가 결정되며, Transport Socket Match(Transport Socket Match)가 핵심 역할을 수행한다.
HBONE 터널링의 내부 동작 원리
본문은 Istio Ambient Mode의 핵심 기술인 HBONE의 구현 방식을 심층적으로 분석한다. HBONE은 Envoy의 기존 기능들을 조합하여 구현된다.
InternalUpstreamTransport: 메타데이터 전달
TCP Proxy: HTTP/2 CONNECT 요청 생성
UpstreamTlsContext: mTLS(mTLS) 수립
connect_originate Internal Listener: Envoy 내부 user space에서 동작
이러한 메커니즘을 통해 Gateway에서 ztunnel까지의 트래픽을 안전하게 전송하며, ztunnel은 Pod의 트래픽을 intercept한다.
ztunnel의 트래픽 리다이렉션 메커니즘
글에서는 ztunnel이 Pod의 트래픽을 가로채는 과정을 상세히 설명한다. ztunnel은 Pod와 별개로 동작하는 DaemonSet이지만, Pod의 네트워크 네임스페이스 내에 소켓을 생성하여 트래픽을 intercept한다.
istio-cni: iptables 규칙 주입 및 ztunnel에 Pod 정보 전달
ztunnel: Linux 저수준 소켓 API로 Pod 네임스페이스 내에 Listening 소켓 생성
iptables 규칙: Ingress 및 Egress 트래픽을 ztunnel의 15001 포트로 리다이렉션
패킷 마킹: 0x539(Packet Mark) 및 0x111(Connection Mark)을 사용하여 무한 루프 방지 및 응답 패킷 처리
이러한 과정을 통해 ztunnel은 Pod의 트래픽을 투명하게 리다이렉션하고, HBONE 캡슐화를 적용한다.
Istio Ambient Mode의 전체 트래픽 흐름
본문은 Istio Ambient Mode에서 요청이 처리되는 전체 과정을 종합적으로 정리한다. Client 요청이 Gateway Listener에 도착하여 최종 Application Pod에 도달하는 과정을 단계별로 설명한다.
Gateway Listener: Virtual Host 매칭 및 Cluster 결정
Envoy Internal Listener: HBONE 터널 생성
ztunnel: HBONE 디캡슐레이션 및 Application Pod 전달
핵심: Envoy의 Internal Listener, Transport Socket Match, Tunneling Config, iptables REDIRECT
결론적으로, HBONE, ztunnel, 트래픽 리다이렉션은 Envoy의 기존 기능들을 조합하여 구현되며, Istio Ambient Mode의 핵심 기능을 제공한다.