自学内容网 自学内容网

【 Kubernetes 集群】Nginx Ingress 偶现 Connection Refused

现象描述

当用户在使用 Nginx Ingress 时,减少 Nginx Ingress Controller 副本过程中,可能出现 Connection Refused 的问题,此时 CLB 批量解绑 RS,TCP/UDP 监听器存量连接停止转发。

可能原因

查看 Nginx Ingress 源码,Nginx Ingress Controller 工作负载没有优雅停机的能力, Pod 在收到 kill signal 之后直接退出。如下图所示:





解决思路

若您使用 TKE Service 优雅停机 的能力,当 Pod 需要被删除时,Pod 能够处理完已接受到的请求,此时入流量关闭,但出流量仍能走通。直到处理完所有已有请求和 Pod 真正删除时,出入流量才进行关闭。待到优雅停机时间结束后,Pod 才被真正的删除。如下图所示:





处理步骤

注意:

仅针对 直连场景 生效,请检查您的集群是否支持直连模式。

步骤1

在 kube-system 命名空间下名为 ****-ingress-nginx-controller 的 Service 里使用 Annotation 标明使用优雅停机。

以下为使用 Annotation 标明使用优雅停机示例,完整 Service Annotation 说明可参见 Service Annotation 说明

 

kind: Service

apiVersion: v1

metadata:

annotations:

service.cloud.tencent.com/direct-access: "true" ## 开启直连 Pod 模式

service.cloud.tencent.com/enable-grace-shutdown: "true" # 表示使用优雅停机

name: my-service

spec:

selector:

app: MyApp

步骤2

在 kube-system 命名空间下名为 ****-ingress-nginx-controller 的 Deployment 里的 wait-shutdown 前面加一段时间的 sleep。示例如下:

 

spec:

template:

spec:

containers:

- name: controller

lifecycle:

preStop:

exec:

command:

- /bin/sh

- -c

- sleep 30 && /wait-shutdown # 在这一行添加 sleep 时间,此处以 30s 为例,具体可按业务请求耗时调整

步骤3

相应增大 terminationGracePeriodSeconds 时长,默认是 30s。在此处示例中 sleep 30,则需相应调大 terminationGracePeriodSeconds 至 60s 即可。


原文地址:https://blog.csdn.net/2403_89316708/article/details/144126727

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!