++如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情++
各位大佬好,好久不见,向大家汇报下工作,最近小屁重新进军Paas平台运维,开始学习k8s,学习和工作有些忙碌,没时间写博客,后续可以直接给小屁留言,欢迎大家一起讨论
最近遇到了一个问题,解决之后成就感满满,和大家分享一波,事情是这样子的,公司开发在运行服务的时候,测试上传功能,发现报错"413 Request Entity Too Large",搜了一下,是上传文件过大,但是问题来了,2M的文件大吗?返回的是413的报错,在常规系统中正常咱们nginx中在nginx.conf中添加client_max_body_size 100M;就可以解决,但是使用的是k8s的ingress的资源,该如何解决呢?
目录
我尝试了修改ingress-nginx-controller的deploy资源,
[方案2:ConfigMap 全局配置](#方案2:ConfigMap 全局配置)
方案1:单个配置
步骤一、
我尝试了修改ingress-nginx-controller的deploy资源,
bash
[root@k8s-devmaster ingress]# cat ingress-nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "1024m" #主要添加了这个参数
deployment.kubernetes.io/revision: "1"
kubectl.kubernetes.io/last-applied-configuration: |
......
不要问这个配置怎么来的,这个配置是用k8s命令导出的,不能全局粘贴,选择适合自己用的配置
验证:进入容器内查看
bash
# 1. 进入 ingress-nginx-controller Pod 终端
kubectl exec -it ingress-nginx-controller-844cff6d86-ng2h4 -n ingress-nginx -- /bin/bash
# 2. 查看 Nginx 主配置或站点配置(两种路径均可)
# 方式A:查看主配置中的默认值(若未通过 Ingress 注解覆盖,显示默认值,通常为1m)
cat /etc/nginx/nginx.conf | grep "client_max_body_size"
[root@k8s-devmaster ingress]# kubectl exec -it ingress-nginx-controller-844cff6d86-ng2h4 -n ingress-nginx -- /bin/bash
k8s-devnode01:/etc/nginx$ cat /etc/nginx/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 1m;
client_max_body_size 1m;
client_max_body_size 21M;
k8s-devnode01:/etc/nginx$ ls /etc/nginx/conf.d/
ls: /etc/nginx/conf.d/: No such file or directory
k8s-devnode01:/etc/nginx$
??刚才进行的配置未生效?
哦原来应该到对应的ingress中去配置
bash
# 1. 编辑目标 Ingress(替换 <你的Ingress名称> 和 <命名空间>)
kubectl edit ingress <你的Ingress名称> -n kyt-ei
# 2. 在 metadata.annotations 中添加注解(示例配置)
metadata:
name: kyt-ei-ingress # 你的Ingress名称
namespace: kyt-ei
annotations:
kubernetes.io/ingress.class: "nginx" # 确保关联当前 ingress-nginx 控制器
nginx.ingress.kubernetes.io/proxy-body-size: "1024m" # 关键注解:添加这行
# 其他已有注解...
spec:
rules: # 你的Ingress规则(域名、路径、后端服务等)
- host: ei.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ei-web-service
port:
number: 80
保存退出之后应用,发现问题解决了。
但是问题来了,如果想要全局生效应该如何配置呢?
方案2:ConfigMap 全局配置
bash
(所有 Ingress 默认生效)
若需所有通过该控制器的 Ingress 都默认支持 1GB 大文件上传,可修改 ingress-nginx的核心 ConfigMap:
# 1. 编辑 ConfigMap(默认命名空间 ingress-nginx,名称 ingress-nginx-controller)
kubectl edit configmap ingress-nginx-controller -n ingress-nginx
# 2. 在 data 字段中添加 proxy-body-size 配置
data:
# 其他已有配置(如 nginx.conf 片段、tcp-services 等)...
proxy-body-size: "1024m" # 全局设置:所有 Ingress 默认使用 1024m
kubectl exec -it ingress-nginx-controller-844cff6d86-ng2h4 -n ingress-nginx -- /bin/bash
查看 nginx.conf 中的默认值是否变为 1024m
cat /etc/nginx/nginx.conf | grep "client_max_body_size" | head -1
root@k8s-devmaster ingress]# kubectl exec -it ingress-nginx-controller-844cff6d86-ng2h4 -n ingress-nginx -- /bin/bash
k8s-devnode01:/etc/nginx$ # 查看 Nginx 主配置中的全局 client_max_body_size
k8s-devnode01:/etc/nginx$ cat /etc/nginx/nginx.conf | grep -A 1 -B 1 "client_max_body_size" | head -20
client_max_body_size 1024m;
client_max_body_size 1024m;
client_max_body_size 1024m;
client_max_body_size 1024m;
client_max_body_size 1024m;
k8s-devnode01:/etc/nginx$ exit
进入容器后发现确实没问题了,到程序上去上传一个大文件,没问题了,文件解决~~~
想成为大佬,就要从小白开始,从0开始,一点一点的积累,慢慢成长,明天你就是大佬!!想学习更多运维知识,关注小屁,让你成为运维老鸟~~~~~