现象描述
当用户在使用 Nginx Ingress 时,减少 Nginx Ingress Controller 副本过程中,可能出现 Connection Refused 的问题,此时 CLB 批量解绑 RS,TCP/UDP 监听器存量连接停止转发。
可能原因
解决思路
若您使用 TKE Service 优雅停机 的能力,当 Pod 需要被删除时,Pod 能够处理完已接受到的请求,此时入流量关闭,但出流量仍能走通。直到处理完所有已有请求和 Pod 真正删除时,出入流量才进行关闭。待到优雅停机时间结束后,Pod 才被真正的删除。如下图所示:


处理步骤
注意
步骤1
在 kube-system 命名空间下名为 ****-ingress-nginx-controller 的 Service 里使用 Annotation 标明使用优雅停机。
kind: ServiceapiVersion: v1metadata:annotations:service.cloud.tencent.com/direct-access: "true" ## 开启直连 Pod 模式service.cloud.tencent.com/enable-grace-shutdown: "true" # 表示使用优雅停机name: my-servicespec:selector:app: MyApp
步骤2
在 kube-system 命名空间下名为 ****-ingress-nginx-controller 的 Deployment 里的 wait-shutdown 前面加一段时间的 sleep。示例如下:
lifecycle:preStop:exec:command:- sleep # 添加 sleep 时间- 30s # 添加 sleep 时间- /wait-shutdown # 在这一行前,添加 sleep 时间