All Products
Search
Document Center

Alibaba Cloud Service Mesh:Aktifkan TLS passthrough pada gerbang masuk

Last Updated:Mar 12, 2026

Dengan TLS passthrough, gerbang masuk meneruskan lalu lintas TLS terenkripsi langsung ke layanan backend tanpa mendekripsinya. Layanan backend yang menangani terminasi TLS—bukan gerbang—sehingga sesi TLS tetap utuh dari klien ke server.

Ini berbeda dari terminasi TLS, di mana gerbang mendekripsi lalu lintas sebelum meneruskannya:

ModeTLS dihentikan diKasus penggunaan
TLS terminationIngress gatewayProxy sidecar disuntikkan; lalu lintas antara gerbang dan sidecar dikirim melalui saluran data mTLS
TLS passthroughBackend serviceProxy sidecar tidak disuntikkan, atau kondisi khusus lainnya memerlukan enkripsi end-to-end tanpa dekripsi perantara
Catatan: Jika proxy sidecar disuntikkan, seluruh lalu lintas antara ingress gateway dan proxy sidecar dikirim melalui saluran mutual TLS (mTLS). Dalam kasus tersebut, konfigurasikan terminasi TLS pada ingress gateway sebagai gantinya.

TLS passthrough mengandalkan Server Name Indication (SNI) untuk mengarahkan lalu lintas. Klien Anda harus mendukung ekstensi TLS SNI.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Langkah 1: Siapkan sertifikat server dan kunci privat

Jika Anda sudah memiliki sertifikat server dan kunci privat untuk sample.aliyun.com, ubah namanya menjadi sample.aliyun.com.crt dan sample.aliyun.com.key, lalu lanjutkan ke Langkah 2.

Jika belum, jalankan perintah openssl berikut untuk menghasilkan sertifikat tanda tangan sendiri untuk pengujian.

  1. Buat otoritas sertifikat root (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. Hasilkan sertifikat server yang ditandatangani oleh CA root:

       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

Perintah-perintah ini menghasilkan file-file berikut:

FileTujuan
aliyun.root.crt / aliyun.root.keySertifikat dan kunci privat CA root
sample.aliyun.com.crt / sample.aliyun.com.keySertifikat server dan kunci privat untuk sample.aliyun.com
sample.aliyun.com.csrPermintaan penandatanganan sertifikat (file sementara)

Langkah 2: Terapkan layanan backend HTTPS

Langkah ini menerapkan layanan backend berbasis NGINX yang menghentikan TLS pada Port 443. Gerbang masuk meneruskan lalu lintas TLS ke layanan ini tanpa dekripsi.

Buat konfigurasi NGINX

Buat file bernama mynginx.conf dengan konten berikut:

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;
    }
  }
}

Buat resource Kubernetes pendukung

  1. Buat ConfigMap untuk menyimpan konfigurasi NGINX:

       kubectl create configmap mynginx-configmap --from-file=nginx.conf=./mynginx.conf
  2. Buat Secret untuk menyimpan sertifikat server dan kunci privat:

       kubectl create secret tls nginx-server-certs \
         --key sample.aliyun.com.key --cert sample.aliyun.com.crt
  3. Aktifkan injeksi proxy sidecar otomatis untuk namespace default. Untuk informasi lebih lanjut, lihat Aktifkan injeksi proxy sidecar otomatis.

Terapkan layanan NGINX

Buat file bernama mynginxapp.yaml dengan konten berikut, lalu jalankan 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

Verifikasi layanan backend

Jalankan perintah berikut untuk mengirim permintaan uji dari proxy sidecar ke server 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

Jika server NGINX berjalan dengan benar, badan respons berisi:

Welcome to aliyun.com without TLS Termination!

Langkah 3: Buat Gateway Istio dengan TLS passthrough

Definisikan resource Gateway yang mendengarkan pada Port 443 dan meneruskan lalu lintas TLS ke backend tanpa terminasi.

  1. Masuk ke Konsol ASM.

  2. Pada panel navigasi kiri, pilih Service Mesh > Mesh Management.

  3. Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM tersebut atau klik Manage di kolom Actions.

  4. Pada panel navigasi kiri, pilih ASM Gateways > Gateway. Pada halaman yang muncul, klik Create from YAML.

  5. Pilih namespace default dan tempelkan YAML berikut:

       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. Klik Create.

Gateway baru muncul pada halaman Gateway.

Langkah 4: Buat layanan virtual untuk pengarahan TLS

Definisikan VirtualService yang mengarahkan lalu lintas TLS yang sesuai dengan host SNI sample.aliyun.com ke layanan backend.

  1. Masuk ke Konsol ASM.

  2. Pada panel navigasi kiri, pilih Service Mesh > Mesh Management.

  3. Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM tersebut atau klik Manage di kolom Actions.

  4. Pada panel navigasi kiri, pilih Traffic Management Center > VirtualService. Pada halaman yang muncul, klik Create from YAML.

  5. Pilih namespace default dan tempelkan YAML berikut:

       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. Klik Create.

VirtualService baru muncul pada halaman VirtualService.

Verifikasi hasil

  1. Dapatkan alamat IP gerbang masuk menggunakan salah satu metode berikut:

  2. Kirim permintaan HTTPS melalui gerbang masuk. Ganti <ingress-gateway-ip> dengan alamat IP dari langkah sebelumnya:

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

    Output yang diharapkan:

       Welcome to aliyun.com without TLS Termination!

    Hal ini mengonfirmasi bahwa lalu lintas TLS melewati gerbang masuk menuju backend NGINX, yang menghentikan TLS dan mengembalikan respons.

Bersihkan

Untuk menghapus resource yang dibuat dalam tutorial ini, jalankan perintah berikut:

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