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

时间:2018-04-19 10:06:08

标签: 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

这些更改完全没有效果,加载后,在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";

我的nginx-controller配置使用此图片:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.13.0

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

7 个答案:

答案 0 :(得分:19)

您可以使用annotation 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"
...

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

更新:

我一直遇到同样的问题,没有解决方案。阅读了无数的博客和文档后,发现它们都具有相同的建议解决方案,我发现它们已经更改了命名约定。

它不再用“ proxy-body-size”表示,或者对我来说永远都行不通。

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

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

答案 3 :(得分:0)

我已经尝试了configmap上的proxy-body-size和client-max-body-size,并且滚动重启了nginx控制器容器,当我在容器中grep nginx.conf文件时,它会返回默认值1m 。我正在尝试在Azure Kubernetes服务(AKS)中执行此操作。我正在他们的支持下与某人合作。他们说它不在他们身上,因为这似乎是一个nginx配置问题。

奇怪的是,在其他一些较新的部署中发现这个问题之前,我们在Azure中还没有其他群集。他们提出的最初解决方法是该线程中的内容,但它拒绝更改。

下面是我的配置图:

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  client-max-body-size: 0m
  proxy-connect-timeout: 10s
  proxy-read-timeout: 10s
kind: ConfigMap
metadata:
  annotations:
    control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"nginx-nginx-ingress-controller-7b9bff87b8-vxv8q","leaseDurationSeconds":30,"acquireTime":"2020-03-10T20:52:06Z","renewTime":"2020-03-10T20:53:21Z","leaderTransitions":1}'
  creationTimestamp: "2020-03-10T18:34:01Z"
  name: ingress-controller-leader-nginx
  namespace: ingress-nginx
  resourceVersion: "23928"
  selfLink: /api/v1/namespaces/ingress-nginx/configmaps/ingress-controller-leader-nginx
  uid: b68a2143-62fd-11ea-ab45-d67902848a80

发出滚动重启后: kubectl推出重新启动部署/ nginx-nginx-ingress-controller -n ingress-nginx

使用nginx入口控制器pod来查询值现在显示:

kubectl exec -n ingress-nginx nginx-nginx-ingress-controller-7b9bff87b8-p4ppw cat nginx.conf | grep client_max_body_size
            client_max_body_size                    1m;
            client_max_body_size                    1m;
            client_max_body_size                    1m;
            client_max_body_size                    1m;
            client_max_body_size                    21m;

在哪里尝试更改都无关紧要。在全局或Ingress路由的配置图上……特别是上面的值永远不会改变。

答案 4 :(得分:0)

在修改configmap后,我可以通过重新部署nginx-ingress控制器来修复它。

kubectl patch deployment your_deployment -p "{\"spec\": {\"template\": {\"metadata\": { \"labels\": {  \"redeploy\": \"$(date +%s)\"}}}}}"

答案 5 :(得分:0)

您可以随时进行全局更改并完全禁用它

kubectl -n ingress-nginx patch configmap nginx-configuration -p '{"data": {"proxy-body-size": "0"}}'

或设置为 5tb

kubectl -n ingress-nginx patch configmap nginx-configuration -p '{"data": {"proxy-body-size": "5tb"}}'

答案 6 :(得分:0)

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

  annotations:
    nginx.org/client-max-body-size: "999m"

希望这对其他人有所帮助。