homelab89 Docs Logs Legacy Files ☰ TOC 🌓
refistio 2026-07-05egressmtlspassthroughoriginationpattern-map

Egress HTTPS 패턴 지도 — 용어 정립과 4패턴 선택 가이드

ABSTRACT

egress gateway로 외부 HTTPS를 내보내는 방식은 이 아카이브에서 4개 패턴으로 수렴한다. 이 문서는 그 4패턴의 용어를 한 곳에서 정립하고(문서마다 별칭이 달랐다), 결정 트리·CRD 시그니처 비교표·패턴별 정본 문서 지도를 제공하는 허브다. 각 패턴의 해부·구성·실측은 전부 기존 검증 문서에 있으므로, 이 문서에서 새로 배우는 것은 “무엇을 어떤 이름으로 부르고, 어느 문서를 열 것인가"다.

대상 환경: Istio 1.30.0, sidecar mesh (모든 링크 문서 공통)


1. 용어 정립 — 이 아카이브의 정식 명칭 4개

같은 패턴이 문서·커뮤니티마다 다른 이름으로 불려 혼선이 있었다(예: “HTTPS over mTLS” vs “mTLS Passthrough”). 이 표가 정본이며, 이후 모든 문서는 정식 용어 열의 이름을 쓴다.

정식 용어 별칭 (같은 것) 홉 1 (sidecar→gw) 홉 2 (gw→외부) 한 줄 정의
TLS Passthrough HTTPS passthrough, SNI passthrough 앱 TLS 그대로 (추가 래핑 없음) 앱 TLS 그대로 gateway는 SNI만 보고 통과 — 가장 단순
mTLS Passthrough HTTPS over mTLS, ISTIO_MUTUAL passthrough 앱 TLS + outer ISTIO_MUTUAL 앱 TLS 그대로 (raw TCP relay) outer만 종단해 SPIFFE 신원 확인, inner는 통과
TLS Origination SIMPLE origination 평문 HTTP (+ISTIO_MUTUAL 권장) gateway가 SIMPLE TLS 시작 앱은 평문, 암호화는 gateway 몫
이중 mTLS mTLS origination, double mTLS 평문 HTTP + ISTIO_MUTUAL gateway가 MUTUAL(client cert) 시작 두 홉이 각각 독립 mTLS

용어 규칙 두 가지:

  • 계열(family)로 먼저 가른다: 홉 2에서 gateway가 TLS를 새로 만드는가? 안 만들면 passthrough 계열(①②), 만들면 origination 계열(③④). 계열이 같으면 CRD 골격이 같고, 다르면 VS 라우트 타입부터 다르다(§3).
  • “HTTPS over passthrough” 같은 조합 표현은 지양 — passthrough 자체가 “앱의 HTTPS를 그대로 통과"라는 뜻이라 동어반복이다. ①은 TLS Passthrough, ②는 mTLS Passthrough로 부른다.

2. 결정 트리 — 질문 세 개로 패턴이 정해진다

Q1. gateway가 앱 payload를 복호화해도 되는가?
 |
 +-- 안 됨 (end-to-end 암호화 유지) ---------> passthrough 계열
 |     |
 |     Q2. egress에서 호출 워크로드 신원(SPIFFE)이 필요한가?
 |     +-- 아니오 --> (1) TLS Passthrough
 |     +-- 예 ----> (2) mTLS Passthrough
 |
 +-- 됨 (gw가 L7 정책/감사, cert 중앙 관리) --> origination 계열
       |
       Q3. 외부 서버가 client cert를 요구하는가?
       +-- 아니오 --> (3) TLS Origination
       +-- 예 ----> (4) 이중 mTLS
  • Q1이 갈림길의 90%다. payload를 절대 못 보게 해야 하면(PCI/PII, cert-pinning) origination 계열은 탈락이고, per-URL egress 정책·L7 감사가 목표면 passthrough 계열은 그걸 줄 수 없다(mTLS Passthrough 해부 §1의 교집합 논리).
  • Q2의 “신원"은 IP/namespace가 아니라 mesh CA가 보증하는 SPIFFE다. 그 신원 위에 AuthorizationPolicy 인가까지 얹어야 비용이 정당화된다(신원 통제 가이드). NetworkPolicy 수준 근사로 충분하면 ①+Calico가 더 싸다(mTLS 없이 신원 통제).
  • Q3의 이중 mTLS는 “파트너 요구 client cert를 gateway 한 곳에서 중앙 관리“가 본질이다. 앱이 직접 client cert를 관리해도 된다면 ②로도 파트너 mTLS를 충족할 수 있다(inner TLS가 앱↔파트너 mTLS가 되는 것 — 단 cert가 앱마다 분산된다).

3. CRD 시그니처 비교표 — 패턴을 리소스에서 역추적하기

운영 중 클러스터에서 “이거 무슨 패턴이지"를 판별할 때, 그리고 구성 시 오배선을 피할 때 쓰는 표다. 한 칸이라도 다른 패턴 것을 섞으면 조용히 깨진다 — 특히 VS 라우트 타입과 Gateway protocol.

리소스 ① TLS Passthrough ② mTLS Passthrough ③ TLS Origination ④ 이중 mTLS
앱 호출 https:// https:// http:// http://
SE port protocol TLS TLS HTTP(앱측) + TLS(외부측) HTTP(앱측) + TLS(외부측)
Gateway server TLS / PASSTHROUGH TLS / ISTIO_MUTUAL HTTPS / ISTIO_MUTUAL HTTPS / ISTIO_MUTUAL
VS leg-1 / leg-2 tls / tls (SNI 생존) tls / tcp (SNI 소비) http / http http / http
DR-hop1 tls 없음 (subset만) ISTIO_MUTUAL + sni ISTIO_MUTUAL + sni ISTIO_MUTUAL + sni
DR-hop2 tls 없음 없음 (raw TCP) SIMPLE (+CA) MUTUAL + credentialName
gateway가 보는 것 L4 (SNI만) L4 + 호출자 SPIFFE L7 + SPIFFE L7 + SPIFFE
e2e 암호화 보존 보존 gateway에서 평문 gateway에서 평문
외부 서버 검증 주체 gateway (CA) gateway (ca.crt+SAN)
외부 client cert 앱이 관리 (필요 시) 앱이 관리 (필요 시) gateway 중앙 관리
L7 egress 정책/지표 불가 (istio_tcp_*) 불가 (istio_tcp_*) 가능 가능

표의 근거는 전부 실측이다: ②의 leg-2가 tcp여야 하는 이유(outer 종단 시 SNI 소비 → tls 라우트는 filter chain 0개로 listener 누락)는 T07, ②의 DR-hop2가 “tls 블록 부재"인 것과 connectionPool 발효 위치는 T91, ④의 배선·SDS 제약은 T90 (§검증 기록).

4. 문서 지도 — 패턴별로 어느 문서를 열 것인가

① TLS Passthrough

② mTLS Passthrough

③ TLS Origination

④ 이중 mTLS

계열 무관 공통

5. 계열 공통 원칙 — 어느 패턴이든 성립하는 것 4개

  1. 완료 = 200이 아니라 경유 증명. 홉 1 매칭이 깨지면 ALLOW_ANY에선 sidecar가 조용히 직접 나가고 호출은 200이다. gateway access log + REGISTRY_ONLY까지가 완료 조건 (T90 함정 3, TLS Passthrough 가이드 §7).
  2. DR은 홉마다 한 벌, host가 다르다. 홉 1 DR host = gateway Service의 레지스트리 FQDN, 홉 2 DR host = ServiceEntry 외부 host. 같은 host에 DR이 겹치면 조용한 병합(최고참 승)으로 한쪽이 무시된다 (T54).
  3. connectionPool은 “그 홉의 연결을 여는 프록시"에서 발효된다. 홉 1 값 = 호출자 sidecar의 cluster(pod당 상한), 홉 2 값 = gateway의 cluster(전사 합류 상한). origination 계열(T90)과 passthrough 계열(T91) 양쪽에서 교차 실측된 원칙이다.
  4. SNI 정렬 지도부터 만든다. DR sni == Gateway hosts[] == VS 매칭 호스트 — 같은 문자열이 3~6곳에 흩어지고, 한 글자 어긋나면 에러 없이 깨진다.

핵심 정리

  • 용어 4개로 통일: TLS Passthrough / mTLS Passthrough / TLS Origination / 이중 mTLS. 갈림길은 “gateway가 홉 2 TLS를 만드는가”(계열) → “신원 필요한가”(passthrough 내) / “client cert 요구인가”(origination 내).
  • CRD 시그니처로 패턴을 역추적할 수 있다 — Gateway protocol(TLS vs HTTPS)·VS 라우트 타입(tls/tcp vs http)·DR-hop2 tls(없음/SIMPLE/MUTUAL)가 지문이다.
  • passthrough 계열의 대가는 L7 사각, origination 계열의 대가는 e2e 암호화 포기 — 둘 다 가질 수는 없다.
  • 패턴 무관 공통 4원칙: 경유 증명 / host당 DR 1벌 / pool은 여는 프록시에서 발효 / SNI 정렬.

검증 기록

이 문서는 신규 실측 없이 기존 검증 문서를 종합한 허브다. 표·주장별 근거 T-run:

주장 근거
② leg-2는 tcp 필수 (tls면 listener 누락) T07 — HTTPS over mTLS 해부 §검증 기록
② DR-hop2는 tls 블록 부재 = raw TCP, pool 발효 위치 T91 — mTLS Passthrough DR·connectionPool §검증 기록
④ 배선·credentialName SDS 제약·pool 발효 위치 T90 — 이중 mTLS §검증 기록
함정: ALLOW_ANY 조용한 우회, DR 병합 최고참 승 T90 G4 · T54 — DR 정본 §06

참조

Files