Kubernetes Ingress(特定应用程序)504网关超时60秒



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

在这个环境中运行的特定应用程序中,当我们执行POST时(因为这个POST大约需要3到4分钟才能完成(,它被消息"POST"中断;504网关超时";60秒后。我试着应用特定的注释来更改超时,如下所示,但没有用:

应用程序入口:

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

我还尝试创建一个全局配置映射,参数如下,但也没有成功:

[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

访问ingress pod并检查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;

我在nginx.conf文件的开头注意到;服务器";配置块是它有默认的60秒超时值:

# Custom headers to proxied server

proxy_connect_timeout                   5s;
proxy_send_timeout                      60s;
proxy_read_timeout                      60s;

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

有没有人经历过这种情况或其他什么,可以给我一个北方?

谢谢!!

自定义配置中的Nginx 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 controllerpod中,您应该会看到以下条目:

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

但是,请记住,Nginx不建议使用更高的超时值。此信息可以在Nginx Ingress-代理连接超时:中找到

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

其他信息:

1.有时,当Nginx Ingress无法加载新配置时,您可以找到如下日志:

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

要修复它,您只需要重新启动Ingress pod

2.如果您不喜欢默认设置,可以在Go language中创建一个配置模板。

要只更新ingress,而不更新整个控制器,请使用以下命令
来源:带注释的高级配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-loteamento-spring-hml
annotations:
nginx.org/proxy-connect-timeout: 3600s
nginx.org/proxy-read-timeout: 3600s
nginx.org/proxy-send-timeout: 3600s
labels:
run: api-loteamento-spring-hml
spec:
ingressClassName: yourIngressClass
rules:
- host: hml-api-loteamento-sp.gruposfa.bla.bla
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: api-loteamento-spring-hml
port:
number: 80

我也面临同样的问题。未按照定义的值设置代理超时值。所以在更改元数据之后,我的问题得到了解决。

Previous Values -
nginx.ingress.kubernetes.io/proxy-connect-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
Working Values -
nginx.org/proxy-connect-timeout: 3600s
nginx.org/proxy-read-timeout: 3600s
nginx.org/proxy-send-timeout: 3600s

相关内容

  • 没有找到相关文章

最新更新