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

相关推荐
木雷坞14 小时前
视觉算法环境 Docker 镜像拉取失败排查
运维·人工智能·docker·容器
瀚高PG实验室15 小时前
安全版V4.5版本docker容器license过期问题处理步骤
安全·docker·容器·瀚高数据库
java_logo15 小时前
SiYuan 思源笔记 Docker 部署终极指南:Windows+Linux 双平台
windows·笔记·docker·思源笔记·思源笔记部署·docker部署思源笔记·思源笔记文档
Hello.Reader15 小时前
Ubuntu 上正确安装 Kali 虚拟机、Docker 与 kail 工具指南
linux·ubuntu·docker
筱_智16 小时前
Docker学习-超详细-通俗易懂(从入门到精通)
学习·docker·容器
EAIReport17 小时前
Docker与K8s核心解析:共同性、差异性及实战适配指南
docker·容器·kubernetes
长安链开源社区17 小时前
动手开发 | 如何通过k8s部署长安链
云原生·容器·kubernetes·区块链
江湖有缘17 小时前
容器化部署|Docker搭建Blinko轻量笔记系统
笔记·docker·容器
亚空间仓鼠17 小时前
Kubernetes技术入门与实践(五):DaemonSet与StatefulSet
容器·贪心算法·kubernetes
Dontla17 小时前
kubectl命令介绍(K8s命令行客户端)
云原生·容器·kubernetes