全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Meningkatkan ketersediaan untuk layanan gateway masuk dari instance ASM

更新时间:Jul 06, 2025

Gateway masuk dari instance Service Mesh (ASM) berfungsi sebagai titik masuk trafik bisnis. Untuk mencegah ketidaktersediaan bisnis, gateway masuk harus tersedia. Topik ini menjelaskan cara meningkatkan ketersediaan untuk layanan gateway masuk dari instance ASM.

Prasyarat

Meningkatkan ketersediaan untuk layanan gateway masuk yang diterapkan di kluster ACK

Anda dapat menggunakan file YAML untuk membuat dan mengonfigurasi gateway masuk untuk instance ASM. Saat Anda membuat gateway masuk dan menerapkannya di kluster ACK, Anda dapat mengonfigurasi kebijakan anti-afinitas pod dalam file YAML gateway masuk untuk menetapkan pod gateway masuk ke node atau zona yang berbeda. Ini meningkatkan ketersediaan gateway masuk.

  • Tetapkan parameter podAntiAffinity untuk menetapkan pod gateway masuk ke node yang berbeda.

    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
                  topologyKey: kubernetes.io/hostname
                weight: 100 
      rollingMaxSurge: "100%"
      rollingMaxUnavailable: "25%"
    • preferredDuringSchedulingIgnoredDuringExecution: Mengaktifkan afinitas pod lunak. Ini menentukan bahwa Anda dapat menjadwalkan pod meskipun pod tidak memenuhi persyaratan tertentu.

    • matchExpressions: Kebijakan yang digunakan untuk menetapkan pod. Tetapkan parameter key menjadi app, parameter operator menjadi In, dan parameter values menjadi istio-ingressgateway-1. Ini menentukan bahwa pod gateway masuk tidak dapat ditempatkan pada node yang sama dengan pod yang memiliki label app=istio-ingressgateway-1. Akibatnya, setiap node hanya dapat berisi satu pod dengan label app=istio-ingressgateway-1.

    • topologyKey: Dimensi tempat kebijakan anti-afinitas pod berlaku.

      Dalam contoh ini, nilainya diatur ke kubernetes.io/hostname, yang menunjukkan bahwa kebijakan anti-afinitas pod berlaku pada node.

  • Tetapkan parameter podAntiAffinity untuk menetapkan pod gateway masuk ke zona yang berbeda.

    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
                  topologyKey: topology.kubernetes.io/zone
                weight: 100 
      rollingMaxSurge: "100%"
      rollingMaxUnavailable: "25%"
    • preferredDuringSchedulingIgnoredDuringExecution: Mengaktifkan afinitas pod lunak. Ini menentukan bahwa Anda dapat menjadwalkan pod meskipun pod tidak memenuhi persyaratan tertentu.

    • matchExpressions: Kebijakan yang digunakan untuk menetapkan pod. Tetapkan parameter key menjadi app, parameter operator menjadi In, dan parameter values menjadi istio-ingressgateway-1. Ini menentukan bahwa pod gateway masuk tidak dapat ditempatkan di zona yang sama dengan pod yang memiliki label app=istio-ingressgateway-1. Akibatnya, setiap zona hanya dapat berisi satu pod dengan label app=istio-ingressgateway-1.

    • topologyKey: Dimensi tempat kebijakan anti-afinitas pod berlaku.

      Dalam contoh ini, parameter ini diatur ke topology.kubernetes.io/zone, yang menunjukkan bahwa kebijakan anti-afinitas pod berlaku pada zona.

Meningkatkan ketersediaan untuk layanan gateway masuk yang diterapkan di kluster ACK Serverless

Kluster Kubernetes tanpa server tidak mendukung kebijakan anti-afinitas pod. Untuk meningkatkan ketersediaan untuk layanan gateway masuk yang diterapkan di kluster ACK Serverless, Anda dapat membuat pod Elastic Container Instance (ECI) di kluster dan menetapkan pod ke zona yang berbeda.

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

  2. Tetapkan parameter podAnnotations untuk gateway masuk yang diterapkan di kluster ACK Serverless untuk mengaitkan zona dengan gateway masuk ini.

    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%"
    • k8s.aliyun.com/eci-vswitch: ID vSwitch yang termasuk dalam virtual private cloud (VPC) zona yang akan dikaitkan.

    • k8s.aliyun.com/eci-schedule-strategy: Kebijakan penjadwalan pod ECI. Dalam contoh ini, nilainya diatur ke VSwitchRandom, yang menunjukkan bahwa pod ECI ditetapkan ke zona secara acak.