ASM网关支持同时部署在多个集群,以提高服务可用性。您可以将服务部署在多个集群,然后为多集群配置统一的入口网关,即可代理多个集群对应的入口流量。本文介绍如何为多个集群配置统一的入口网关。
前提条件
已在ASM实例的两个集群中部署应用。具体操作,请参见添加集群到ASM实例和在ASM实例关联的集群中部署应用。
已为命名空间注入Sidecar。具体操作,请参见配置Sidecar注入策略。
配置说明
一个ASM网关部署在多个集群时,会在多个集群中创建网关Pod和对应的Service,并为每个Service挂载一个CLB实例。因此,多集群网关会有多个IP地址。
ASM网关支持复用已有CLB,但不建议多个Service复用同一个CLB。
本文主要介绍以下两种场景的配置方式:
场景二:多集群的网关相关资源配置不同:例如CLB规格、网关副本数等配置不同。
场景一:多集群的网关相关资源配置完全相同
当多集群的网关相关资源完全相同时,您可以通过ASM控制台创建多集群网关,或将单集群网关修改为多集群网关。ASM将根据您的网关配置,在所有集群中创建配置完全相同的网关。
方式一:创建多集群网关
您可以通过ASM控制台,按照界面的配置项或使用YAML创建多集群网关。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
创建多集群网关。
方式一:按照配置项创建多集群网关
在入口网关页面,单击创建。
在创建页面,部署集群选择多个目标集群,按需进行相关配置,然后单击创建。
关于其他配置项的说明,请参见创建入口网关。
方式二:使用YAML创建多集群网关
在入口网关页面,单击使用YAML创建。
在创建页面,配置如下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数组中添加所需集群,将单集群网关修改为多集群网关。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在入口网关页面,单击目标网关右侧的查看YAML。
在编辑对话框的spec.clusterIds字段中,增加目标集群ID,然后单击确定。
验证多集群网关是否创建成功
您可以分别在两个数据面集群的istio-system命名空间下,查看网关对应的Service和Deployment等资源。如果两个集群中存在相同的配置资源,表明多集群网关创建成功。
场景二:多集群的网关相关资源配置不同
如果您有一个网关部署在两个集群,且这两个集群中需要的网关配置不同。例如,一个集群需要使用自动创建的CLB,另一个集群需要复用已有的CLB;一个集群需要网关副本数为3,另一个需要的副本数则为5。自定义多集群网关配置需要修改相应的YAML文件。下文以在新建的多集群网关中,配置不同类型的CLB为例进行说明,其中一个集群的网关使用自动创建的CLB,另一个集群的网关复用已有的CLB。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在入口网关页面,单击使用YAML创建。
在创建页面,配置如下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说明。
验证多集群网关是否创建成功。
您可以分别在两个集群的istio-system命名空间下,查看该网关对应的Service。如果一个集群的Service挂载的IP是自动创建的CLB的IP,另一个集群的Service挂载的IP是指定的CLB的IP,表明多集群网关创建成功。