Kubernetes和Nginx入口控制器出现413错误

Dje*_*ent 13 nginx kubernetes

我正在尝试更改该client_max_body_size值,因此我的nginx入口不会返回413错误.

我测试了一些解决方案.
这是我的测试配置图:

kind: ConfigMap
apiVersion: v1
data:
  proxy-connect-timeout: "15"
  proxy-read-timeout: "600"
  proxy-send-timeout: "600"
  proxy-body-size: "8m"
  hsts-include-subdomains: "false"
  body-size: "64m"
  server-name-hash-bucket-size: "256"
  client-max-body-size: "50m"
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
Run Code Online (Sandbox Code Playgroud)

这些更改完全没有效果,加载后,在nginx控制器日志中我可以看到有关重新加载配置图的信息,但是nginx.conf中的值是相同的:

root@nginx-ingress-controller-95db685f5-b5s6s:/# cat /etc/nginx/nginx.conf | grep client_max                                                                                                       
                        client_max_body_size                    "8m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
                        client_max_body_size                    "1m";
Run Code Online (Sandbox Code Playgroud)

我的nginx-controller配置使用这个图像:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.13.0

如何强制nginx更改值?对于我所有的进入,我需要在全局范围内进行更改.

Ant*_*nko 33

您可以使用注释 nginx.ingress.kubernetes.io/proxy-body-size在Ingress对象中设置max-body-size选项,而不是更改基本ConfigMap.

以下是使用示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-app
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "50m"
...
Run Code Online (Sandbox Code Playgroud)

  • 我想全局设置它,但实际上这种方法更好,因为我的 yaml 文件位于项目存储库中。所以不会丢失。谢谢。 (2认同)
  • @佩恩,这取决于。请参阅/sf/answers/4754658471/。如果 body 太大,需要 `client-max-body-size` 来提高性能。请参阅[注释:客户端主体缓冲区大小](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#client-body-buffer-size) (2认同)

小智 30

nginx.ingress.kubernetes.io/proxy-body-size这里对于正确的注释是否是或存在混淆nginx.org/client-max-body-size。答案是,可能是!

在每个参与者无懈可击的智慧中,世界上存在两种不同的“NGINX入口”。很难分辨你正在运行哪一个,谷歌搜索在区分这里没有什么用处(但有什么新功能)。

如果您使用官方 NGINX Ingress,则正确的注释位于:https: //docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations/

如果您使用的是基于 NGINX 的官方 Kubernetes Ingress,则正确的注释是这样的:https: //kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#custom-max-body-size

如果您的入口实现的 Docker 镜像名称是,k8s.gcr.io/ingress-nginx/controller那么您正在使用官方 Kubernetes 版本。通过排除法,您可以确定您是否正在使用 NGINX 实现。

我希望每个造成这种混乱状态的人都有一个非常糟糕的一天。你们其余的人……保持乐观!


Edo*_*rka 9

也许最近有人被困在这里。我们刚刚发现该注释nginx.ingress.kubernetes.io/proxy-body-size不再被应用,正确的注释是:

  annotations:
    nginx.org/client-max-body-size: "999m"
Run Code Online (Sandbox Code Playgroud)

希望这对其他人有帮助。


小智 6

要进行全局设置,此configmap.md文档可能会有所帮助。原来要设置的变量是proxy-body-size,不是client-max-body-size。

部署舵图时,可以设置--set-string controller.config.proxy-body-size="4m"。


小智 6

更新:

我也遇到过同样的问题,但没有任何解决方案有效。在阅读了无数博客和文档后,所有这些博客和文档都有相同的建议解决方案,我发现他们已经改变了命名约定。

它不再用“proxy-body-size”表示,或者这对我来说永远不起作用。

下面的链接显示要使用的正确 configmap 变量是“client-max-body-size”

https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/configmap-resource/

  • 对于那些阅读的人来说,此评论适用于使用 NGINX 发布的入口控制器。如果您使用 Kubernetes 发布的 NGINX 控制器,则属性名称仍然是“proxy-body-size”。您可以通过注释键来判断这一点,对于 Kubernetes 发布的注释键为“nginx.ingress.kubernetes.io/xxxxx”,而不是由 NGINX 发布的“nginx.org/xxxxx”。 (9认同)
  • 我鼓励 Nginx 和 Kubernetes 的人们聚在一起开发一个共同的规范 (6认同)