All Products
Search
Document Center

Alibaba Cloud Service Mesh:Aktifkan TLS pass-through pada gerbang masuk

Last Updated:Aug 26, 2026

Semua data antara gerbang masuk dan proxy sidecar dikirim melalui saluran Mutual Transport Layer Security (mTLS). Jika proxy sidecar disuntikkan ke dalam aplikasi, sebaiknya Anda mengonfigurasi terminasi TLS pada gerbang masuk untuk memastikan enkripsi end-to-end. Namun, jika proxy sidecar tidak disuntikkan ke dalam aplikasi atau terdapat kondisi khusus lainnya, gerbang masuk mendukung TLS pass-through. Topik ini menjelaskan cara mengaktifkan TLS pass-through pada gerbang masuk guna memastikan akses aman ke layanan HTTPS dalam kluster.

Prasyarat

Langkah 1: Siapkan sertifikat server dan kunci privat

Jika Anda memiliki sertifikat server dan kunci privat yang tersedia untuk nama domain sample.aliyun.com, ubah nama kunci privat menjadi sample.aliyun.com.key dan sertifikat server menjadi sample.aliyun.com.crt. Atau, jalankan perintah openssl berikut untuk membuat sertifikat server dan kunci privat untuk sample.aliyun.com.

  1. Jalankan perintah berikut untuk membuat sertifikat root dan kunci privat:

    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. Jalankan perintah berikut untuk menghasilkan sertifikat server dan kunci privat untuk server sample.aliyun.com:

    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

Langkah 2: Definisikan layanan internal

Layanan internal dalam contoh ini adalah server NGINX. Pertama, buat file konfigurasi untuk server NGINX. Untuk domain aliyun.com, konfigurasikan path root agar mengembalikan pesan Welcome to aliyun.com without TLS Termination! dan kode status 200. Berikut adalah isi file 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;
    location / {
        return 200 'Welcome to aliyun.com without TLS Termination!';
        add_header Content-Type text/plain;
    }
    server_name www.aliyun.com;
    ssl_certificate /etc/nginx-server-certs/tls.crt;
    ssl_certificate_key /etc/nginx-server-certs/tls.key;
  }
}
  1. Gunakan kubectl untuk terhubung ke kluster tempat Pod gerbang masuk berada berdasarkan informasi dalam file kubeconfig. Lalu, jalankan perintah berikut untuk membuat ConfigMap guna menyimpan konfigurasi server NGINX:

    kubectl create configmap mynginx-configmap --from-file=nginx.conf=./mynginx.conf​
  2. Gunakan kubectl untuk terhubung ke kluster tempat Pod gerbang masuk berada berdasarkan informasi dalam file kubeconfig. Lalu, jalankan perintah berikut untuk membuat secret yang berisi sertifikat server dan kunci privat di namespace default:

    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 prosedurnya, lihat Aktifkan injeksi proxy sidecar otomatis.

  4. Buat file mynginxapp.yaml yang berisi konten berikut. Lalu, jalankan perintah kubectl apply -f mynginxapp.yaml untuk membuat layanan internal untuk nama domain aliyun.com.

    Expand to view the mynginxapp.yaml file

    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    
  5. Jalankan perintah berikut untuk mengirim permintaan dari proxy sidecar ke server NGINX guna memeriksa apakah server NGINX telah dideploy:

    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

Langkah 3: Buat gateway

  1. Masuk ke Konsol ASM.

  2. Di 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 halaman detail instans ASM, pilih ASM Gateways > Gateway di panel navigasi kiri. Pada halaman yang muncul, klik Create from YAML.

  5. Konfigurasikan Gateway sebagai berikut, lalu klik Create.

    1. Pilih namespace. Contoh ini menggunakan namespace default.

    2. Di editor kode, definisikan gateway Istio menggunakan kode YAML berikut:

      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: istio-mynginx-customingressgateway
      spec:
        selector:
          istio: ingressgateway
        servers:
        - hosts:
          - 'sample.aliyun.com'
          port:
            name: https
            number: 443
            protocol: HTTPS
          tls:
            mode: PASSTHROUGH

    Di halaman Gateway, Anda dapat melihat gateway Istio yang telah dibuat.

Langkah 4: Buat layanan virtual

  1. Masuk ke Konsol ASM.

  2. Di 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 halaman detail instans ASM, pilih Traffic Management Center > VirtualService di panel navigasi kiri. Pada halaman yang muncul, klik Create from YAML.

  5. Konfigurasikan VirtualService sebagai berikut, lalu klik Create.

    1. Pilih namespace. Contoh ini menggunakan namespace default.

    2. Di editor kode, definisikan layanan virtual menggunakan kode YAML berikut:

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: istio-mynginx-customvirtualservice
      spec:
        hosts:
        - "sample.aliyun.com"
        gateways:
        - istio-mynginx-customingressgateway
        tls:
        - match:
          - port: 443
            sniHosts:
            - sample.aliyun.com
          route:
          - destination:
              host: mynginxapp.default.svc.cluster.local
              port:
                number: 443

    Di halaman VirtualService, Anda dapat melihat layanan virtual yang telah dibuat.

Lihat hasilnya

  1. Gunakan salah satu metode berikut untuk mendapatkan alamat IP gerbang masuk:

    1. Metode 1: menggunakan Konsol ASM. Untuk informasi selengkapnya, lihat Langkah 3 Sublangkah 1 dalam topik Gunakan sumber daya Istio untuk mengarahkan traffic ke versi layanan yang berbeda.

    2. Metode 2: menjalankan perintah kubectl.

      Gunakan kubectl untuk terhubung ke kluster tempat Pod gerbang masuk berada berdasarkan informasi dalam file kubeconfig. Lalu, jalankan perintah berikut untuk mendapatkan alamat IP gerbang masuk:

      kubectl get svc -n istio-system -l istio=ingressgateway
  2. Jalankan perintah berikut untuk mengakses nama domain aliyun.com melalui HTTPS:

    curl -v --cacert aliyun.root.crt --resolve sample.aliyun.com:443:xx.xx.xx.xx   https://sample.aliyun.com

    Output yang diharapkan:

    Welcome to aliyun.com without TLS Termination!%