Kubernetes的nginx-ingress-controller刷新nginx的配置滞后十分钟导致504

Tags: kubernetes_problem 

目录

现象

Kubernetes集群上的应用在重新部署的之后,频繁出现504错误,查询nginx日志发现是nginx到upstream超时。

进一步比对发现,引发超时的upstream的ip是已经被删除的pod的ip,nginx的配置更新严重滞后,长达10分钟,并且三台ingress-controller的延迟情况不相同。

开始分析

查看ingress-controller自身的日志没有遇到可以信息。

查看kube-controlle-manager日志,pod重建很及时,没有异常。

查看kube-apiserver日志,发现有下面的错误:

May 11  W0511 12:16:48.055669   12085 mastercount.go:135] Resetting endpoints for master service "kubernetes" to &{ } {kubernetes  default /api/v1/namespaces/
May 11  W0511 12:16:58.126750   12085 mastercount.go:135] Resetting endpoints for master service "kubernetes" to &{ } {kubernetes  default /api/v1/namespaces/
May 11  I0511 12:16:58.672825   12085 trace.go:76] Trace[448669459]: "List /api/v1/pods" (started: 2019-05-11 12:16:58.140742684 +0800 CST m=+9321924.400299946
May 11  Trace[448669459]: [457.075423ms] [457.00572ms] Listing from storage done
May 11  I0511 12:16:58.951538   12085 trace.go:76] Trace[1102411702]: "List /api/v1/pods" (started: 2019-05-11 12:16:58.159402971 +0800 CST m=+9321924.41896043
May 11  Trace[1102411702]: [765.172941ms] [765.006482ms] Listing from storage done
May 11  I0511 12:16:59.051044   12085 trace.go:76] Trace[649259613]: "List /api/v1/pods" (started: 2019-05-11 12:16:58.164831739 +0800 CST m=+9321924.424389018
May 11  Trace[649259613]: [846.233181ms] [846.171476ms] Listing from storage done
May 11  I0511 12:16:59.098335   12085 trace.go:76] Trace[1034542772]: "List /api/v1/pods" (started: 2019-05-11 12:16:58.214100403 +0800 CST m=+9321924.47365766
May 11  Trace[1034542772]: [871.610482ms] [871.492514ms] Listing from storage done
May 11  I0511 12:17:06.662729   12085 trace.go:76] Trace[1008287935]: "List /api/v1/pods" (started: 2019-05-11 12:17:05.83139885 +0800 CST m=+9321932.090956328
May 11  Trace[1008287935]: [816.830054ms] [816.678248ms] Listing from storage done
May 11  I0511 12:17:06.665535   12085 trace.go:76] Trace[1786067911]: "List /api/v1/pods" (started: 2019-05-11 12:17:06.001922322 +0800 CST m=+9321932.26147957
May 11  Trace[1786067911]: [649.532267ms] [649.401272ms] Listing from storage done
May 11  W0511 12:17:08.264020   12085 mastercount.go:135] Resetting endpoints for master service "kubernetes" to &{ } {kubernetes  default /api/v1/namespaces/
May 11  W0511 12:17:18.322626   12085 mastercount.go:135] Resetting endpoints for master service "kubernetes" to &{ } {kubernetes  default /api/v1/namespaces/
May 11  I0511 12:17:22.821647   12085 trace.go:76] Trace[1751175724]: "List /api/v1/pods" (started: 2019-05-11 12:17:22.316292977 +0800 CST m=+9321948.57585028
May 11  Trace[1751175724]: [491.955722ms] [491.885932ms] Listing from storage done

重点是“Resetting endpoints for master service “kubernetes” ”,kubernetes集群服务的endpoint在不停的被重置,网上找了一下说是因为没有使用–apiserver-count=N

验证问题

检查问题集群中的kube-apiserver,确实没有使用–apiserver-count指定apiserver个数。稳妥起见,没有立即添加这个参数,而是将另外三台apiserver暂时关停,只保留一个apiserver。

这时候,pod的变更能够迅速被ingress-controller感知到,并且三台ingress的配置文件几乎是在同一时间被更新,更新滞后的问题消失。


kubernetes_problem

  1. kubernetes ingress-nginx 启用 upstream 长连接,需要注意,否则容易 502
  2. kubernetes ingress-nginx 的 canary 影响指向同一个 service 的所有 ingress
  3. ingress-nginx 启用 tls 加密,配置了不存在的证书,导致 unable to get local issuer certificate
  4. https 协议访问,误用 http 端口,CONNECT_CR_SRVR_HELLO: wrong version number
  5. Kubernetes ingress-nginx 4 层 tcp 代理,无限重试不存在的地址,高达百万次
  6. Kubernetes 集群中个别 Pod 的 CPU 使用率异常高的问题调查
  7. Kubernetes 集群 Node 间歇性变为 NotReady 状态: IO 负载高,延迟严重
  8. Kubernetes的nginx-ingress-controller刷新nginx的配置滞后十分钟导致504
  9. Kubernetes的Nginx Ingress 0.20之前的版本,upstream的keep-alive不生效
  10. Kubernetes node 的 xfs文件系统损坏,kubelet主动退出且重启失败,恢复后无法创建pod
  11. Kubernetes的Pod无法删除,glusterfs导致docker无响应,集群雪崩
  12. Kubernetes集群node无法访问service: kube-proxy没有正确设置cluster-cidr
  13. Kubernetes集群node上的容器无法ping通外网: iptables snat规则缺失导致
  14. Kubernetes问题调查: failed to get cgroup stats for /systemd/system.slice
  15. Kubelet1.7.16使用kubeconfig时,没有设置--require-kubeconfig,导致node不能注册
  16. Kubelet从1.7.16升级到1.9.11,Sandbox以外的容器都被重建的问题调查
  17. Kubernetes: 内核参数rp_filter设置为Strict RPF,导致Service不通
  18. Kubernetes使用过程中遇到的一些问题与解决方法
  19. Kubernetes集群节点被入侵挖矿,CPU被占满
  20. kubernetes的node上的重启linux网络服务后,pod无法联通
  21. kubernetes的pod因为同名Sandbox的存在,一直无法删除
  22. kubelet升级,导致calico中存在多余的workloadendpoint,node上存在多余的veth设备
  23. 使用petset创建的etcd集群在kubernetes中运行失败
  24. Kubernetes 容器启动失败: unable to create nf_conn slab cache
  25. 未在calico中创建hostendpoint,导致开启隔离后,在kubernetes的node上无法访问pod
  26. calico分配的ip冲突,pod内部arp记录丢失,pod无法访问外部服务
  27. kubernetes的dnsmasq缓存查询结果,导致pod偶尔无法访问域名
  28. k8s: rbd image is locked by other nodes
  29. kuberntes的node无法通过物理机网卡访问Service

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球