我正在使用nginx入口在Kubernetes上运行2个特定部署的pod(副本)。也可以使用Web套接字进行服务。
在2个窗格中,我删除了一个窗格,因此当1处于就绪状态时,它将重新开始创建。在这之间,我尝试打开URL,并收到错误504网关超时。
根据我的理解,流量必须从Kubernetes服务转移到“就绪”状态窗格。我想念什么吗?
先谢谢了。
如果有任何错误,这是我的入口
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
答案 0 :(得分:1)
服务不能保证100%的正常运行时间,尤其是在只有两个Pod的情况下。根据您请求的时间,可能会出现多种结果之一。
在将pod标记为notReady之前,尝试打开URL。在这种情况下,您的服务将请求转发到即将终止的Pod。由于Pod即将终止,并且Web服务器正在关闭,因此Pod不再能够响应,因此Nginx会以504进行响应。也有可能已经通过该Pod启动了会话,并且由于{{ 1}}。
一旦第二个Pod处于终止状态,您就发送一个请求。您的主要pod无法处理100%的请求,因此响应速度不够快,因此nginx返回错误。
在任何情况下,最好的选择是检查nginx入口容器日志以查看为什么返回504,以便进一步调试它。
请注意,如上所述,服务仅包含标记为“就绪”的Pod,但这不能保证始终正确地满足100%的请求。任何时候由于任何原因卸下吊舱时,总有可能返回5xx错误。拥有更多的Pod可以减少返回错误的几率,但很少会完全消除几率。