k8s问题详解1:k8s集群上传文件过大导致413 Request Entity Too Large(请求文件实体过大)

++如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情++

各位大佬好,好久不见,向大家汇报下工作,最近小屁重新进军Paas平台运维,开始学习k8s,学习和工作有些忙碌,没时间写博客,后续可以直接给小屁留言,欢迎大家一起讨论

最近遇到了一个问题,解决之后成就感满满,和大家分享一波,事情是这样子的,公司开发在运行服务的时候,测试上传功能,发现报错"413 Request Entity Too Large",搜了一下,是上传文件过大,但是问题来了,2M的文件大吗?返回的是413的报错,在常规系统中正常咱们nginx中在nginx.conf中添加client_max_body_size 100M;就可以解决,但是使用的是k8s的ingress的资源,该如何解决呢?

目录

方案1:单个配置

步骤一、

我尝试了修改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开始,一点一点的积累,慢慢成长,明天你就是大佬!!想学习更多运维知识,关注小屁,让你成为运维老鸟~~~~~

相关推荐
全栈攻略4 小时前
Docker 中 ROS2 工作流 Topic 验证与常用命令指南
运维·docker·容器
名字还没想好☜7 小时前
Docker 数据卷实战:volume、bind mount、tmpfs 到底怎么选,数据持久化与权限坑
运维·docker·容器·kubernetes
唐青枫7 小时前
Docker diff 详解:看清容器里到底改了什么
docker
lpfasd1239 小时前
Docker存储清理与防膨胀实践
运维·docker·容器
weixin_4445793010 小时前
Docker(下):镜像仓库管理
运维·docker·容器
DreamLife☼10 小时前
Agent开发环境搭建完全指南
python·docker·typescript·node·工业知识点
探索云原生10 小时前
Kueue + HAMi vGPU 实战:显存与算力配额管理
docker·ai·云原生·kubernetes·gpu
hoho_1211 小时前
docker中升级mysql到最新版本
mysql·docker·容器
cpolar技术支持11 小时前
Kafka Streams 窗口统计怎么验收:本地跑订单流聚合,用 cpolar 给同事看只读结果页
java·docker·kafka·cpolar·kafka streams
广州灵眸科技有限公司12 小时前
瑞芯微(EASY EAI)RV1126B 星闪使用
运维·人工智能·科技·docker·容器