出口网关可以让ASM内部服务访问外部服务。本文介绍如何自定义出口网关服务。

前提条件

已创建ASM实例,并添加集群到ASM实例。具体操作,请参见创建ASM实例添加集群到ASM实例

操作步骤

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏单击ASM网关
  5. ASM网关页面,单击部署自定义入口/出口网关
  6. 部署入口网关面板设置命名空间为istio-system,将以下内容复制到文本框中,然后单击确定
    说明 部署出口网关时必须设置命名空间为istio-system,以获取相关的配置信息。如果部署到其他命名空间,在Istio 1.6及以后的版本中,将因为不能获取相关配置而导致出口网关无法正常启动。
    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      name: egressgateway
      namespace: istio-system
    spec:
      maxReplicas: 2
      minReplicas: 1
      ports:
        - name: http2
          port: 80
          targetPort: 80
        - name: http-sw
          port: 11800
          targetPort: 11800
        - name: https
          port: 443
          targetPort: 443
        - name: tls
          port: 15443
          targetPort: 15443
    # - name: config-volume-lua
    #  configMapName: lua-libs
    #  mountPath: /var/lib/lua
    # secretVolumes:
    # - name: myexample-customingressgateway-certs
    #   secretName: istio-myexample-customingressgateway-certs
    #   mountPath: /etc/istio/myexample-customingressgateway-certs  
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 2G
        requests:
          cpu: 200m
          memory: 256Mi
      runAsRoot: false
      serviceType: ClusterIP
      hostNetwork: true
      dnsPolicy: "ClusterFirstWithHostNet"
    表 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的环境变量。
    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
    configVolumes 出口网关Pod所使用到的ConfigMap挂载卷,例如:
    - name: config-volume-lua
      configMapName: lua-libs
      mountPath: /var/lib/lua
    secretVolumes 出口网关Pod所使用到的Secret挂载卷,例如:
    - name: myexample-customingressgateway-c
      secretName: istio-myexample-customingressgateway-certs
      mountPath: /etc/istio/myexample-customingressgateway-certs
    serviceType 出口网关的服务类型,可以是LoadBalancer、Nodeport或者ClusterIP。 ClusterIP
    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参数的赋值。
    hostNetwork 主机网络,当hostNetwork设置为true时,出口网关Pod将使用宿主机的网络。 false
    dnsPolicy DNS策略。关于dnsPolicy的详细介绍,请参见DNS for Services and Pods ClusterFirst

结果验证

出口网关部署成功后,您可以在ACK查看出口网关的服务和Pod信息。

查看出口网关的服务信息

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择网络 > 服务
  5. 服务页面顶部设置命名空间istio-system,在服务列表可以看到出口网关的服务信息。

查看出口网关的Pod信息

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择工作负载 > 容器组
  5. 容器组页面顶部设置命名空间istio-system,在Pod列表可以看到出口网关的Pod信息。