K8s Ingress-Nginx ConfigMap 修正完整指南

一、先搞懂:Ingress 网关的 ConfigMap 是干嘛的?

它是 ingress-nginx 的全局配置文件,作用:

  • 设置全局超时时间
  • 设置客户端上传大小
  • 开启 gzip
  • 配置 SSL 协议
  • 配置 worker 进程、连接数
  • 开启真实 IP
  • 配置代理缓冲区
    一句话:网关全局行为都在这里控制

二、第一步:找到网关 ConfigMap

1. 查看 ConfigMap 名称

bash 复制代码
kubectl get configmap -n ingress-nginx

你会看到:

复制代码
nginx-configuration

这就是全局配置 ConfigMap


三、第二步:编辑 ConfigMap

bash 复制代码
kubectl edit configmap nginx-configuration -n ingress-nginx

打开后长这样:

yaml 复制代码
apiVersion: v1
data:
  # 这里是配置项
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: ingress-nginx

四、第三步:企业级标准配置

把下面这段直接粘贴到 data: 下面 ,这是企业生产通用最优配置

yaml 复制代码
data:
  # 1. 全局最大上传大小
  proxy-body-size: "500m"

  # 2. 全局超时
  proxy-connect-timeout: "10"
  proxy-send-timeout: "30"
  proxy-read-timeout: "30"

  # 3. 真实客户端IP(必须开)
  use-forwarded-headers: "true"
  forwarded-for-header: "X-Forwarded-For"
  real-ip-header: "X-Real-IP"

  # 4. SSL 安全配置
  ssl-protocols: "TLSv1.2 TLSv1.3"
  ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256"
  hsts: "true"
  hsts-max-age: "31536000"
  hsts-include-subdomains: "true"

  # 5. Nginx 性能优化
  worker-processes: "auto"
  worker-connections: "65535"
  keepalive-timeout: "60"
  keepalive-requests: "100"

  # 6. Gzip 压缩
  gzip-types: "text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript"
  gzip-vary: "true"

  # 7. 忽略不合法主机头
  server-tokens: "false"

保存退出

vi 编辑器:
ESC → :wq → 回车


五、第四步:让配置生效(关键)

方法1:优雅重启(推荐,不影响业务)

bash 复制代码
kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx

方法2:查看是否生效

bash 复制代码
kubectl get pods -n ingress-nginx

看到 AGE 刷新、Pod 重建 → 成功。


六、如何验证 ConfigMap 真的生效了?

1. 进入网关容器查看 nginx 配置

bash 复制代码
kubectl exec -it -n ingress-nginx <ingress-nginx-pod名> -- bash

2. 查看nginx.conf

bash 复制代码
cat /etc/nginx/nginx.conf | grep client_max_body_size
cat /etc/nginx/nginx.conf | grep proxy_read_timeout

出现你配置的值 → 生效成功


七、最常见需要修改的 8 个配置

1. 文件上传大小限制(解决 413)

yaml 复制代码
proxy-body-size: "500m"

2. 后端服务慢导致超时(解决 504)

yaml 复制代码
proxy-read-timeout: "60"

3. 后端拿不到真实IP

yaml 复制代码
use-forwarded-headers: "true"
real-ip-header: "X-Real-IP"

4. 开启 HTTPS 强制 HSTS

yaml 复制代码
hsts: "true"

5. 性能低、并发上不去

yaml 复制代码
worker-processes: "auto"
worker-connections: "65535"

6. 隐藏 Nginx 版本号

yaml 复制代码
server-tokens: "false"

7. 开启 gzip 压缩

yaml 复制代码
gzip-types: "text/plain text/css application/json..."

8. 禁用不安全 SSL 协议

yaml 复制代码
ssl-protocols: "TLSv1.2 TLSv1.3"

八、修改 ConfigMap 不生效?99% 是这 4 个原因

1. 没重启 ingress-nginx 控制器

必须执行重启命令才会加载新配置

bash 复制代码
kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx

2. 改错了 ConfigMap

一定要改:

复制代码
-n ingress-nginx
name: nginx-configuration

3. 配置项名称写错

ingress-nginx 配置名称严格区分大小写,写错不生效。

4. 配置值格式错误

例如:

  • 正确:proxy-body-size: "500m"
  • 错误:proxy-body-size: 500

九、安全操作规范

  1. 先备份
bash 复制代码
kubectl get configmap nginx-configuration -n ingress-nginx -o yaml > backup-cm.yaml
  1. 再编辑
bash 复制代码
kubectl edit configmap nginx-configuration -n ingress-nginx
  1. 再优雅重启
bash 复制代码
kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx
  1. 验证
bash 复制代码
kubectl get pods -n ingress-nginx

十、一句话总结

  1. Ingress 全局配置在:nginx-configuration
  2. 命令:kubectl edit configmap nginx-configuration -n ingress-nginx
  3. 修改后必须重启控制器
相关推荐
yunson_Liu3 小时前
aws EKS集群pvc存储扩容
k8s·aws
张3233 天前
k8s etcd备份恢复
数据库·k8s·etcd
脑子加油站5 天前
kubernetes安装部署流程
k8s·安全架构
SilentSamsara5 天前
Kubernetes 网络模型:CNI 插件与 Pod 间通信的底层实现
网络·云原生·容器·架构·kubernetes·k8s
久绊A6 天前
在K8s中构建Apache服务的弹性伸缩防线
k8s
梵得儿SHI7 天前
SpringCloud 生产级落地:Docker 容器化 + K8s 编排部署全攻略(含完整 yaml + 避坑指南)
docker·云原生·kubernetes·k8s·springcloud·微服务部署·java 后端
Minla9 天前
kubectl常用命令别名设置(linux|windows)
linux·运维·服务器·k8s
SilentSamsara9 天前
etcd 运维:数据一致性、备份恢复与性能调优
运维·服务器·数据库·kubernetes·kubectl·k8s·etcd
SilentSamsara10 天前
存储卷体系:EmptyDir/HostPath/PV/PVC/StorageClass 的选型决策树
服务器·微服务·云原生·容器·架构·kubernetes·k8s
SilentSamsara10 天前
Service 与 Ingress:从 ClusterIP 到云厂商 ALB 的完整流量路径
linux·运维·服务器·微服务·kubernetes·k8s·运维开发