nginx入口504超时并运行多容器

时间:2019-11-13 15:17:47

标签: docker nginx kubernetes google-kubernetes-engine nginx-ingress

我正在使用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

1 个答案:

答案 0 :(得分:1)

服务不能保证100%的正常运行时间,尤其是在只有两个Pod的情况下。根据您请求的时间,可能会出现多种结果之一。

  1. 在将pod标记为notReady之前,尝试打开URL。在这种情况下,您的服务将请求转发到即将终止的Pod。由于Pod即将终止,并且Web服务器正在关闭,因此Pod不再能够响应,因此Nginx会以504进行响应。也有可能已经通过该Pod启动了会话,并且由于{{ 1}}。

  2. 一旦第二个Pod处于终止状态,您就发送一个请求。您的主要pod无法处理100%的请求,因此响应速度不够快,因此nginx返回错误。

在任何情况下,最好的选择是检查nginx入口容器日志以查看为什么返回504,以便进一步调试它。

请注意,如上所述,服务仅包含标记为“就绪”的Pod,但这不能保证始终正确地满足100%的请求。任何时候由于任何原因卸下吊舱时,总有可能返回5xx错误。拥有更多的Pod可以减少返回错误的几率,但很少会完全消除几率。