nginx-lego 和 autoscaler 缩小后效果不佳

nginx-lego and autoscaler don't play well after scaling down

我在使用 nginx-lego(我知道它已被弃用)和节点自动缩放器时遇到问题。我不得不通过 HPA 手动扩展并临时修补 minReplicas 到一个大的数字。所有扩展都很好,因为 pod 增加而添加了新节点。

流量高峰过后,我将数字设置回正常(真的很低),我可以看到很多错误的网关 502 错误。在我检查了 nginx-lego pod 的日志之后,我能够看到大量请求将发送到 pods 但不再存在(连接被拒绝或没有到主机的路由)。

2018/11/21 17:48:49 [error] 5546#5546: *6908265 connect() failed (113: No route to host) while connecting to upstream, client: 100.112.130.0, server: xxxx.com, request: "GET /public/images/social-instagram.png HTTP/1.1", upstream: "http://X.X.X.X:3000/public/images/social-instagram.png", host: "xxxx.com", referrer: "https://outlook.live.com/"
2018/11/21 17:48:49 [error] 5409#5409: *6908419 connect() failed (113: No route to host) while connecting to upstream, client: 10.5.143.204, server: xxxx.com, request: "GET /public/images/social-instagram.png HTTP/1.1", upstream: "http://X.X.X.X:3000/public/images/social-instagram.png", host: "xxxx.com"
2018/11/21 17:48:49 [error] 5546#5546: *6908420 connect() failed (111: Connection refused) while connecting to upstream, client: 10.5.143.204, server: xxxx.com, request: "GET /public/images/social-facebook.png HTTP/1.1", upstream: "http://X.X.X.X:3000/public/images/social-facebook.png", host: "xxxx.com"

知道哪里出了问题吗?

我想修补 minReplicas 可能不是最好的方法,但我知道会有一个峰值,而且我对如何预扩展整个集群没有更好的想法。

缩小规模时,您的 nginx ingress (lego) 控制器没有更新 nginx.conf 似乎有问题。我会检查 nginx.conf 并查看它是否指向不再存在的后端。

$ kubectl cp <nginx-lego-pod>:nginx.conf . 

如果有些东西看起来很奇怪,您可能必须删除 pod,以便它由管理您的 nginx 入口控制器的 ReplicaSet 创建 pods。

$ kubectl delete <nginx-controller-pod>

然后再检查nginx.conf

另一个问题可能是您的后端服务的端点没有被 Kubernetes 更新,但这与 upscaling/downscaling 您的 lego HPA 没有直接关系。您可以查看:

$ kubectl get ep 

看看有没有不存在的。