すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:Enable TLS passthrough on an ingress gateway

最終更新日:Mar 12, 2026

TLS パススルーを使用すると、イングレスゲートウェイは暗号化された TLS トラフィックを復号せずにバックエンドサービスに直接転送します。ゲートウェイではなくバックエンドサービスが TLS 終端を処理するため、クライアントからサーバーへの TLS セッションは中断されません。

これは、ゲートウェイがトラフィックを転送する前に復号する TLS 終端とは異なります。

モードTLS 終端場所ユースケース
TLS 終端イングレスゲートウェイサイドカープロキシが注入され、ゲートウェイとサイドカー間のトラフィックは mTLS トンネルを介して転送されます。
TLS パススルーバックエンドサービスサイドカープロキシが注入されない場合、または中間復号なしでエンドツーエンド暗号化が必要なその他の特殊な状況。
注: サイドカープロキシが注入されている場合、イングレスゲートウェイとサイドカープロキシ間のすべてのトラフィックは相互 TLS (mTLS) トンネルを介して転送されます。その場合は、代わりにイングレスゲートウェイで TLS 終端を構成してください。

TLS パススルーは、トラフィックをルーティングするためにサーバ名表示 (SNI) に依存します。ご利用のクライアントは SNI TLS 拡張機能をサポートしている必要があります。

前提条件

開始する前に、以下を確認してください。

ステップ 1: サーバー証明書と秘密鍵の準備

sample.aliyun.com のサーバー証明書と秘密鍵をすでに持っている場合は、それらを sample.aliyun.com.crtsample.aliyun.com.key に名前変更し、ステップ 2 にスキップしてください。

それ以外の場合は、テスト用に自己署名証明書を生成するために、次の openssl コマンドを実行します。

  1. ルート認証局 (CA) の作成:

       openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \
         -subj '/O=mynginx Inc./CN=aliyun.com' \
         -keyout aliyun.root.key -out aliyun.root.crt
  2. ルート CA によって署名されたサーバー証明書の生成:

       openssl req -out sample.aliyun.com.csr -newkey rsa:2048 -nodes \
         -keyout sample.aliyun.com.key \
         -subj "/CN=sample.aliyun.com/O=mynginx sample organization"
    
       openssl x509 -req -days 365 \
         -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 \
         -in sample.aliyun.com.csr -out sample.aliyun.com.crt

これらのコマンドは次のファイルを生成します。

ファイル目的
aliyun.root.crt / aliyun.root.keyルート CA 証明書と秘密鍵
sample.aliyun.com.crt / sample.aliyun.com.keysample.aliyun.com
sample.aliyun.com.csr証明書署名要求 (中間ファイル)

ステップ 2: HTTPS バックエンドサービスのデプロイ

このステップでは、ポート 443 で TLS を終端する NGINX ベースのバックエンドサービスをデプロイします。イングレスゲートウェイは、復号せずにこのサービスに TLS トラフィックをパススルーします。

NGINX 構成の作成

次のコンテンツで mynginx.conf という名前のファイルを作成します。

events {
}
http {
  log_format main '$remote_addr - $remote_user [$time_local]  $status '
  '"$request" $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  access_log /var/log/nginx/access.log main;
  error_log  /var/log/nginx/error.log;
  server {
    listen 443 ssl;
    server_name www.aliyun.com;

    ssl_certificate /etc/nginx-server-certs/tls.crt;
    ssl_certificate_key /etc/nginx-server-certs/tls.key;

    location / {
        return 200 'Welcome to aliyun.com without TLS Termination!';
        add_header Content-Type text/plain;
    }
  }
}

サポートする Kubernetes リソースの作成

  1. NGINX 構成を保存するための ConfigMap を作成します。

       kubectl create configmap mynginx-configmap --from-file=nginx.conf=./mynginx.conf
  2. サーバー証明書と秘密鍵を保存するための Secret を作成します。

       kubectl create secret tls nginx-server-certs \
         --key sample.aliyun.com.key --cert sample.aliyun.com.crt
  3. default 名前空間の自動サイドカープロキシ注入を有効にします。詳細については、「自動サイドカープロキシ注入の有効化」をご参照ください。

NGINX サービスのデプロイ

次のコンテンツで mynginxapp.yaml という名前のファイルを作成し、kubectl apply -f mynginxapp.yaml を実行します。

mynginxapp.yaml

apiVersion: v1
kind: Service
metadata:
  name: mynginxapp
  labels:
    app: mynginxapp
spec:
  ports:
  - port: 443
    protocol: TCP
  selector:
    app: mynginxapp
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mynginxapp
spec:
  selector:
    matchLabels:
      app: mynginxapp
  replicas: 1
  template:
    metadata:
      labels:
        app: mynginxapp
    spec:
      containers:
      - name: nginx
        image: nginx:1.15
        ports:
        - containerPort: 443
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx
          readOnly: true
        - name: nginx-server-certs
          mountPath: /etc/nginx-server-certs
          readOnly: true
      volumes:
      - name: nginx-config
        configMap:
          name: mynginx-configmap
      - name: nginx-server-certs
        secret:
          secretName: nginx-server-certs

バックエンドサービスの検証

サイドカープロキシから NGINX サーバーにテストリクエストを送信するには、次のコマンドを実行します。

kubectl exec -it $(kubectl get pod -l app=mynginxapp -o jsonpath={.items..metadata.name}) \
  -c istio-proxy -- curl -v -k --resolve sample.aliyun.com:443:127.0.0.1 https://sample.aliyun.com

NGINX サーバーが正しく実行されている場合、レスポンスボディには以下が含まれます。

Welcome to aliyun.com without TLS Termination!

ステップ 3: TLS パススルーを持つ Istio ゲートウェイの作成

ポート 443 でリッスンし、終端せずに TLS トラフィックをバックエンドに転送する Gateway リソースを定義します。

  1. ASM コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[Service Mesh] > [メッシュ管理] を選択します。

  3. [メッシュ管理] ページで、設定する ASM インスタンスを見つけます。ASM インスタンスの名前をクリックするか、[操作] 列の [管理] をクリックします。

  4. 左側のナビゲーションウィンドウで、[ASM ゲートウェイ] > [ゲートウェイ] を選択します。表示されるページで、[YAML からの作成] をクリックします。

  5. [デフォルト] 名前空間を選択し、以下の YAML を貼り付けます。

       apiVersion: networking.istio.io/v1alpha3
       kind: Gateway
       metadata:
         name: istio-mynginx-customingressgateway
       spec:
         selector:
           istio: ingressgateway  # binds to the default ingress gateway
         servers:
         - hosts:
           - 'sample.aliyun.com'
           port:
             name: https
             number: 443
             protocol: HTTPS
           tls:
             mode: PASSTHROUGH  # forward encrypted traffic without termination
  6. [作成] をクリックします。

新しいゲートウェイは [ゲートウェイ] ページに表示されます。

ステップ 4: TLS ルーティング用の仮想サービスの作成

SNI ホスト sample.aliyun.com に一致する TLS トラフィックをバックエンドサービスにルーティングする VirtualService を定義します。

  1. ASM コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[Service Mesh] > [メッシュ管理] を選択します。

  3. [メッシュ管理] ページで、設定する ASM インスタンスを見つけます。ASM インスタンスの名前をクリックするか、[操作] 列の [管理] をクリックします。

  4. 左側のナビゲーションウィンドウで、[トラフィック管理センター] > [VirtualService] を選択します。表示されたページで、[YAML から作成] をクリックします。

  5. [デフォルト] 名前空間を選択し、次の YAML を貼り付けます。

       apiVersion: networking.istio.io/v1alpha3
       kind: VirtualService
       metadata:
         name: istio-mynginx-customvirtualservice
       spec:
         hosts:
         - "sample.aliyun.com"
         gateways:
         - istio-mynginx-customingressgateway  # reference the Gateway from Step 3
         tls:
         - match:
           - port: 443
             sniHosts:
             - sample.aliyun.com  # route traffic by SNI hostname
           route:
           - destination:
               host: mynginxapp.default.svc.cluster.local  # backend service FQDN
               port:
                 number: 443
  6. [作成] をクリックします。

新しいVirtualServiceは、[VirtualService] ページに表示されます。

結果の検証

  1. 次のいずれかの方法を使用して、イングレスゲートウェイの IP アドレスを取得します。

  2. イングレスゲートウェイを介して HTTPS リクエストを送信します。<ingress-gateway-ip> を前のステップの IP アドレスに置き換えます。

       curl -v --cacert aliyun.root.crt \
         --resolve sample.aliyun.com:443:<ingress-gateway-ip> \
         https://sample.aliyun.com

    期待される出力:

       Welcome to aliyun.com without TLS Termination!

    これにより、TLS トラフィックがイングレスゲートウェイを介して NGINX バックエンドにパススルーされ、NGINX バックエンドが TLS を終端して応答を返すことが確認されます。

クリーンアップ

このチュートリアルで作成されたリソースを削除するには、次のコマンドを実行します。

kubectl delete gateway istio-mynginx-customingressgateway
kubectl delete virtualservice istio-mynginx-customvirtualservice
kubectl delete service mynginxapp
kubectl delete deployment mynginxapp
kubectl delete secret nginx-server-certs
kubectl delete configmap mynginx-configmap