微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kubernetes Ingress特定的APP504网关超时60秒

如何解决Kubernetes Ingress特定的APP504网关超时60秒

我们有一个环境,该环境具有k8s + Rancher 2(3个节点)和一个外部Nginx,根据此文档,该外部Nginx仅将连接转发到k8s集群:https://rancher.com/docs/rancher/v2.x/en/installation/k8s-install/

在此环境中运行的特定应用程序中,当我们执行POST(因为此POST需要大约3至4分钟才能完成)时,它会在60秒后被消息“ 504 Gateway Time-Out”打断。我尝试应用特定的注释来更改超时,如下所示,但无济于事:

应用程序入口:

apiVersion: extensions/v1beta1
kind: Ingress
Metadata:
  name: api-loteamento-spring-hml
  annotations:
    Nginx.ingress.kubernetes.io/proxy-connect-timeout: "3600"
    Nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    Nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    Nginx.ingress.kubernetes.io/server-snippet: "keepalive_timeout 3600s;client_body_timeout 3600s;client_header_timeout 3600s;"
  labels:
    run: api-loteamento-spring-hml
spec:
  rules:
  - host: hml-api-loteamento-sp.gruposfa.bla.bla
    http:
      paths:
      - backend:
          serviceName: api-loteamento-spring-hml
          servicePort: 80

我还尝试使用以下参数创建Global ConfigMap,但也没有成功:

[rancher@srv-rcnode01 ssl]$ kubectl get pods -n ingress-Nginx
NAME                                    READY   STATUS    RESTARTS   AGE
default-http-backend-67cf578fc4-lcz82   1/1     Running   1          38d
nginx-ingress-controller-7jcng          1/1     Running   11         225d
nginx-ingress-controller-8zxbf          1/1     Running   8          225d
nginx-ingress-controller-l527g          1/1     Running   8          225d
[rancher@srv-rcnode01 ssl]$ kubectl get pod nginx-ingress-controller-8zxbf -n ingress-Nginx -o yaml |grep configmap
    - --configmap=$(POD_NAMESPACE)/Nginx-configuration
    - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
    - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
[rancher@srv-rcnode01 ~]$ cat global-configmap.yaml
apiVersion: v1
data:
  client-body-timeout: "360"
  client-header-timeout: "360"
  proxy-connect-timeout: "360"
  proxy-read-timeout: "360"
  proxy-send-timeout: "360"
kind: ConfigMap
Metadata:
  name: Nginx-configuration

并申请:

kubectl apply -f global-configmap.yaml

访问入口容器并检查Nginx.conf,我发现注释是根据应用程序块内设置的参数创建的:

[rancher@srv-rcnode01 ~]$ kubectl -n ingress-Nginx exec --stdin --tty nginx-ingress-controller-8zxbf -- /bin/bash

然后查看Nginx.conf

keepalive_timeout 3600s;client_body_timeout 3600s;client_header_timeout 3600s;

# Custom headers to proxied server
            
            
            proxy_connect_timeout                   3600s;
            proxy_send_timeout                      3600s;
            proxy_read_timeout                      3600s;

在“ server”配置块中的Nginx.conf文件开头,我注意到它具有认的60秒超时值:

# Custom headers to proxied server
            
            proxy_connect_timeout                   5s;
            proxy_send_timeout                      60s;
            proxy_read_timeout                      60s;

在这种情况下,我的问题是这些值是否可能干扰此问题,以及如何在k8s中更改这些值?

有人经历过这种情况或什么事情可以给我一个北方吗?

谢谢!

解决方法

Custom ConfigurationNginx Documentation中提到了您想要实现的目标。建议使用ConfigMap

$ cat configmap.yaml
apiVersion: v1
data:
  proxy-connect-timeout: "10"
  proxy-read-timeout: "120"
  proxy-send-timeout: "120"
kind: ConfigMap
metadata:
  name: ingress-nginx-controller

curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/docs/examples/customization/custom-configuration/configmap.yaml \
    | kubectl apply -f -

如果Configmap更新,NGINX将重新加载新配置。

此后,在Ingress controller窗格中,您应该看到类似以下内容的条目:

8 controller.go:137] Configuration changes detected,backend reload required.
8 controller.go:153] Backend successfully reloaded.

但是,请记住,不建议对Nginx使用更高的超时值。这些信息可以在Nginx Ingress - proxy-connect-timeout中找到:

设置与代理服务器建立连接的超时。 请注意,此超时通常不能超过75秒。

其他信息:

1。。有时,当Nginx Ingress无法加载新配置时,您会发现如下日志:

controller.go:149"] - Unexpected failure reloading the backend": Invalid PID number "" in "/tmp/nginx/pid"

要修复此问题,只需重启Ingress pod

2。。如果您不喜欢默认设置,则可以在Go language中创建一个config template

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。