对于处在数据面且网络插件类型为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组件
若需要新建集群,请在组件配置页面,将Ingress设置为ALB Ingress。具体操作,请参见创建Kubernetes托管版集群和创建Kubernetes专有版集群。
若已创建集群,但未安装ALB Ingress Controller组件,请安装ALB Ingress Controller组件。具体操作,请参见管理组件。
步骤二:部署测试应用
添加集群到ASM。
登录ASM控制台。
在左侧导航栏,选择 。
在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
在网格详情页面左侧导航栏,选择 。
单击添加,选择符合条件的ACK集群,单击确定。
部署测试应用。
在网格详情页面左侧导航栏,选择 。
单击default命名空间右侧自动注入列下的启用Sidecar自动注入。在弹出框中单击确定。
执行以下命令,使用数据面集群的KubeConfig来创建Bookinfo示例。更多信息,请参见部署应用到ASM实例。
kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/platform/kube/bookinfo.yaml
步骤三:创建ASM网关
在网格详情页面左侧导航栏中单击ASM网关,单击新建,创建一个负载均衡类型为私网访问、端口为80的ASM网关。其余参数配置信息,请参见创建入口网关服务。
步骤四:创建Istio资源
本文将以创建的网关资源和虚拟服务进行后续测试。
创建网关规则。
在网格详情页面左侧导航栏,选择 。
在网关规则页面单击创建。设置完成后,单击预览,查看网关规则对应的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: - '*'
创建虚拟服务并设置路由。
在网格详情页面左侧导航栏,选择 。
在虚拟服务页面单击创建,为bookinfo-gateway网关设置虚拟服务配置。设置完成后,单击预览,查看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网关
在负载均衡控制台获取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支持的地域与可用区,请参见支持的地域与可用区。
执行如下命令,创建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。Port端口和前面创建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
预期输出如下,可以看到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
访问ASM网关。
方式一:通过上一步获取到的Ingress实例的地址访问ASM网关
http://alb-xxxx.xxxx.alb.aliyuncs.com/productpage
。方式二:登录ALB控制台,通过ALB公网地址访问ASM网关。如果ALB已绑定域名,也可以通过域名进行访问。