我们最近从0.8.2升级到0.11.0,并开始获得502个坏网关错误在大约10 mb或更高的大文件上载上,我们将 client_max_body_size 设置为 500m 通过 proxy-body-size 验证它的设置。大约5-6 MB的较小文件正常工作。
日志中没有错误,只有这些消息。
编辑 - [编辑] - [25/3月/2018:02:08:49 0000]" /删除/上传http/1.1" 000 0" https://redacted/" mozilla/5.0 (Windows NT 10.0; Win64; X64(AppleWebkit/537.36(Khtml,像Gecko一样( Chrome/65.0.3325.181 Safari/537.36" 3371263 10.850 [uploader-443] -------
和
[WARN] 30684#30684: *42090客户请求正文被缓冲到一个 临时文件/var/lib/nginx/body/0000000482,客户: 服务器:已编辑,请求:"发布/删除/上传http/1.1",主机: "删除",转介商:" https://redacted/"
代理服务器是tomcat,请求不会到达tomcat。我们尝试增加:
- 超时
- proxy_buffers
- proxy_buffer_size
但是什么都没有。
回到 0.8.2 版本可以解决问题。
更新1:nginx.conf snippet
位置/删除/{
port_in_redirect off;
设置$ PROXY_UPSTREAM_NAME" REDACTED-443";
....
....
client_max_body_size" 500m";
看来,您可能需要在所有入口规则上全球设置更大的文件大小。
这可以通过使用代理机体大小参数即:
来实现。apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 20mb
....
之后,它应该适用于大于10MB的文件。
您是否验证了生成的nginx.conf查看该值是否实际设置?我在Ingress配置本身中使用了它,并且它可以工作(版本0.11(
我建议使用configmap设置:
body-size: "1024m"
proxy-body-size: "1024m"
这是一个完整的示例:https://github.com/mateothegreat/k8-byexampleas-rress-controller/blob/master/manifests/configmap.yaml
要将ConfigMap应用于Ingress-controller部署,您需要将其作为参数传递给容器,例如:https://github.com/mateothegreat/k8-byexampleas-exampleas-controller/master/master/manifests/controller-deployment.yaml#l59
我得到了同样的问题
首先,我得到 413 是通过添加
来解决的nginx.ingress.kubernetes.io/proxy-body-size: "10m"
后来服务开始给出 502 。当查看豆荚时,将文件上传时,吊舱就会被填充。因此,我们需要增加容器的资源限制。
containers:
- name: test-service
image: test-service:develop
imagePullPolicy: Always
resources:
requests:
memory: 256Mi
limits:
memory: 512Mi
我面临着同样的问题。在我们的情况下,这是一个带有UWSGI的Python Django应用程序,并以Nginx设置为入口控制器。当上传大于50MB的文件时,我将获得502,尽管我已经将所有配置添加到了Ingress Controller Config Map中。事实证明,问题是豆荚的活泼调查。当将一个大文件发送到应用程序时,将作为单个线程运行的UWSGI服务器忙于该请求,并将其调查时间淘汰。因此,豆荚会重新启动。我通过从部署中删除活泼的检查来对此进行了测试,并在没有任何问题的情况下上传了文件。