ASM集成应用型负载均衡实例ALB

对于处在数据面且网络插件类型为Terway的阿里云容器服务ACK集群,阿里云服务网格ASM支持集成应用型负载均衡实例(ALB),以此简化服务治理,保障服务间通信的认证安全以及提供网格可观测性能力,降低开发与运维的工作负担。本文主要介绍如何集成服务网格ASM网关与应用型负载均衡实例ALB。

前提条

  • 已添加集群到ASM实例,且ASM实例和ACK集群满足以下要求。

    • ASM实例:规格为企业版。

    • ACK集群:

      • 网络插件类型为Terway。

      • CCM(Cloud Controller Manager)组件版本为v1.9.3.313-g748f81e-aliyun及以上。更多信息,请参见Cloud Controller Manager

      • 已安装ALB Ingress Controller组件。具体操作,请参见管理组件

  • 已为default命名空间启用Sidecar网格代理自动注入。具体操作,请参见启用自动注入

  • 已创建负载均衡CLB类型私网访问服务端口80的入口网关。具体操作,请参见创建入口网关

步骤一:部署测试应用

执行以下命令,使用数据面集群的KubeConfig来创建Bookinfo示例。更多信息,请参见在ASM实例关联的集群中部署应用

kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/platform/kube/bookinfo.yaml

步骤二:创建Istio资源

本文将以创建的网关资源和虚拟服务进行后续测试。

  1. 创建网关规则。

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

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

    3. 网关规则页面,单击创建,进行如下配置。

      4

    4. 在页面下方单击预览,查看网关规则对应的YAML文件,确认无误后,单击确定,然后在创建页面下方,单击创建

      展开查看预览YAML

      apiVersion: networking.istio.io/v1beta1
      kind: Gateway
      metadata:
        name: bookinfo-gateway
        namespace: default
      spec:
        selector:
          istio: ingressgateway
        servers:
          - port:
              number: 80
              name: http
              protocol: HTTP
            hosts:
              - '*'
  2. 创建虚拟服务并设置路由。

    1. 在网格详情页面左侧导航栏,选择流量管理中心 > 虚拟服务

    2. 虚拟服务页面,单击创建,为bookinfo-gateway网关设置虚拟服务配置。

      96

    3. 创建页面下方,单击预览,查看YAML文件,确认无误后,单击确认,然后在创建页面下方,单击创建

      展开查看预览YAML

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: bookinfo
        namespace: default
      spec:
        gateways:
          - bookinfo-gateway
        hosts:
          - '*'
        http:
          - match:
              - uri:
                  exact: /productpage
              - uri:
                  prefix: /static
              - uri:
                  exact: /login
              - uri:
                  exact: /logout
              - uri:
                  prefix: /api/v1/products
            route:
              - destination:
                  host: productpage
                  port:
                    number: 9080
                              

步骤三:创建AlbConfig

场景一:已有ALB标准版实例集成ASM网关

  1. 登录负载均衡控制台,获取ALB实例ID。

  2. 使用以下内容,创建alb-demo.yaml文件。

    将AlbConfig的config.id替换为ALB实例ID。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: default
    spec:
      config:
        id: alb-xxxxx 
        forceOverride: false
  3. 执行以下命令,创建AlbConfig。

    kubectl apply -f alb-demo.yaml

场景二:新建ALB实例集成ASM网关

  1. 使用以下内容,创建alb-demo.yaml文件。更多信息,请参见ALB Ingress快速入门

    此处设置自动创建的ALB名称为alb-demo。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: default
    spec:
      config:
        name: alb-demo
        addressType: Internet
        zoneMappings:
        - vSwitchId: vsw-uf6ccg2a9g71hx8go****
        - vSwitchId: vsw-uf6nun9tql5t8nh15****

    参数

    说明

    spec.config.name

    表示ALB实例名称。

    addressType

    (必选)表示负载均衡的地址类型。取值如下:

    • Internet(默认值):负载均衡具有公网IP地址,DNS域名被解析到公网IP,因此可以在公网环境访问。

    • Intranet:负载均衡只有私网IP地址,DNS域名被解析到私网IP,因此只能被负载均衡所在VPC的内网环境访问。

    zoneMappings

    (必选)用于设置ALB Ingress交换机ID。您需要至少指定两个不同可用区交换机ID,指定的交换机必须在ALB当前所支持的可用区内。关于ALB Ingress支持的地域与可用区,请参见ALB支持的地域与可用区;关于如何创建交换机,请参见创建和管理交换机

  2. 执行如下命令,创建AlbConfig。

     kubectl apply -f alb-demo.yaml

步骤四:创建IngressClass

  1. 创建并拷贝以下内容到alb.yaml文件中,用于创建IngressClass。

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: default
        scope: Cluster
  2. 执行以下命令,创建IngressClass。

    kubectl apply -f alb.yaml

    预期输出:

    ingressclass.networking.k8s.io/alb created

步骤五:配置Ingress

ASM网关的服务创建在istio-system命名空间中。您需要在数据面集群(ACK集群)中的istio-system命名空间中创建Ingress。端口和创建ASM网关时设置的80端口保持一致。

  1. 创建并拷贝以下内容到asm-gateway-ingress.yaml中。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: asm-gateway-ingress
      namespace: istio-system
    spec:
      ingressClassName: alb
      rules:
      - http:
          paths:
          - backend:
              service:
                name: istio-ingressgateway
                port:
                  number: 80
            path: /*
            pathType: ImplementationSpecific
                    
  2. 执行以下命令,创建Ingress。

    kubectl apply -f asm-gateway-ingress.yaml

步骤六:测试访问

  1. 执行以下命令,获取Ingress实例的地址。

    kubectl get ing -n istio-system

    预期输出:

    NAME                  CLASS   HOSTS   ADDRESS                                               PORTS   AGE
    asm-gateway-ingress   alb     *       alb-xxxx.xxxx.alb.aliyuncs.com                        80      18h

    可以看到Ingress实例的地址为alb-xxxx.xxxx.alb.aliyuncs.com

  2. 访问ASM网关。

    • 方式一:通过上一步获取到的Ingress实例的地址访问ASM网关http://alb-xxxx.xxxx.alb.aliyuncs.com/productpage

    • 方式二:登录ALB控制台,通过ALB公网地址访问ASM网关。如果ALB已绑定域名,也可以通过域名进行访问。95

相关文档

使用Terway网络插件