# Egress Gateway — sidecar→egress 구간을 Istio mTLS(ISTIO_MUTUAL)로 보호하는 변형. # # PASSTHROUGH(기존 httpbin)와의 차이: # - PASSTHROUGH: 게이트웨이가 TLS를 종단하지 않고 단일 TLS 레이어의 SNI만 읽어 라우팅. # 메시 내부 leg가 평문 TCP(앱 TLS만 있음) — 게이트웨이가 호출 주체를 인증 못 함. # - ISTIO_MUTUAL: 게이트웨이 listener가 메시 mTLS(외부 레이어)를 종단하며 클라이언트 # sidecar의 SPIFFE 신원을 검증. 그 안의 앱 TLS(내부 레이어)는 건드리지 않고 # 해당 server 필터체인(SNI=edition.cnn.com)에 바인딩된 route로 그대로 프록시. # → 결과: in-mesh leg = mTLS 보호 + SPIFFE 식별 가능, 외부 leg = 앱 TLS end-to-end 유지(이중 레이어). # # 동작 조건: 이 server의 SNI 매칭은 DestinationRule이 sidecar에 지정하는 메시 mTLS SNI # (sni: edition.cnn.com)와 일치해야 함 → destinationrule-egress-cnn-mtls.yaml 참조. # # ⚠️ 포트 15443 사용 이유: 같은 egress gw에 이미 443(PASSTHROUGH, httpbin)이 점유 중. # 한 포트에 PASSTHROUGH와 TLS terminate(ISTIO_MUTUAL)는 공존 불가(머지 시 한쪽 드롭). # egress gw Service가 노출하는 별도 tls 포트 15443(→targetPort 15443)으로 분리해 공존. apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: egress-cnn namespace: mesh-test spec: selector: istio: egressgateway # istio-system의 egress gateway pod 라벨 servers: - port: number: 15443 # 443(passthrough)과 분리. egress gw svc tls 포트 name: tls-cnn protocol: TLS hosts: - edition.cnn.com tls: mode: ISTIO_MUTUAL # 메시 mTLS 종단 + 클라이언트 SPIFFE 검증 (vs PASSTHROUGH)