# 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)
