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

相关推荐
東雪蓮☆3 小时前
K8s Ingress 详解与部署实战
linux·运维·kubernetes
聆风吟º3 小时前
无需 VNC / 公网 IP!用 Docker-Webtop+cpolar,在手机浏览器远程操控 Linux
linux·运维·docker
ZLRRLZ4 小时前
【Docker】Docker镜像仓库
docker·容器
知白守黑2677 小时前
docker资源限制
运维·docker·容器
无妄无望11 小时前
docker学习(4)容器的生命周期与资源控制
java·学习·docker
爱宇阳13 小时前
禅道社区版 Docker Compose 服务迁移教程
运维·docker·容器
xzl0413 小时前
docker运行Ubuntu22.04
docker
能不能别报错14 小时前
K8s学习笔记(十九) K8s资源限制
笔记·学习·kubernetes
qq_2642208914 小时前
K8s存储-PV与PVC
云原生·容器·kubernetes