全部产品
Search
文档中心

服务网格 ASM:ASM集成应用型负载均衡实例ALB

更新时间:Jun 05, 2023

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

前提条件

  • 创建ASM企业版实例。具体操作,请参见创建ASM实例

  • 创建网络插件类型为Terway的ACK集群。

  • ACK集群的CCM(Cloud Controller Manager)组件版本大于等于v1.9.3.313-g748f81e-aliyun。更多信息,请参见Cloud Controller Manager

步骤一:为ACK集群安装ALB Ingress Controller组件

步骤二:部署测试应用

  1. 添加集群到ASM。

    1. 登录ASM控制台

    2. 在左侧导航栏,选择服务网格 > 网格管理

    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理

    4. 在网格详情页面左侧导航栏,选择集群与工作负载管理 > Kubernetes集群

    5. 单击添加,选择符合条件的ACK集群,单击确定

  2. 部署测试应用。

    1. 在网格详情页面左侧导航栏,选择网格实例 > 全局命名空间

    2. 单击default命名空间右侧自动注入列下的启用Sidecar自动注入。在弹出框中单击确定

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

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

步骤三:创建ASM网关

在网格详情页面左侧导航栏中单击ASM网关,单击新建,创建一个负载均衡类型私网访问端口80的ASM网关。其余参数配置信息,请参见创建入口网关服务

步骤四:创建Istio资源

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

  1. 创建网关规则。

    1. 在网格详情页面左侧导航栏,选择ASM网关 > 网关规则

    2. 网关规则页面单击创建。设置完成后,单击预览,查看网关规则对应的YAML文件,确认无误后,单击页面下方创建4

      预览效果如下:

      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网关设置虚拟服务配置。设置完成后,单击预览,查看YAML文件,确认无误后,单击页面下方创建96

      预览效果如下:

      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支持的地域与可用区,请参见支持的地域与可用区

  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。Port端口和前面创建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

    预期输出如下,可以看到Ingress实例的地址为alb-xxxx.xxxx.alb.aliyuncs.com

    NAME                  CLASS   HOSTS   ADDRESS                                               PORTS   AGE
    asm-gateway-ingress   alb     *       alb-xxxx.xxxx.alb.aliyuncs.com   80      18h
  2. 访问ASM网关。

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

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

相关文档

使用Terway网络插件