Service Mesh (ASM) インスタンスのイングレスゲートウェイは、ビジネスのトラフィックエントリとして機能します。ビジネスの可用性を維持するために、イングレスゲートウェイは可用性が高くなければなりません。このトピックでは、ASM インスタンスのイングレスゲートウェイサービスの可用性を向上させる方法について説明します。
前提条件
ASM インスタンスが作成されていること。詳細については、「ASM インスタンスの作成」をご参照ください。
コンテナサービス Kubernetes 版 (ACK) クラスタまたは ACK Serverless クラスタが作成されていること。詳細については、「ACK マネージドクラスタの作成」または「ACK Serverless クラスタ の作成」をご参照ください。
クラスタが ASM インスタンスに追加されていること。詳細については、「ASM インスタンスへのクラスタの追加」をご参照ください。
ACK クラスタにデプロイされたイングレスゲートウェイサービスの可用性を向上させる
YAML ファイルを使用して、ASM インスタンスのイングレスゲートウェイを作成および構成できます。イングレスゲートウェイを作成して ACK クラスタにデプロイする際に、イングレスゲートウェイの YAML ファイルで Pod アンチアフィニティポリシーを構成して、イングレスゲートウェイの Pod を異なるノードまたはゾーンに割り当てることができます。これにより、イングレスゲートウェイの可用性が向上します。
podAntiAffinity パラメータを設定して、イングレスゲートウェイの Pod を異なるノードに割り当てます。
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: ソフト Pod アフィニティを有効にします。これは、Pod が指定された要件を満たしていなくてもスケジュールできることを指定します。
matchExpressions: Pod の割り当てに使用されるポリシー。key パラメータを app に、operator パラメータを In に、values パラメータを istio-ingressgateway-1 に設定します。これは、
app=istio-ingressgateway-1というラベルが付いた Pod がデプロイされているのと同じノードに、イングレスゲートウェイの Pod をデプロイできないことを指定します。その結果、各ノードにはapp=istio-ingressgateway-1というラベルが付いた Pod が 1 つだけ含まれるようになります。topologyKey: Pod アンチアフィニティポリシーが有効になるディメンション。
この例では、値は
kubernetes.io/hostnameに設定されており、これは Pod アンチアフィニティポリシーがノードで有効になることを示します。
podAntiAffinity パラメータを設定して、イングレスゲートウェイの Pod を異なるゾーンに割り当てます。
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: ソフト Pod アフィニティを有効にします。これは、Pod が指定された要件を満たしていなくてもスケジュールできることを指定します。
matchExpressions: Pod の割り当てに使用されるポリシー。key パラメータを app に、operator パラメータを In に、values パラメータを istio-ingressgateway-1 に設定します。これは、
app=istio-ingressgateway-1というラベルが付いた Pod がデプロイされているのと同じゾーンに、イングレスゲートウェイの Pod をデプロイできないことを指定します。その結果、各ゾーンにはapp=istio-ingressgateway-1というラベルが付いた Pod が 1 つだけ含まれるようになります。topologyKey: Pod アンチアフィニティポリシーが有効になるディメンション。
この例では、このパラメータは
topology.kubernetes.io/zoneに設定されており、これは Pod アンチアフィニティポリシーがゾーンで有効になることを示します。
ACK Serverless クラスタにデプロイされたイングレスゲートウェイサービスの可用性を向上させる
サーバーレス Kubernetes クラスタは、Pod アンチアフィニティポリシーをサポートしていません。ACK Serverless クラスタにデプロイされたイングレスゲートウェイサービスの可用性を向上させるには、クラスタ内に Elastic Container Instance (ECI) Pod を作成し、Pod を異なるゾーンに割り当てることができます。
ACK Serverless クラスタで複数のゾーンを構成します。詳細については、「ゾーンをまたいで ECI を作成する」をご参照ください。
podAnnotationsパラメーターを ACK Serverless クラスタにデプロイされたイングレスゲートウェイに設定して、ゾーンをこのイングレスゲートウェイに関連付けます。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: 関連付けるゾーンの仮想プライベートクラウド (VPC) に属する vSwitch の ID。
k8s.aliyun.com/eci-schedule-strategy: ECI Pod のスケジューリングポリシー。この例では、値は vSwitchRandom に設定されており、これは ECI Pod がランダムモードでゾーンに割り当てられることを示します。