全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Gunakan shutdown yang mulus untuk mencegah kehilangan trafik

更新时间:Nov 15, 2025

Saat Anda melakukan penskalaan turun atau restart bergulir pada gerbang Service Mesh (ASM), Pod gerbang dihapus. Hal ini dapat menyebabkan kehilangan trafik dalam jumlah kecil. Anda dapat mengaktifkan fitur shutdown yang mulus untuk mencegah kehilangan tersebut. Saat shutdown yang mulus diaktifkan, koneksi yang ada terus mentransfer data selama periode tertentu saat Pod gerbang sedang dihapus. Topik ini menjelaskan cara menggunakan fitur shutdown yang mulus.

Lingkup

Langkah 1: Aktifkan shutdown yang mulus

Aktifkan fitur untuk gerbang yang sudah ada

Pada ASM 1.26 dan versi yang lebih baru, mengubah konfigurasi shutdown yang mulus menyebabkan gerbang melakukan restart. Lakukan operasi ini di luar jam sibuk.

Konsol

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

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah 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 samping Graceful Shutdown, centang kotak Graceful Shutdown, atur Connection Timeout (seconds), lalu klik Confirm.

Konfigurasi YAML (untuk versi ASM di bawah 1.26)

Tambahkan anotasi yang diperlukan ke file YAML gerbang di bawah bidang serviceAnnotations.

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'          # Enable connection draining for the load balancer, which is graceful shutdown.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: '10'  # The connection draining timeout period. Valid values: 10 to 30.
...

Konfigurasi YAML (untuk versi ASM 1.26 dan yang lebih baru)

Tambahkan anotasi yang diperlukan ke file YAML gerbang di bawah bidang annotations.

apiVersion: istio.alibabacloud.com/v1
kind: IstioGateway
metadata:
  annotations:
    # For Classic Load Balancer (CLB) and Network Load Balancer (NLB) gateways, the valid values are 10 to 890.
    # For ClusterIP and NodePort gateways, there is no upper limit.
    asm.alibabacloud.com/gateway-drain-timeout-seconds: "30"
  name: ingressgateway
  namespace: istio-system
...

Aktifkan fitur saat membuat gerbang

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

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

  3. Pada halaman Ingress Gateway, klik Create.

  4. Pada halaman Create, pilih Deployment Cluster, atur CLB Type menjadi Public Network Access, pilih spesifikasi load balancer di bawah New CLB Instance, dan atur Number Of Gateway Replicas menjadi 10. Biarkan nilai default untuk item konfigurasi lainnya.

    Untuk informasi selengkapnya tentang item konfigurasi, lihat Buat gerbang masuk.

  5. Klik Advanced Options, centang kotak Graceful Shutdown, atur Connection Timeout (Seconds), lalu klik Create.

    Item konfigurasi

    Deskripsi

    Graceful Shutdown

    Jika Anda memilih opsi ini, instans Classic Load Balancer (CLB) secara mulus menguras koneksi yang ada saat Pod gerbang melakukan restart bergulir. Hal ini meminimalkan dampak pada layanan Anda dan mendukung skenario seperti perubahan konfigurasi dan peningkatan gerbang dengan lebih baik.

    Connection Timeout (Seconds)

    Setelah instans CLB menghapus Pod gerbang, instans tersebut menunggu periode timeout koneksi yang dikonfigurasi sebelum memutus koneksi dari Pod tersebut. Parameter ini memberikan buffer bagi Pod gerbang untuk memproses koneksi yang ada. Waktu shutdown yang mulus default untuk Pod gerbang adalah 30 detik. Periode timeout yang Anda konfigurasi untuk instans CLB tidak boleh melebihi 30 detik.

    Mulai dari versi 1.26, Anda dapat mengatur periode timeout hingga maksimum 890 detik.

Langkah 2: Sebarkan aplikasi contoh

  1. Hubungkan ke kluster ACK menggunakan kubectl. Untuk informasi selengkapnya, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk menghubungkan ke kluster.

  2. Buat file httpbin.yaml dengan konten berikut.

    Perluas untuk melihat file 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. Sebarkan aplikasi httpbin.

    kubectl apply -f httpbin.yaml -n default

Langkah 3: Buat layanan virtual dan aturan gateway

  1. Buat layanan virtual.

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

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

    3. Pada halaman Create, pilih Namespace dan Scene Template, masukkan 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 aturan gateway.

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

    2. Pada halaman Create, pilih Namespace dan Scene Template, masukkan 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 bahwa routing telah berhasil dikonfigurasi.

    1. Dapatkan alamat gateway ASM. Untuk informasi selengkapnya, lihat Buat gerbang masuk.

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

      Halaman berikut muncul, yang menunjukkan bahwa routing telah berhasil dikonfigurasi.httpbin

Langkah 4: Verifikasi efek shutdown yang mulus

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

  2. Lakukan penskalaan turun pada gateway ASM.

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

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

    3. Pada halaman Ingress Gateway, klik View YAML di sebelah kanan gerbang target.

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

      缩容

  3. Jalankan perintah berikut untuk mengirim 50.000 permintaan ke aplikasi httpbin dengan konkurensi 200. Periksa kehilangan trafik sebelum dan sesudah shutdown yang mulus diaktifkan.

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

    Jenis

    Analisis hasil

    Shutdown yang mulus 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

    Dari 50.000 permintaan, hanya 49.747 yang mengembalikan kode status 200. Hal ini menunjukkan bahwa hanya 49.747 permintaan yang berhasil dan terjadi kehilangan trafik dalam jumlah kecil.

    Shutdown yang mulus diaktifkan

    Output berikut dikembalikan:

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

    Semua 50.000 permintaan mengembalikan kode status 200. Hal ini menunjukkan bahwa semua 50.000 permintaan berhasil dan tidak ada kehilangan trafik.