运行 多 pod 的 nginx 入口 504 超时
nginx ingress 504 timeout with running multi pod
我是 运行 Kubernetes 上带有 nginx ingress 的特定部署的 2 个 pod(副本)。服务也使用网络套接字。
我删除了 2 个 pod 中的一个 pod,因此当 1 个处于就绪状态时它又开始创建。在此期间,我尝试打开 URL 并收到错误 504 网关超时。
据我了解,流量必须从 Kubernetes 服务转移到就绪状态 pod。我是否遗漏了什么请告诉我?
提前致谢。
如果有错误,这里是我的入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: core-ingress
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: core-prod
nginx.ingress.kubernetes.io/proxy-body-size: 50m
nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/websocket-services: core
nginx.org/websocket-services: core
spec:
tls:
- hosts:
- app.wotnot.io
secretName: core-prod
rules:
- host: example.io
http:
paths:
- backend:
serviceName: core
servicePort: 80
服务不能保证 100% 的正常运行时间,特别是如果只有 2 个 pods。根据您提出请求的时间,可能会出现多种结果之一。
您尝试在 pod 标记为 notReady 之前打开 URL。在这种情况下,您的服务会将请求转发给即将终止的 Pod。由于 pod 即将终止并且网络服务器正在关闭,因此 pod 不再能够响应,因此 nginx 以 504 响应。也有可能会话已经与该 pod 启动并且由于 sigterm
。
一旦第二个 pod 处于终止状态,您就发送一个请求。您的主 pod 因处理 100% 的请求而超负荷工作,因此响应速度不够快,因此 nginx returns 出错。
在任何情况下,您最好的选择是检查 nginx 入口容器日志以查看返回 504 的原因,以便您可以进一步调试它。
请注意,如上所述,服务只包括 pods 标记为就绪,但是,这并不能保证 100% 的请求将始终得到正确处理。任何时候由于任何原因关闭 pod 时,总是有可能返回 5xx 错误。拥有更多的 pods 会降低返回错误的几率,但很少会完全消除几率。
我是 运行 Kubernetes 上带有 nginx ingress 的特定部署的 2 个 pod(副本)。服务也使用网络套接字。
我删除了 2 个 pod 中的一个 pod,因此当 1 个处于就绪状态时它又开始创建。在此期间,我尝试打开 URL 并收到错误 504 网关超时。
据我了解,流量必须从 Kubernetes 服务转移到就绪状态 pod。我是否遗漏了什么请告诉我?
提前致谢。
如果有错误,这里是我的入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: core-ingress
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: core-prod
nginx.ingress.kubernetes.io/proxy-body-size: 50m
nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/websocket-services: core
nginx.org/websocket-services: core
spec:
tls:
- hosts:
- app.wotnot.io
secretName: core-prod
rules:
- host: example.io
http:
paths:
- backend:
serviceName: core
servicePort: 80
服务不能保证 100% 的正常运行时间,特别是如果只有 2 个 pods。根据您提出请求的时间,可能会出现多种结果之一。
您尝试在 pod 标记为 notReady 之前打开 URL。在这种情况下,您的服务会将请求转发给即将终止的 Pod。由于 pod 即将终止并且网络服务器正在关闭,因此 pod 不再能够响应,因此 nginx 以 504 响应。也有可能会话已经与该 pod 启动并且由于
sigterm
。一旦第二个 pod 处于终止状态,您就发送一个请求。您的主 pod 因处理 100% 的请求而超负荷工作,因此响应速度不够快,因此 nginx returns 出错。
在任何情况下,您最好的选择是检查 nginx 入口容器日志以查看返回 504 的原因,以便您可以进一步调试它。
请注意,如上所述,服务只包括 pods 标记为就绪,但是,这并不能保证 100% 的请求将始终得到正确处理。任何时候由于任何原因关闭 pod 时,总是有可能返回 5xx 错误。拥有更多的 pods 会降低返回错误的几率,但很少会完全消除几率。