ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Istio Egress Gateway에서 TLS 요청이 해석되는 방식
    Kubernetes 2025. 3. 13. 00:12
    728x90

     

    ❓ Istio Egress Gateway에서 TLS 요청이 해석되는 방식

    👉 예, SIMPLE 모드를 사용하면 Egress Gateway에서 TLS를 해석할 수 있음.
    👉 Egress Gateway에서 클라이언트(앱)와 외부 서버 간의 TLS 연결을 두 개의 개별 TLS 연결로 변환함.

    • 클라이언트(앱) → Egress Gateway에서 TLS 종료
    • Egress Gateway → 외부 서버로 새로운 TLS 연결 생성

     

    1️⃣ PASSTHROUGH 모드 vs SIMPLE 모드 비교

    1. PASSTHROUGH 모드 (TLS 직접 전달)

    • Egress Gateway에서 TLS를 해석하지 않고 그대로 외부 서버로 전달.
    • TLS 핸드셰이크 및 암호화는 앱과 외부 서버 간에 직접 수행됨.
    • Istio는 트래픽을 해석할 수 없으며, HTTP 응답 코드나 요청 데이터를 볼 수 없음.

    📌 트래픽 흐름

    [앱] --(TLS)--> [Egress Gateway] --(TLS)--> [외부 서버]

     

    ✔️ 장점:

    • 클라이언트와 외부 서버 간 엔드 투 엔드 TLS 유지.
    • 성능 최적화 (Egress Gateway에서 TLS를 해석하지 않으므로 CPU 부하 적음).

    단점:

    • HTTP 응답 코드, 요청 데이터 로깅 불가능.
    • 트래픽 분석 및 정책 적용이 어려움.

    2. SIMPLE 모드 (TLS 종료 후 재암호화)

    • Egress Gateway가 앱의 TLS 요청을 해석한 후, 외부 서버와 새로운 TLS 연결을 맺음.
    • 즉, 클라이언트와 외부 서버 간의 단일 TLS 세션이 아니라, Egress Gateway가 중간에서 TLS를 두 번 처리하는 방식.

    📌 트래픽 흐름

    [앱] --(TLS)--> [Egress Gateway (TLS 해석)] --(새로운 TLS)--> [외부 서버]

     

    ✔️ 장점:

    • Istio에서 HTTP 응답 코드 및 요청 데이터를 로깅 가능.
    • 외부 서버로 나가는 트래픽을 제어할 수 있음 (정책 적용 가능).

    단점:

    • TLS를 해석해야 하므로 성능 오버헤드 발생.
    • 클라이언트와 외부 서버 간의 엔드 투 엔드 TLS가 깨질 수 있음.

     

    2️⃣ SIMPLE 모드로 변경하여 TLS 해석하기

    📌 Gateway 설정 (SIMPLE 모드 적용)

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: egress-gateway
    spec:
      selector:
        istio: egressgateway
      servers:
      - port:
          number: 443
          name: https
          protocol: TLS
        hosts:
        - api.external-service.com
        tls:
          mode: SIMPLE  # PASSTHROUGH → SIMPLE (TLS 해석)

     

    📌 DestinationRule 설정 (Egress Gateway에서 TLS 종료 후 외부 서버와 새로운 TLS 연결)

    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: egress-tls
    spec:
      host: api.external-service.com
      trafficPolicy:
        tls:
          mode: SIMPLE  # Istio가 TLS 해석 후 외부로 다시 TLS 연결

     

    📌 ServiceEntry 설정 (외부 서비스에 대한 트래픽 허용)

    apiVersion: networking.istio.io/v1beta1
    kind: ServiceEntry
    metadata:
      name: external-api
    spec:
      hosts:
      - api.external-service.com
      location: MESH_EXTERNAL
      ports:
      - number: 443
        name: https
        protocol: TLS
      resolution: DNS

     

    결과

    • 앱에서 보낸 HTTPS 요청은 Egress Gateway에서 TLS 해석 후 새롭게 TLS 연결을 맺어 외부 서버로 전달됨.
    • Istio가 HTTP 응답 코드, 요청 데이터를 확인할 수 있음.

     

    🚀 결론

    모드TLS 해석 위치응답 코드 로깅 가능 여부정책 적용 가능 여부성능

    PASSTHROUGH Egress Gateway에서 해석하지 않음 (앱과 외부 서버 간 직접 TLS) ❌ 불가능 ❌ 불가능 ✅ 성능 최적
    SIMPLE Egress Gateway에서 TLS 종료 후 외부 서버와 새로운 TLS 연결 ✅ 가능 ✅ 가능 ❌ 성능 오버헤드 존재

    🚀 즉, 앱에서 HTTPS 요청을 보낼 때 PASSTHROUGH 모드를 사용하면 Istio에서 TLS를 해석하지 않고 그대로 전달하고, SIMPLE 모드를 사용하면 Egress Gateway에서 TLS를 해석하여 응답 코드 및 요청 데이터를 수집할 수 있음!

    728x90
Designed by Tistory.