ASM Serverless网关是ASM推出的全新服务网格网关形态,更适合应对突发流量,降低计算成本,提升稳定性。相比运行于数据面ACK Kubernetes集群之上的ASM网关形态,ASM Serverless网关具有高稳定性、高弹性和低成本的优势,以Serverless的形式单独部署,并完全由ASM管理,具备独立于ACK Kubernetes集群的高可用性。本文介绍如何使用ASM Serverless网关,以及相关的网关日志以及监控指标介绍。
前提条件
已添加集群到ASM实例,且ASM版本为1.18.0.147或以上。
适用场景
ASM Serverless网关更适合应对突发流量,降低计算成本,提升稳定性。典型的场景包括:
有明显波峰波谷的在线业务:例如在线教育、电商等业务通常有明显的波峰波谷,ASM Serverless网关可以更快速的应对突发流量,显著减少固定资源池的维护,降低计算成本。
多集群场景:例如有两个ACK集群同时加入了某一个ASM实例,ASM Serverless网关并不部署在某个ACK Kubernetes集群中,可以提供独立于Kubernetes集群的高可用性。
步骤一:部署ASM Serverless入口网关
目前仅支持使用YAML创建。与运行于数据面ACK Kubernetes集群之上的ASM网关形态相比,ASM Serverless网关增加了一个注解 asm.alibabacloud.com/managed-by-asm: 'true'
,并且无需填写数据面ACK Kubernetes集群ID。如果需要采集监控指标,可以通过注解 asm.alibabacloud.com/export-metrics
将该网关的监控指标导出到对应的目标数据面ACK Kubernetes集群。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择
。在入口网关页面,单击使用YAML创建,输入网关名称,配置如下YAML,然后单击创建。
apiVersion: istio.alibabacloud.com/v1beta1 kind: IstioGateway metadata: annotations: asm.alibabacloud.com/managed-by-asm: 'true' asm.alibabacloud.com/export-metrics: 'ack-cluster-id' name: ingressgateway namespace: istio-system spec: gatewayType: ingress dnsPolicy: ClusterFirst externalTrafficPolicy: Local hostNetwork: false ports: - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443 replicaCount: 1 resources: limits: cpu: '2' memory: 2G requests: cpu: 200m memory: 256Mi rollingMaxSurge: 100% rollingMaxUnavailable: 25% runAsRoot: true serviceType: LoadBalancer
注意:当前Serverless网关支持LoadBalancer和ClusterIP类型的Service。如果选择了ClusterIP,需要保证客户端与网关Pod网络互相打通,例如Terway网络插件默认同一VPC下的Pod可以互相访问。
步骤二:创建流量规则
创建HTTP域名。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择
。在入口网关页面,单击目标网关,在网关导航栏,单击域名/证书,然后在域名页签,单击创建。
在新建域名页面,配置域名为*,协议为HTTP,端口名称为http,端口为80,然后单击创建。
导入productapge服务。
在网关导航栏,单击上游服务,然后单击导入服务。
在导入服务页签,选择default命名空间,选中productapge,单击图标,然后单击确认。
创建路由规则。
在网关导航栏,单击路由管理,然后单击创建。
在设置路由信息配置向导,配置路由类型为http,命名空间为default,路由名称为productapge,在匹配规则区域,匹配方式选择前缀,匹配内容为/,然后单击下一步。
在设置路由目的地配置向导,配置选择上游服务为productapge,然后单击下一步。
在高级选项配置向导,单击创建。
步骤三:通过Serverless网关访问productpage应用
在浏览器地址栏输入{网关IP地址}/productpage
,可以看到productpage的应用界面。关于如何获取网关,请参见获取入口网关地址。
步骤四:配置Serverless网关的访问日志
配置网关访问日志会导致网关重启,请在业务低峰期操作。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择
。在入口网关页面,在目标网关右侧,单击查看YAML,在YAML输入框中增加注解
asm.alibabacloud.com/aliyun-logs-project: k8s-log-****
,配置日志服务Project。本示例将网关日志采集到ASM对应的LogProject。对应的YAML示例如下:
单击确定,更新Serverless网关。
步骤五:配置HTTPS访问
执行以下命令,生成证书。
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization" openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
创建证书。
创建HTTPS域名。
在左侧导航栏,单击入口网关,单击目标网关,在网关导航栏,单击域名/证书,然后在域名页签,单击创建。
在新建域名页面,配置域名为*,协议为HTTPS,端口名称为https,端口为443,证书选择myexample-credential,选中是否使用TLS保护连接,然后单击创建。
执行以下命令,通过HTTPS协议访问Serverless网关。
curl -k -H Host:aliyun.com --resolve aliyun.com:443:{替换成真实的入口网关IP地址} https://aliyun.com/productpage -I
步骤六:查看Serverless网关日志
FAQ
如何导出Serverless网关的监控指标?
已开启ASM的指标生成和采集,且可以在将监控指标采集到可观测监控Prometheus版。
页面看到指标大盘。具体操作,请参见在Serverless网关的YAML中配置指标导出的annotations,格式为
asm.alibabacloud.com/export-metrics: ${ack-cluster-id}
。该功能仅支持ASM实例版本为1.18.0.147或以上。关于如何升级版本,请参见升级ASM实例。
annotations配置后,会将网关的Service和Endpoint同步到指定的ACK集群,然后在Prometheus的抓取配置中添加对应Endpoint的采集配置即可。
在ARMS控制台,添加Endpoint的采集配置。
- 登录ARMS控制台。
在左侧导航栏,单击
,然后在页面左上角选择目标地域。在实例列表页面,单击Prometheus实例名称,然后在左侧导航栏,单击设置。
在设置页面的设置页签,单击编辑Prometheus.yaml,添加如下配置,然后单击保存。
Serverless网关无法访问后端应用该如何处理?
确保数据面集群的安全组没有拦截来自Serverless网关的流量。
如果返回404、503等错误,请检查流量规则配置及后端服务是否正常运行。