All Products
Search
Document Center

Alibaba Cloud Service Mesh:Aktifkan HTTPS pada ingress gateway

Last Updated:Mar 20, 2026

Service Mesh (ASM) ingress gateways mendukung pemuatan sertifikat dinamis melalui Secret Discovery Service (SDS). Anda dapat menambahkan, memperbarui, atau menghapus sertifikat Transport Layer Security (TLS) secara real time tanpa me-restart gateway atau memasang volume secret. Hal ini menghilangkan gangguan layanan selama perubahan sertifikat serta menyederhanakan pengelolaan HTTPS multi-host.

Cara kerja

Ingress gateway memantau Kubernetes Secrets di namespace yang sama dengan ingress gateway. Ketika sumber daya Gateway merujuk ke sebuah Secret berdasarkan nama melalui field credentialName, gateway secara otomatis memuat sertifikat dan kunci privat terkait. Perubahan pada Secret berlaku segera.

Manfaat:

  • Tidak memerlukan restart — Anda dapat menambahkan, menghapus, dan memperbarui sertifikat server dan kunci privat atau sertifikat root secara dinamis tanpa me-restart ingress gateway.

  • Tidak memerlukan pemasangan volume secret — gateway membaca sertifikat server dan kunci privat atau sertifikat root langsung dari Kubernetes Secrets.

  • Dukungan multi-host — satu gateway dapat melayani traffic HTTPS untuk beberapa domain, masing-masing dengan sertifikatnya sendiri.

Prasyarat

Langkah 1: Buat sertifikat server dan kunci privat

Catatan

Nama domain harus memiliki ICP Filing sebelum dapat diakses. Contoh ini menggunakan aliyun.com sebagai nama domain.

Jika Anda sudah memiliki sertifikat dan kunci privat untuk aliyun.com, ubah nama file menjadi aliyun.com.crt dan aliyun.com.key. Jika belum, buat sertifikat mandiri menggunakan OpenSSL:

  1. Buat sertifikat root dan kunci privat:

    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt
  2. Buat sertifikat dan kunci privat untuk aliyun.com:

    openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
    openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
  3. Simpan sertifikat dalam instans ASM Anda. Metode bergantung pada versi ASM:

    • Untuk versi ASM sebelum 1.17

      Hubungkan ke kluster tempat pod ingress gateway berjalan menggunakan kubectl, lalu buat TLS Secret di namespace istio-system:

      kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crt
      Penting

      Nama Secret tidak boleh dimulai dengan istio atau prometheus, dan tidak boleh berisi field token.

    • Untuk versi ASM 1.17 atau lebih baru

      1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

      2. Di halaman Mesh Management, klik nama instans ASM Anda. Di panel navigasi kiri, pilih ASM Gateways > Certificate Management.

      3. Di halaman Certificate Management, klik Create. Di panel Certificate Information, konfigurasikan parameter berikut dan klik OK.

        Parameter

        Nilai

        Name

        myexample-credential

        Public Key Certificate

        Isi dari aliyun.com.crt yang dihasilkan pada sublangkah 2

        Private Key

        Isi dari aliyun.com.key yang dihasilkan pada sublangkah 2

Langkah 2: Deploy layanan backend untuk a.aliyun.com

Langkah ini mendeploy layanan backend berbasis NGINX yang mengembalikan salam pada path /hello.

  1. Buat file konfigurasi NGINX bernama myexample-nginx.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 80;
        location /hello {
            return 200 'Welcome to a.aliyun.com!';
            add_header Content-Type text/plain;
        }
      }
    }
  2. Di kluster tempat pod ingress gateway berjalan, buat ConfigMap untuk menyimpan konfigurasi NGINX:

    kubectl create configmap myexample-nginx-configmap --from-file=nginx.conf=./myexample-nginx.conf
  3. Aktifkan injeksi proxy sidecar otomatis untuk namespace default. Untuk informasi lebih lanjut, lihat Aktifkan Injeksi Proxy Sidecar Otomatis.

  4. Buat file myexampleapp.yaml dengan konten berikut, lalu deploy:

    Tampilkan File YAML

    apiVersion: v1
    kind: Service
    metadata:
      name: myexampleapp
      labels:
        app: myexampleapp
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        app: myexampleapp
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myexampleapp
    spec:
      selector:
        matchLabels:
          app: myexampleapp
      replicas: 1
      template:
        metadata:
          labels:
            app: myexampleapp
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
            volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx
              readOnly: true
          volumes:
          - name: nginx-config
            configMap:
              name: myexample-nginx-configmap
    kubectl apply -f myexampleapp.yaml

Langkah 3: Deploy layanan backend untuk b.aliyun.com

Langkah ini mendeploy layanan backend berbasis httpbin yang menyediakan endpoint pengujian HTTP.

  1. Buat file httpbin.example.yaml dengan konten berikut:

    Tampilkan File YAML

    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
    spec:
      ports:
      - name: http
        port: 8000
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          containers:
          - image: docker.io/citizenstig/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  2. Deploy layanan:

    kubectl apply -f httpbin.example.yaml

Langkah 4: Buat sumber daya Gateway

Definisikan Istio Gateway yang mengakhiri TLS pada port 443 untuk semua host *.aliyun.com, menggunakan sertifikat yang tersimpan dalam myexample-credential.

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Di halaman Mesh Management, klik nama instans ASM Anda. Di panel navigasi kiri, pilih ASM Gateways > Gateway. Klik Create from YAML.

  3. Pilih namespace default, tempel YAML berikut, lalu klik Create:

    Tampilkan File YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: mysdsgateway
    spec:
      selector:
        istio: ingressgateway # use istio default ingress gateway
      servers:
      - port:
          number: 443
          name: https
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: myexample-credential
        hosts:
        - '*.aliyun.com'

    Field credentialName harus cocok dengan nama Secret atau sertifikat yang dibuat pada Langkah 1. Gateway akan memuat sertifikat yang dirujuk oleh nama ini secara dinamis.

Langkah 5: Buat VirtualService

Definisikan VirtualService untuk setiap layanan backend agar traffic HTTPS dari Gateway dialihkan ke layanan yang sesuai.

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Di halaman Mesh Management, klik nama instans ASM Anda. Di panel navigasi kiri, pilih Traffic Management Center > VirtualService. Klik Create from YAML.

  3. Buat VirtualService untuk a.aliyun.com:

    Tampilkan File YAML