gpt4 book ai didi

amazon-web-services - NGINX Ingress 因下载大文件而超时

转载 作者:行者123 更新时间:2023-12-05 05:59:24 24 4
gpt4 key购买 nike

我们正在 k8s pod 中运行 Spring Boot 应用程序,该 pod 托管在带有 EC2 负载均衡器的 NGINX 入口后面。我们的应用偶尔需要发送非常大的文件 (10/20 GB)。我们观察到这个操作在通过ingress查询时偶尔会超时,但是直接查询不会超时。为了更轻松地重现这一点,我们创建了一个简单的端点来请求任意大小的文件 (/files/SIZE)。这就是您在下面看到的内容。

当请求超时时,入口 Controller 似乎没有发布任何日志。从 HTTP 客户端,当请求超时时,我们得到的是:

{ [3744 bytes data]
100 16.4G 0 16.4G 0 0 22.7M 0 --:--:-- 0:12:23 --:--:-- 23.9M* TLSv1.2 (IN), TLS alert, close notify (256):
{ [2 bytes data]
100 16.5G 0 16.5G 0 0 22.7M 0 --:--:-- 0:12:23 --:--:-- 23.6M
* Connection #0 to host INGRESS_URL left intact
* Closing connection 0
curl INGRESS_URL/files/21474836480 -v 31.47s user 26.92s system 7% cpu 12:23.81 total

这是我们入口的配置:

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: USER
namespace: NAMESPACE
selfLink: /apis/extensions/v1beta1/namespaces/NAMESPACE/ingresses/USER
uid: d84f3ab2-7f2c-42c1-a44f-c6a7d432f03e
resourceVersion: '658287365'
generation: 1
creationTimestamp: '2021-06-29T13:21:45Z'
labels:
app.kubernetes.io/instance: USER
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: APP
helm.sh/chart: CHART
annotations:
kubernetes.io/ingress.class: nginx-l4-ext
meta.helm.sh/release-name: USER
meta.helm.sh/release-namespace: NAMESPACE
nginx.ingress.kubernetes.io/client-max-body-size: '0'
nginx.ingress.kubernetes.io/proxy-body-size: '0'
nginx.ingress.kubernetes.io/proxy-buffering: 'off'
nginx.ingress.kubernetes.io/proxy-max-temp-file-size: '0'
nginx.ingress.kubernetes.io/proxy-read-timeout: '1800'
nginx.ingress.kubernetes.io/proxy-send-timeout: '1800'
nginx.ingress.kubernetes.io/websocket-services: core-service
nginx.org/websocket-services: core-service
managedFields:
- manager: Go-http-client
operation: Update
apiVersion: networking.k8s.io/v1beta1
time: '2021-06-29T13:21:45Z'
fieldsType: FieldsV1
fieldsV1:
'f:metadata':
'f:annotations':
.: {}
'f:kubernetes.io/ingress.class': {}
'f:meta.helm.sh/release-name': {}
'f:meta.helm.sh/release-namespace': {}
'f:nginx.ingress.kubernetes.io/client-max-body-size': {}
'f:nginx.ingress.kubernetes.io/proxy-body-size': {}
'f:nginx.ingress.kubernetes.io/proxy-buffering': {}
'f:nginx.ingress.kubernetes.io/proxy-max-temp-file-size': {}
'f:nginx.ingress.kubernetes.io/proxy-read-timeout': {}
'f:nginx.ingress.kubernetes.io/proxy-send-timeout': {}
'f:nginx.ingress.kubernetes.io/websocket-services': {}
'f:nginx.org/websocket-services': {}
'f:labels':
.: {}
'f:app.kubernetes.io/instance': {}
'f:app.kubernetes.io/managed-by': {}
'f:app.kubernetes.io/name': {}
'f:helm.sh/chart': {}
'f:spec':
'f:rules': {}
- manager: nginx-ingress-controller
operation: Update
apiVersion: networking.k8s.io/v1beta1
time: '2021-06-29T13:21:59Z'
fieldsType: FieldsV1
fieldsV1:
'f:status':
'f:loadBalancer':
'f:ingress': {}
spec:
rules:
- host: HOST_URL.com
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: SERVICE_NAME
servicePort: 9081
status:
loadBalancer:
ingress:
- hostname: LOAD_BALANCER_URL

我们正在运行 ingress-nginx@v0.46.0

如果有人对我们的大型下载超时的原因有任何建议,那就太好了!

测试已经完成:

  1. 验证参数确实出现在生成的 nginx.conf 中
  2. 尝试更改 client-body-timeout - 这必须有效。
  3. 在我的本地 minikube 实例上重新创建了整个环境。该应用程序在那里工作。这可能是 Amazon ELB 问题吗?
  4. 更改 spring.mvc.async.request-timeout 无法解决问题。
  5. 此问题仅在进行 HTTPS 调用时出现。 HTTP 调用运行完全正常

最佳答案

我的一个 SpringBoot 应用程序也有类似的问题,问题出在 application.properties 文件中的 Springboot 配置。

spring:
mvc:
async:
request-timeout: 3600000

引用:https://stackoverflow.com/a/43496244/2777988

关于amazon-web-services - NGINX Ingress 因下载大文件而超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68179908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com