ASM网关在缩容或滚动重启时,会删除网关Pod而导致少量流量损失。启用SLB连接优雅下线功能后,即使删除网关Pod,现有连接在一定时间内仍能正常传输,流量将不会有损失。本文介绍如何使用SLB连接优雅下线功能。
前提条件
- 已创建ASM实例,且版本为企业版或旗舰版。具体操作,请参见创建ASM实例。
- 已添加集群到ASM实例。
步骤一:启用SLB优雅下线功能
您可以根据实际情况,在新建网关时或为已有网关启用SLB优雅下线功能。
新建网关时启用SLB优雅下线功能
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在入口网关页面,单击创建。
- 在创建页面,选择部署集群,设置负载均衡类型为公网访问,在新建负载均衡下选择负载均衡规格,设置网关副本数为10,其他配置项保持默认。关于配置项的说明,请参见创建入口网关服务。
- 单击高级选项,选中SLB 优雅下线,配置连接超时时间(秒),然后单击创建。
配置项 说明 SLB 优雅下线 选中后,当SLB停用时,将不会对网关业务产生影响。 连接超时时间(秒) SLB移除网关Pod后,会等待配置的连接超时时间,然后再断开与Pod的连接。配置该参数,可以给网关Pod提供一个缓冲时间,来处理现有的连接。网关Pod默认优雅下线时间为30s,SLB侧配置的超时时间通常不应该超过30s。
为已有网关启用SLB优雅下线功能
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在入口网关页面,单击目标网关的名称。
- 在网关详情页面的高级选项区域,单击SLB优雅下线右侧的
图标,选中SLB 优雅下线,配置连接超时时间(秒),然后单击确认。
步骤二:部署示例应用
- 获取集群KubeConfig并通过kubectl工具连接集群。
- 使用以下内容,创建httpbin.yaml。
apiVersion: v1 kind: ServiceAccount metadata: name: httpbin --- apiVersion: v1 kind: Service metadata: name: httpbin labels: app: httpbin service: httpbin spec: ports: - name: http port: 8000 targetPort: 80 selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: serviceAccountName: httpbin containers: - image: docker.io/kennethreitz/httpbin imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80
- 执行以下命令,部署httpbin应用。
kubectl apply -f httpbin.yaml -n default
步骤三:创建虚拟服务和网关规则
- 创建虚拟服务。
- 创建网关规则。
- 验证路由配置是否成功。
步骤四:验证启用SLB连接优雅下线功能后的效果
- 根据您使用的操作系统,安装并下载轻量级压测工具hey的对应版本。具体操作,请参见hey。以下为各个操作系统对应的hey版本:
- Linux 64-bit:hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
- Mac 64-bit:hey-release.s3.us-east-2.amazonaws.com/hey_darwin_amd64
- Windows 64-bit:hey-release.s3.us-east-2.amazonaws.com/hey_windows_amd64
- 缩容ASM网关。
- 查看启用SLB连接优雅下线功能前后的流量损失情况。
执行以下命令,以200并发,50000请求数请求httpbin应用。
hey -c 200 -n 50000 -disable-keepalive http://{ASM网关IP}/
类型 结果分析 未启用SLB优雅下线功能 输出结果如下: Status code distribution: [200] 49747 responses Error distribution: [253] Get "http://47.55.2xx.xx": dial tcp 47.55.2xx.xx:80: connect: connection refused
50000个请求中仅49747个请求返回200状态码。说明仅49747个请求访问成功,流量有少量的损失。
启用SLB优雅下线功能 输出结果如下:
50000个请求全部返回200状态码。说明50000个请求都访问成功,流量没有损失。............ Status code distribution: [200] 50000 responses