背景
阿里云服务网格ASM可以简化服务治理,保障服务间通信的认证安全以及提供网格可观测性能力等需求,降低开发与运维的工作负担。对于网络插件类型为Terway的阿里云容器服务 ACK集群作为数据面集群的场景,阿里云服务网格ASM支持集成应用型负载均衡实例(ALB)。
前提条件
-
创建阿里云服务网格ASM企业版实例。
-
创建网络插件类型为Terway阿里云容器服务 ACK实例。
步骤1 为阿里云容器服务 ACK实例安装ALB Ingress Controller组件
-
若需要创建集群,请在组件配置配置向导页面,在Ingress字段右侧选择ALB Ingress。
步骤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
场景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****
执行以下命令,创建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 。
用户讨论群: