我正在尝试更改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更改值?对于我所有的进入,我需要在全局范围内进行更改。
答案 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”
答案 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"
希望这对其他人有所帮助。