All Products
Search
Document Center

Alibaba Cloud Service Mesh:Gunakan graceful shutdown untuk mencegah kehilangan traffic

Last Updated:Jun 22, 2026

Saat melakukan skala-masuk atau restart bergulir pada gerbang masuk ASM, beberapa Pod gerbang dihapus, yang dapat menyebabkan kehilangan traffic ringan. Anda dapat mengaktifkan graceful shutdown untuk mencegah kehilangan tersebut dengan memungkinkan koneksi yang ada tetap mengirimkan data selama periode tertentu setelah Pod gerbang dihapus.

Prasyarat

Langkah 1: Aktifkan graceful shutdown

Gerbang yang sudah ada

Mulai dari ASM 1.26, perubahan konfigurasi graceful shutdown akan memicu restart gerbang. Lakukan operasi ini selama jam sepi untuk meminimalkan dampak.

Konsol

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

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.

  3. Pada halaman Ingress Gateway, klik nama gerbang target.

  4. Pada halaman Gateway Details, klik Advanced Options. Klik ikon Edit di sebelah kanan SLB graceful offline, pilih SLB graceful offline, konfigurasi Connection timeout (seconds), lalu klik Submit.

YAML (sebelum 1.26)

Tambahkan anotasi serviceAnnotations ke file YAML gerbang.

apiVersion: istio.alibabacloud.com/v1
kind: IstioGateway
metadata:
  name: ingressgateway
  namespace: istio-system
spec:
  gatewayType: ingress
  serviceAnnotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: 'on'          # Mengaktifkan connection draining untuk load balancer, yang mengimplementasikan graceful shutdown.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: '10'  # Periode timeout connection draining, dalam detik. Nilai valid: 10 hingga 30.
...

YAML (1.26 dan seterusnya)

Tambahkan anotasi annotations ke file YAML gerbang.

apiVersion: istio.alibabacloud.com/v1
kind: IstioGateway
metadata:
  annotations:
    # Untuk gerbang CLB dan NLB, rentang nilai valid adalah [10, 890].
    # Untuk gerbang ClusterIP dan NodePort, tidak ada batas atas.
    asm.alibabacloud.com/gateway-drain-timeout-seconds: "30"
  name: ingressgateway
  namespace: istio-system
...

Gerbang baru

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

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.

  3. Pada halaman Ingress Gateway, klik Create.

  4. Pada halaman Create, pilih Cluster, atur CLB instance type ke Internet Access, pilih spesifikasi load balancer di bagian Create SLB Instance, atur Gateway instances ke 10, dan pertahankan nilai default untuk parameter lainnya.

    Untuk informasi lebih lanjut tentang parameter tersebut, lihat Buat gerbang masuk.

  5. Klik Advanced Options, pilih SLB graceful offline, atur Connection timeout (seconds), lalu klik Create.

    Parameter

    Deskripsi

    SLB graceful offline

    Jika opsi ini dipilih, instans Classic Load Balancer (CLB) secara mulus menguras koneksi yang ada selama restart bergulir Pod gerbang. Proses ini meminimalkan dampak layanan selama perubahan konfigurasi dan peningkatan gerbang.

    Connection timeout (seconds)

    Setelah instans CLB menghapus Pod gerbang, instans tersebut menunggu selama periode timeout koneksi yang dikonfigurasi sebelum menutup koneksi ke Pod tersebut. Parameter ini memberikan periode buffer bagi Pod gerbang untuk memproses koneksi yang ada.

    Mulai dari ASM 1.26, periode timeout hingga 890 detik didukung.

Langkah 2: Deploy aplikasi contoh

  1. Hubungkan ke kluster ACK menggunakan kubectl. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.

  2. Buat file bernama httpbin.yaml dengan konten berikut.

    httpbin.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: httpbin
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      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:
          serviceAccountName: httpbin
          containers:
          - image: docker.io/kennethreitz/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  3. Deploy aplikasi httpbin.

    kubectl apply -f httpbin.yaml -n default

Langkah 3: Buat VirtualService dan Gateway

  1. Buat VirtualService.

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

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

    3. Pada halaman Create, pilih Namespaces dan Scenario Template, tempel konfigurasi YAML berikut, lalu klik Create.

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: httpbin
        namespace: default
      spec:
        gateways:
          - httpbin-gateway
        hosts:
          - '*'
        http:
          - route:
              - destination:
                  host: httpbin
                  port:
                    number: 8000
  2. Buat Gateway.

    1. Pada halaman detail instans ASM, pilih ASM Gateways > Gateway di panel navigasi kiri. Pada halaman yang muncul, klik Create from YAML.

    2. Pada halaman Create, pilih Namespaces dan Scenario Template, tempel konfigurasi YAML berikut, lalu klik Create.

      apiVersion: networking.istio.io/v1beta1
      kind: Gateway
      metadata:
        name: httpbin-gateway
        namespace: default
      spec:
        selector:
          istio: ingressgateway
        servers:
          - hosts:
              - '*'
            port:
              name: http
              number: 80
              protocol: HTTP
  3. Verifikasi konfigurasi routing.

    1. Dapatkan alamat gerbang masuk ASM. Untuk informasi lebih lanjut, lihat Buat gerbang masuk.

    2. Di bilah alamat browser Anda, masukkan http://<alamat gerbang masuk ASM>.

      Halaman utama httpbin.org muncul di browser Anda, menampilkan judul httpbin.org dan deskripsi A simple HTTP Request & Response Service. Hal ini mengonfirmasi bahwa VirtualService dan Gateway telah dikonfigurasi dengan benar.

Langkah 4: Verifikasi efek graceful shutdown

  1. Unduh dan instal versi tool uji stres ringan hey yang kompatibel dengan sistem operasi Anda. Untuk informasi lebih lanjut, lihat hey.

  2. Lakukan skala-masuk pada gerbang masuk ASM.

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

    2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.

    3. Pada halaman Ingress Gateway, temukan gerbang target dan klik View YAML di kolom Actions.

    4. Pada dialog Edit, atur nilai parameter replicaCount menjadi 1 dan klik OK.

  3. Jalankan perintah berikut untuk mengirim 50.000 permintaan ke aplikasi httpbin dengan konkurensi 200, dan bandingkan kehilangan traffic sebelum dan sesudah Anda mengaktifkan graceful shutdown.

    hey -c 200 -n 50000 -disable-keepalive http://<alamat gerbang masuk ASM>/

    Jenis

    Analisis hasil

    Graceful shutdown dinonaktifkan

    Output berikut dikembalikan:

    Status code distribution:
      [200] 49747 responses
    
    Error distribution:
      [253] Get "http://47.55.2xx.xx": dial tcp 47.55.2xx.xx:80: connect: connection refused

    Hanya 49.747 dari 50.000 permintaan yang mengembalikan kode status 200, menunjukkan bahwa terjadi kehilangan traffic ringan.

    Graceful shutdown diaktifkan

    Output berikut dikembalikan:

    ............
    Status code distribution:
      [200] 50000 responses

    Semua 50.000 permintaan mengembalikan kode status 200, menunjukkan bahwa tidak terjadi kehilangan traffic.