All Products
Search
Document Center

Alibaba Cloud Service Mesh:Tingkatkan ketersediaan untuk gerbang masuk ASM

Last Updated:Aug 22, 2026

Gerbang masuk (ingress gateway) merupakan titik masuk lalu lintas tunggal untuk layanan dalam instans Service Mesh (ASM) Anda. Jika seluruh Pod gerbang berjalan pada node atau zona yang sama, kegagalan pada node atau zona tersebut akan menyebabkan seluruh gerbang mati dan memblokir seluruh lalu lintas masuk (inbound traffic). Mendistribusikan Pod gerbang di berbagai node atau zona menghilangkan titik kegagalan tunggal ini dan menjaga aliran lalu lintas tetap berjalan selama gangguan infrastruktur.

Pendekatan yang digunakan tergantung pada tipe kluster Anda:

Tipe klusterStrategiAlasan
Kluster ACKPod anti-affinityMenyebarluaskan Pod di berbagai node atau zona melalui aturan penjadwalan Kubernetes
Kluster ACK ServerlessAnotasi Pod ECIPod anti-affinity tidak didukung di kluster serverless; gunakan distribusi berbasis zona melalui vSwitch sebagai gantinya

Prasyarat

Sebelum memulai, pastikan Anda telah:

Distribusikan Pod gerbang di kluster ACK

Konfigurasikan kebijakan pod anti-affinity dalam resource IstioGateway Anda untuk mencegah penjadwal (scheduler) menempatkan beberapa Pod gerbang pada node atau zona yang sama.

Pilih batasan penjadwalan

Kubernetes menyediakan dua mode anti-affinity. Pilih berdasarkan kapasitas kluster Anda:

ModeNama fieldPerilakuKapan digunakan
Soft (default)preferredDuringSchedulingIgnoredDuringExecutionPenjadwal berusaha mematuhi aturan ini tetapi tetap menjadwalkan Pod jika tidak ada node yang memenuhi syaratJumlah node terbatas atau bervariasi karena autoscaling
HardrequiredDuringSchedulingIgnoredDuringExecutionPenjadwal secara ketat menegakkan aturan ini; Pod tetap dalam status pending jika tidak ada node yang memenuhi syaratKluster memiliki cukup node untuk menjamin satu Pod per node atau zona

Contoh di bawah menggunakan batasan soft. Untuk beralih ke batasan hard, ganti preferredDuringSchedulingIgnoredDuringExecution dengan requiredDuringSchedulingIgnoredDuringExecution serta hapus field weight.

Sebarkan Pod di berbagai node

Atur topologyKey menjadi kubernetes.io/hostname agar setiap node menjalankan paling banyak satu Pod gerbang:

apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
  name: ingressgateway-1
  namespace: istio-system
spec:
  clusterIds:
    - "c954ee9df88f64f229591f0ea4c61****"
  cpu:
    targetAverageUtilization: 80
  externalTrafficPolicy: Local
  maxReplicas: 4
  minReplicas: 2
  ports:
  - name: status-port
    port: 15020
    targetPort: 15020
  - name: http2
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 80
  - name: tls
    port: 15443
    targetPort: 15443
  replicaCount: 1
  resources:
    limits:
      cpu: '2'
      memory: 2G
    requests:
      cpu: 200m
      memory: 256Mi
  sds:
    enabled: true
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 2000m
        memory: 1024Mi
  serviceType: LoadBalancer
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - istio-ingressgateway-1     # Harus sesuai dengan label app gerbang
          topologyKey: kubernetes.io/hostname # Satu Pod per node
        weight: 100
  rollingMaxSurge: "100%"
  rollingMaxUnavailable: "25%"

Sebarkan Pod di berbagai zona

Untuk mendistribusikan Pod di berbagai zona ketersediaan (availability zones) alih-alih di node individual, ubah topologyKey menjadi topology.kubernetes.io/zone. Semua field lain tetap sama:

  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - istio-ingressgateway-1
          topologyKey: topology.kubernetes.io/zone  # Satu Pod per zona
        weight: 100

Distribusi tingkat zona melindungi dari gangguan yang mencakup seluruh zona, tetapi memerlukan kluster Anda mencakup beberapa zona. Distribusi tingkat node sudah cukup jika semua node berada dalam satu zona.

Referensi field anti-affinity

FieldDeskripsi
preferredDuringSchedulingIgnoredDuringExecutionAnti-affinity soft. Penjadwal lebih memilih mematuhi aturan ini tetapi tidak memblokir penjadwalan jika tidak ada node yang memenuhi syarat.
requiredDuringSchedulingIgnoredDuringExecutionAnti-affinity hard. Penjadwal secara ketat menegakkan aturan ini. Pod tetap dalam status pending jika tidak ada node yang memenuhi syarat.
matchExpressionsMemilih Pod berdasarkan label. Dalam contoh ini, key: app, operator: In, values: istio-ingressgateway-1 menargetkan Pod dengan label app=istio-ingressgateway-1.
topologyKeyMenentukan cakupan aturan anti-affinity. Atur ke kubernetes.io/hostname untuk distribusi tingkat node atau topology.kubernetes.io/zone untuk distribusi tingkat zona.
weightPrioritas aturan ini (1–100). Bobot 100 memberikan prioritas tertinggi selama penjadwalan. Hanya berlaku untuk anti-affinity soft.

Distribusikan Pod gerbang di kluster ACK Serverless

Kluster ACK Serverless tidak mendukung pod anti-affinity karena Pod berjalan sebagai instans Elastic Container Instance (ECI) tanpa node tetap. Sebagai gantinya, gunakan anotasi Pod untuk mendistribusikan Pod ECI di berbagai zona.

  1. Konfigurasikan beberapa zona dalam kluster ACK Serverless Anda. Untuk informasi lebih lanjut, lihat Buat ECI di berbagai zona.

  2. Tambahkan podAnnotations ke resource IstioGateway Anda untuk mengaitkan gerbang dengan vSwitch di berbagai zona:

    AnotasiDeskripsi
    k8s.aliyun.com/eci-vswitchID vSwitch yang termasuk dalam virtual private cloud (VPC) dari zona yang akan dikaitkan. Setiap vSwitch berada di zona berbeda, sehingga Pod didistribusikan di zona-zona tersebut.
    k8s.aliyun.com/eci-schedule-strategyStrategi penjadwalan untuk Pod ECI. VSwitchRandom menetapkan Pod ECI ke zona secara acak.
       apiVersion: istio.alibabacloud.com/v1beta1
       kind: IstioGateway
       metadata:
         name: ingressgateway
         namespace: istio-system
       spec:
         clusterIds:
           - "c954ee9df88f64f229591f0ea4c61****"
         cpu:
           targetAverageUtilization: 80
         externalTrafficPolicy: Local
         maxReplicas: 4
         minReplicas: 2
         ports:
         - name: status-port
           port: 15020
           targetPort: 15020
         - name: http2
           port: 80
           targetPort: 80
         - name: https
           port: 443
           targetPort: 80
         - name: tls
           port: 15443
           targetPort: 15443
         replicaCount: 1
         resources:
           limits:
             cpu: '2'
             memory: 2G
           requests:
             cpu: 200m
             memory: 256Mi
         sds:
           enabled: true
           resources:
             requests:
               cpu: 100m
               memory: 128Mi
             limits:
               cpu: 2000m
               memory: 1024Mi
         serviceType: LoadBalancer
         podAnnotations:
           k8s.aliyun.com/eci-vswitch: "vsw-bp1b07j0miob3khtn****,vsw-bp12b85hh323se8ft****"
           k8s.aliyun.com/eci-schedule-strategy: "VSwitchRandom"
         rollingMaxSurge: "100%"
         rollingMaxUnavailable: "25%"

Langkah tambahan untuk meningkatkan ketersediaan

Distribusi Pod hanyalah salah satu lapisan ketersediaan gerbang masuk. Untuk lingkungan produksi, pertimbangkan menggabungkannya dengan langkah-langkah berikut:

UkuranTujuan
HorizontalPodAutoscalerSecara otomatis mengubah jumlah Pod gerbang berdasarkan penggunaan CPU atau memori. Resource IstioGateway sudah mendukung fitur ini melalui minReplicas, maxReplicas, dan cpu.targetAverageUtilization.
Pemeriksaan kesehatan dan pemantauanPantau status Pod gerbang dan siapkan alert untuk restart Pod atau kegagalan penjadwalan guna mendeteksi masalah ketersediaan sedini mungkin.