Istio/Gateway API를 사용한 Kubernetes에서 외부 도메인에 대한 경로 기반 라우팅 관련

Kubernetes 클러스터에 소유되지 않은 외부 도메인에 대해 경로 기반 라우팅을 구현하고자 합니다. 라우팅 구성에는 성공했지만, 부작용이 발생했습니다: 클러스터 내부의 워크로드들이 외부 도메인으로 443 포트를 통해 일반 HTTP로 통신하면서 SSL 오류가 발생합니다.

원하는 동작
클러스터 인그레스 게이트웨이에서 www.example.com/graphql로의 요청이 외부 도메인으로 라우팅됩니다.
서비스 메시 내의 워크로드들은 HTTPS를 사용하여 https://graphql-api.mesh-external.example.com 에 성공적으로 질의할 수 있어야 하며, SSL 문제가 없어야 합니다.

현재 접근 방식
우리의 구성은 Istio의 ServiceEntry, DestinationRule, 그리고 Gateway API의 HTTPRoute를 사용하고 있습니다.

apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: www-example-com
spec:
  hosts:
  - graphql-api.mesh-external.example.com
  location: MESH_EXTERNAL
  ports:
  - name: https
    number: 443
    protocol: HTTPS
  resolution: DNS
---
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: www-example-com
spec:
  host: graphql-api.mesh-external.example.com
  trafficPolicy:
    portLevelSettings:
    - port:
        number: 443
      tls:
        mode: SIMPLE
        sni: graphql-api.mesh-external.example.com
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: www-example-com
spec:
  hostnames:
  - www.example.com
  parentRefs:
  - group: gateway.networking.k8s.io
    kind: Gateway
    name: ingress
    namespace: gateway
  rules:
  - backendRefs:
    - group: networking.istio.io
      kind: Hostname
      name: graphql-api.mesh-external.example.com
      port: 443
      weight: 1
    matches:
    - path:
        type: PathPrefix
        value: /graphql

문제
인그레스를 통한 외부 요청은 정상적으로 작동하지만, 서비스 메시 내부의 통신은 기본적으로 443 포트에서 일반 HTTP로 시도되어 SSL/TLS 오류가 발생합니다.

질문
내부 메시 워크로드가 외부 도메인과의 통신 시 HTTPS를 올바르게 사용하도록 하면서도, 인그레스 트래픽에 대해 적절한 경로 기반 라우팅을 유지하려면 Istio와 Gateway API를 어떻게 구성해야 하나요?

내부 메시 워크로드가 외부 도메인과의 통신 시 HTTPS를 올바르게 수행하도록 하면서 인그레스 트래픽에 대한 경로 기반 라우팅을 유지하고 SSL/TLS 오류를 방지하려면 DestinationRule의 TLS 설정을 강제 적용해야 합니다.

따라서 아래와 같이 portLevelSettings를 제거하고 DestinationRule을 수정해야 할 수 있습니다:

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: www-example-com
spec:
  host: graphql-api.mesh-external.example.com
  trafficPolicy:
    tls:
      mode: SIMPLE
      sni: graphql-api.mesh-external.example.com