阿里云服务网格ASM(Alibaba Cloud Service Mesh)除了可以通过控制台创建默认的入口网关服务之外,还支持通过CRD方式管理自定义网关。

前提条件

  • 创建ASM实例,请参见创建ASM实例
  • 部署应用到ASM实例的集群中,请参见部署应用到ASM实例
  • 新增入口网关必须创建在命名空间istio-system中,以获取相关的配置信息。如果部署到其他命名空间,在Istio 1.6及以后的版本中,将因为不能获取相关配置而导致入口网关无法正常启动。

部署自定义网关

  1. 创建并拷贝以下内容到myexample-customingressgateway.yaml文件中。
    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:   
      name: "myexample-customingressgateway"  
      namespace: "istio-system"
    spec:  
      clusterIds:
        - "cluster1Id"
        - "cluster2Id"
      cpu: 
        targetAverageUtilization: 80
      env:
        - name: "envname1"
          value: "envvalue1"
      externalTrafficPolicy: Local
      maxReplicas: 2
      minReplicas: 1  
      ports:  
      - name: status-port    
        port: 15020    
        targetPort: 15020  
      - name: http2    
        port: 80    
        targetPort: 80  
      - name: https    
        port: 443    
        targetPort: 0  
      - name: tls    
        port: 15443    
        targetPort: 15443  
      replicaCount: 1  
      resources:
        limits:
          cpu: '2'
          memory: 2G
        requests:
          cpu: 200m
          memory: 256Mi
      sds:
        enabled: false
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 2000m
            memory: 1024Mi
    # secretVolumes:
    # - name: myexample-customingressgateway-certs
    #   secretName: istio-myexample-customingressgateway-certs
    #   mountPath: /etc/istio/myexample-customingressgateway-certs
      serviceType: LoadBalancer  
      serviceAnnotations:    
        service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet  
      serviceLabels:
        serviceLabelKey1: "serviceLabelValue1"
      podAnnotations:
        podAnnotationsKey1: "podAnnotationsValue1"
      rollingMaxSurge: "100%"
      rollingMaxUnavailable: "25%"
      overrides:
        cluster1Id:
          replicaCount: 1 
          resources:
              limits:
              cpu: '2'
              memory: 2G
            requests:
              cpu: 200m
              memory: 256Mi
          serviceAnnotations:    
            service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
            service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small"
        cluster2Id:
          replicaCount: 2
          resources:
              limits:
              cpu: '4'
              memory: 4G
            requests:
              cpu: 400m
              memory: 512Mi
          serviceAnnotations:    
            service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
            service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s2.small"
    表 1. 参数说明
    字段 说明 默认值
    metadata.name 名称,生成的Kubernetes Service和Deployment名称为istio-{该值}。
    metadata.namespace 命名空间,生成的Kubernetes Service和Deployment所在的命名空间。
    注意 为兼容Istio 1.6及以后的版本,该命名空间必须为istio-system。
    istio-system
    clusterIds 数组类型。将部署入口网关的集群Id,这些集群隶属于当前网格实例所管理。
    cpu.targetAverageUtilization HPA支持cpu的阈值。 80
    env 数组类型。入口网关Pod的环境变量。
    externalTrafficPolicy 表示此服务是否希望将外部流量路由到节点本地或集群范围的端点。有两个可用选项:Cluster(默认)和Local。 Local
    maxReplicas 弹性伸缩的最大副本数。 5
    minReplicas 弹性伸缩的最小副本数。 1
    ports 数组类型。入口网关Pod定义的端口列表。例如:
    • name: status-port port: 15020 targetPort: 15020
    • name: http2 port: 80 targetPort: 80
    • name: https port: 443 targetPort: 0
    • name: tls port: 15443 targetPort: 15443
    replicaCount 副本数。 1
    resources 入口网关Pod的资源配置。
    • limits:
      • cpu: '2'
      • memory: 2G
    • requests:
      • cpu: 200m
      • memory: 256Mi
    sds.enabled 是否启用SDS。 false
    sds.resources 如果启用SDS,对应的Pod的资源配置。
    • requests:
      • cpu: 100m
      • memory: 128Mi
    • requests:
      • cpu: 2000m
      • memory: 1024Mi
    secretVolumes 入口网关Pod所使用到的secret挂载卷,例如:
    • name: myexample-customingressgateway-certs
    • secretName: istio-myexample-customingressgateway-certs
    • mountPath: /etc/istio/myexample-customingressgateway-certs
    serviceType 入口网关的服务类型,可以是LoadBalancer、Nodeport或者ClusterIP。 LoadBalancer
    serviceAnnotations 入口网关服务的Annotation定义。例如:service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
    serviceLabels 入口网关服务的Label定义。
    podAnnotations 入口网关Pod的Annotation定义。
    rollingMaxSurge 滚动更新过程中运行操作期望副本数的最大Pod数,可以为绝对数值,也可以为百分数。 "100%"
    rollingMaxUnavailable 滚动更新过程中不可用的最大Pod数,可以为绝对数值,也可以为百分数。 "25%"
    overrides 当clusterIds指定了2个或以上的集群时,可以针对特定的集群指定不同于上述参数定义的配置值,配置值为Map类型。
    说明
    • key: 本次定义的clusterIds中某一个集群Id。
    • value:支持serviceAnnotations、resources、replicaCount参数的赋值。
  2. 使用kubectl切换到服务网格实例对应的kubeconfig环境下,请参见通过kubectl连接ASM实例
  3. 创建命名空间myexample,请参见新建命名空间
  4. 在kubectl中执行kubectl apply -f myexample-customingressgateway.yaml命令,创建自定义入口网关。

执行结果

添加入口网关之后,可登录容器服务控制台查看详情。

查看新添加入口网关的服务信息。

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,单击服务
  5. 服务页面,从命名空间下拉列表中选择myexample
  6. 单击目标服务操作列的详情,查看新添加入口网关的服务信息。

查看新添加入口网关的Pod信息。

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的应用管理
  4. 在工作负载页面单击容器组页签。
  5. 容器组页面,从命名空间下拉列表中选择myexample
  6. 单击目标Pod操作列的详情,查看新添加入口网关的Pod信息。