为多个集群配置统一的入口网关

ASM网关支持同时部署在多个集群,以提高服务可用性。您可以将服务部署在多个集群,然后为多集群配置统一的入口网关,即可代理多个集群对应的入口流量。本文介绍如何为多个集群配置统一的入口网关。

前提条件

配置说明

一个ASM网关部署在多个集群时,会在多个集群中创建网关Pod和对应的Service,并为每个Service挂载一个CLB实例。因此,多集群网关会有多个IP地址。

ASM网关支持复用已有CLB,但不建议多个Service复用同一个CLB。

本文主要介绍以下两种场景的配置方式:

场景一:多集群的网关相关资源配置完全相同

当多集群的网关相关资源完全相同时,您可以通过ASM控制台创建多集群网关,或将单集群网关修改为多集群网关。ASM将根据您的网关配置,在所有集群中创建配置完全相同的网关。

方式一:创建多集群网关

您可以通过ASM控制台,按照界面的配置项或使用YAML创建多集群网关。

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

  3. 创建多集群网关。

    • 方式一:按照配置项创建多集群网关

      1. 入口网关页面,单击创建

      2. 创建页面,部署集群选择多个目标集群,按需进行相关配置,然后单击创建

        关于其他配置项的说明,请参见创建入口网关入口网关配置

    • 方式二:使用YAML创建多集群网关

      1. 入口网关页面,单击使用YAML创建

      2. 创建页面,配置如下YAML,然后单击创建

        apiVersion: istio.alibabacloud.com/v1beta1
        kind: IstioGateway
        metadata:
          name: ingressgateway-multi-cluster
          namespace: istio-system
        spec:
          affinity: {}
          autoCreateGatewayYaml: false
          clusterIds:
            - c87e370627c3f4e62ac77a7*********
            - c877e9b78610a419e833f22*********
          compression: {}
          cpu: {}
          dnsPolicy: ClusterFirst
          externalTrafficPolicy: Local
          gatewayType: ingress
          hostNetwork: false
          kernel:
            parameters: {}
          memory: {}
          ports:
            - name: http-0
              port: 80
              protocol: HTTP
              targetPort: 80
            - name: https-1
              port: 443
              protocol: HTTPS
              targetPort: 443
          readinessProbe: {}
          replicaCount: 2
          resources:
            limits:
              cpu: '2'
              memory: 4G
            requests:
              cpu: 200m
              memory: 256Mi
          runAsRoot: true
          sds: {}
          serviceAnnotations:
            service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
            service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
          serviceType: LoadBalancer

方式二:将单集群网关修改为多集群网关

如果您已经创建了单集群网关,可以在网关YAML的spec.clusterIds数组中添加所需集群,将单集群网关修改为多集群网关。

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

  3. 入口网关页面,单击目标网关右侧的查看YAML

  4. 编辑对话框的spec.clusterIds字段中,增加目标集群ID,然后单击确定

    YAML示例

验证多集群网关是否创建成功

您可以分别在两个数据面集群的istio-system命名空间下,查看网关对应的Service和Deployment等资源。如果两个集群中存在相同的配置资源,表明多集群网关创建成功。

场景二:多集群的网关相关资源配置不同

如果您有一个网关部署在两个集群,且这两个集群中需要的网关配置不同。例如,一个集群需要使用自动创建的CLB,另一个集群需要复用已有的CLB;一个集群需要网关副本数为3,另一个需要的副本数则为5。自定义多集群网关配置需要修改相应的YAML文件。下文以在新建的多集群网关中,配置不同类型的CLB为例进行说明,其中一个集群的网关使用自动创建的CLB,另一个集群的网关复用已有的CLB。

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

  3. 入口网关页面,单击使用YAML创建

  4. 创建页面,配置如下YAML,然后单击创建

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      name: ingressgateway2
      namespace: istio-system
    spec:
      autoCreateGatewayYaml: false
      clusterIds:
        - c0ed16dbd6c5e429faca464**********
        - c7d5fba8f3c974353b56522**********
      compression: {}
      cpu: {}
      dnsPolicy: ClusterFirst
      externalTrafficPolicy: Local
      gatewayType: ingress
      hostNetwork: false
      kernel:
        parameters: {}
      memory: {}
      overrides:
        c0ed16dbd6c5e429faca464***********:
          serviceAnnotations:
            service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
            service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
        c7d5fba8f3c974353b56522**********:
          serviceAnnotations:
            service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: lb-bp1lv01rlga********
      ports:
        - name: http-0
          port: 80
          protocol: HTTP
          targetPort: 80
        - name: https-2
          port: 443
          protocol: HTTPS
          targetPort: 443
      readinessProbe: {}
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 4G
        requests:
          cpu: 200m
          memory: 256Mi
      rollingMaxSurge: 25%
      rollingMaxUnavailable: 25%
      runAsRoot: true
      sds: {}
      serviceType: LoadBalancer

    overrides是一个Map类型的结构。其中,Key为集群ID,Value和网关spec中的配置字段同名,支持配置CLB相关参数、网关副本数、网关资源规格等参数。在overrides字段中,您可以单独配置每个集群的参数。该配置的优先级高于最外层的网关配置。关于字段的相关说明,请参见ASM网关CRD说明

  5. 验证多集群网关是否创建成功。

    您可以分别在两个集群的istio-system命名空间下,查看该网关对应的Service。如果一个集群的Service挂载的IP是自动创建的CLB的IP,另一个集群的Service挂载的IP是指定的CLB的IP,表明多集群网关创建成功。