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

相关推荐
半梦半醒*6 小时前
k8s——service详解
linux·运维·docker·容器·kubernetes
期待のcode6 小时前
Dockerfile镜像构建
java·docker·容器
回忆是昨天里的海8 小时前
k8s部署dashboard ui管理平台
云原生·容器·kubernetes
guygg888 小时前
Rocky Linux 8.9配置Kubernetes集群详解,适用于CentOS环境
linux·kubernetes·centos
chen_note10 小时前
Kubernetes1.23版本搭建(三台机器)
运维·容器·kubernetes·云计算·kubepi
花落已飘10 小时前
openEuler WSL2容器化开发实战:Docker Desktop集成与应用部署
运维·docker·容器
skyeeeeee13 小时前
kubeadm安装k8s集群
后端·kubernetes
高旭博15 小时前
7. kubernetes资源——service服务
云原生·容器·kubernetes
斯普信专业组16 小时前
Docker 常用命令与时区配置指南
docker·容器·eureka