对于处在数据面且网络插件类型为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资源
本文将以创建的网关资源和虚拟服务进行后续测试。
创建网关规则。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在网关规则页面,单击创建,进行如下配置。
在页面下方单击预览,查看网关规则对应的YAML文件,确认无误后,单击确定,然后在创建页面下方,单击创建。
创建虚拟服务并设置路由。
在网格详情页面左侧导航栏,选择 。
在虚拟服务页面,单击创建,为bookinfo-gateway网关设置虚拟服务配置。
在创建页面下方,单击预览,查看YAML文件,确认无误后,单击确认,然后在创建页面下方,单击创建。
步骤三:创建AlbConfig
场景一:已有ALB标准版实例集成ASM网关
登录负载均衡控制台,获取ALB实例ID。
使用以下内容,创建alb-demo.yaml文件。
将AlbConfig的
config.id
替换为ALB实例ID。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: default spec: config: id: alb-xxxxx forceOverride: false
执行以下命令,创建AlbConfig。
kubectl apply -f alb-demo.yaml
场景二:新建ALB实例集成ASM网关
使用以下内容,创建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支持的地域与可用区;关于如何创建交换机,请参见创建和管理交换机。
执行如下命令,创建AlbConfig。
kubectl apply -f alb-demo.yaml
步骤四:创建IngressClass
创建并拷贝以下内容到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
执行以下命令,创建IngressClass。
kubectl apply -f alb.yaml
预期输出:
ingressclass.networking.k8s.io/alb created
步骤五:配置Ingress
ASM网关的服务创建在istio-system命名空间中。您需要在数据面集群(ACK集群)中的istio-system命名空间中创建Ingress。端口和创建ASM网关时设置的80端口保持一致。
创建并拷贝以下内容到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
执行以下命令,创建Ingress。
kubectl apply -f asm-gateway-ingress.yaml
步骤六:测试访问
执行以下命令,获取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
。访问ASM网关。
方式一:通过上一步获取到的Ingress实例的地址访问ASM网关
http://alb-xxxx.xxxx.alb.aliyuncs.com/productpage
。方式二:登录ALB控制台,通过ALB公网地址访问ASM网关。如果ALB已绑定域名,也可以通过域名进行访问。