背景
阿里云服务网格ASM可以简化服务治理,保障服务间通信的认证安全以及提供网格可观测性能力等需求,降低开发与运维的工作负担。对于网络插件类型为Terway的阿里云容器服务 ACK集群作为数据面集群的场景,阿里云服务网格ASM支持集成应用型负载均衡实例(ALB)。
前提条件
- 创建阿里云服务网格ASM企业版实例。
- 创建网络插件类型为Terway阿里云容器服务 ACK实例。
- ACK实例的CCM(Cloud Controller Manager)组件版本>=v1.9.3.313-g748f81e-aliyun。
步骤1 为阿里云容器服务 ACK实例安装ALB Ingress Controller组件
- 若需要创建集群,请在组件配置配置向导页面,在Ingress字段右侧选择ALB Ingress。
- 若已创建集群,且未安装ALB Ingress Controller组件。关于如何安装ALB Ingress Controller组件,请参见管理组件。
步骤2 部署测试应用
添加集群到ASM
在阿里云服务网格ASM控制台,集群与工作负载管理-> Kubernetes集群。添加符合条件的阿里云容器服务ACK实例。
部署测试应用
在阿里云服务网格ASM控制台,网格实例->全局命名空间中,为default命名空间开启sidecar自动注入。
参考部署应用到ASM实例,使用数据面集群的kubeconfig来创建bookinfo示例。
kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/platform/kube/bookinfo.yaml
步骤3 创建ASM网关
在阿里云服务网格ASM控制台,ASM网关进行创建。选择负载均衡类型为私网访问。测试应用需要设置端口为80。
步骤4 创建Istio资源
在本测试应用中,我们创建网关资源和虚拟服务来方便测试。
创建网关规则
在流量管理,网关规则中,创建示例应用的网关规则:
预览如下所示:
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网关设置虚拟服务配置。
设置路由
预览效果如下:
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
步骤5 创建AlbConfig
对于使用ALB的用户,分2种场景,分别是已有ALB实例和需要新建创建ALB的场景。和阿里云服务网格ASM的集成过程的区别点在于AlbConfig的配置。
场景1:已有ALB标准版实例集成ASM网关
对于已有ALB实例(目前仅支持标准版)的情况,在ALB控制台获取ALB实例id,修改AlbConfig的config中的id为ALB实例id。将一下内容保存为alb-demo.yaml
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: default spec: config: id: alb-xxxxx forceOverride: false
执行以下命令,创建AlbConfig
kubectl apply -f alb-demo.yaml
场景2:新建ALB实例集成ASM网关
参考文档,在数据面集群ACK中配置AlbConfig,这里我们设置自动创建的ALB名称为alb-demo,将一下内容保存为alb-demo.yaml。
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
步骤6 创建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
步骤7 配置Ingress
阿里云服务网格ASM网关的服务创建在istio-system命名空间中,我们需要在到数据面集群(阿里云容器服务ACK集群)中的istio-system命名空间中创建Ingress。port端口和前面创建ASM网关时设置的80端口保持一致。
将以下内容保存为asm-gateway-ingress.yaml,执行kubectl apply -f 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
步骤8 测试访问
执行
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实例的地址。
可以通过 http://alb-xxxxxx.xxxx.alb.aliyuncs.com/productpage来访问ASM网关。
也可以登录ALB控制台,通过ALB公网地址访问ASM网关。如果ALB已绑定域名,也可以通过域名进行访问。
相关参考
ACK网络插件选择
总结
阿里云服务ASM能够和应用型负载均衡实例ALB的场景无缝集成,满足多种使用场景。
作为业内首个全托管Istio兼容的阿里云服务网格产品ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM产品是基于社区Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。从2022年4月1日起,阿里云服务网格ASM正式推出商业化版本, 提供了更丰富的能力、更大的规模支持及更完善的技术保障,更好地满足客户的不同需求场景, 详情可见产品介绍:https://www.aliyun.com/product/servicemesh 。
用户讨论群: