K8s中使用Ingress访问请求体过大问题解决

ycyin大约 1 分钟云原生k8snginx-ingress

在k8s中使用了ingress-nginx-controller作为Ingress控制器,默认bodysize最大限制为1M,在类似文件上传下载比较大的请求中就会出现失败返回413状态码的情况。如果是nginx-ingress-controller注解是不一样的,它们两的区别可以查看我另一篇文章K8s中的两种nginx-ingress-controller及其区别

解决:在Ingress的metadata中添加如下annotations

nginx.ingress.kubernetes.io/proxy-body-size: 20M

根据Ingress-nginx工作原理:

1)ingress-controller通过和k8s api交互,动态感知集群中ingress规则变化;

2)根据自定义的ingress规则,生成一段nginx的Server配置;

3)在将其写到nginx-ingress-controller的pod里,这个nginx-ingress-controller的pod里运行着一个nginx服务,控制器会把生成的nginx配置写入/etc/nginx/nginx.conf文件中;

4)然后reload一下nginx配置生效。

会在nginx-ingress-controller的pod的/etc/nginx/nginx.conf配置文件对应的server中添加如下配置:

client_max_body_size     20M; #默认为1M

可以使用kubectl cp命令将配置文件copy出来

kubectl cp  ingress-nginx/nginx-ingress-controller-6dc776b7bc-2nfmw:etc/nginx/nginx.conf ~/ycyin/nginx.conf

关于nginx.ingress.kubernetes.io/proxy-body-size注解的更多信息:

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#custom-max-body-sizeopen in new window

关于Ingress中可添加的更多注解:

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/open in new window