Kubernetes集群中Nginx容器因未知原因接收SIGQUIT信号崩溃
根因分析
该容器持续崩溃的核心原因是存活探针(livenessProbe)协议配置错误,触发Kubernetes主动终止容器运行:
- Pod配置中的livenessProbe指定使用
HTTPS协议访问容器80端口,但你的Nginx容器仅配置了HTTP 80端口监听,没有部署SSL证书、也未开启HTTPS服务。 - 容器日志中3条
\x16\x03\x01开头的400错误请求,就是K8s存活探针发起的HTTPS握手请求,Nginx无法识别这类请求,返回400状态码,被探针判定为探测失败。 - 连续3次探测失败达到设定的
failureThreshold阈值后,K8s会向容器发送SIGQUIT信号终止进程,触发容器重启,反复触发后最终进入CrashLoopBackOff状态。
修复方案
方案一(推荐,适配当前Nginx配置)
直接修改Pod/Deployment的livenessProbe配置,将探测协议从HTTPS改为HTTP即可,修改后的探针配置参考:
livenessProbe: failureThreshold: 3 httpGet: path: / port: 80 scheme: HTTP initialDelaySeconds: 3 periodSeconds: 3 successThreshold: 1 timeoutSeconds: 1
方案二(适配需要HTTPS服务的场景)
如果业务需要Nginx对外提供HTTPS服务,需要同步完成两处配置:
- 修改Nginx配置,添加443端口监听,挂载合法的SSL证书
- 调整存活探针配置:要么将端口改为443保留HTTPS探测,要么保留80端口用HTTP做探测
内容的提问来源于stack exchange,提问作者Casey Flynn
相关产品推荐
相关产品推荐

