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. 修改后必须重启控制器
相关推荐
老卢聊运维3 小时前
深入理解Pod生命周期:从创建到终止的完整链路
运维·云原生·k8s
恼书:-(空寄1 天前
K8s 网关(Ingress-Nginx/Envoy/云原生网关)20 个高频故障速查手册
云原生·k8s·ingress
w6100104664 天前
CKAD-2026-Secret
运维·k8s·ckad
w6100104665 天前
CKAD-2026-Ingress
运维·k8s·ckad
w6100104665 天前
CKAD-2026-金丝雀部署
linux·运维·服务器·k8s
xmlhcxr7 天前
kubernetes(K8s)基础配置及资源使用详解
docker·云原生·eureka·k8s
cool32009 天前
二进制基于kubeasz部署 K8s 1.34.x 高可用集群实战指南-第二章:HAProxy + Keepalived负载均衡高可用配置(2-4)
容器·k8s·负载均衡
国医中兴10 天前
边缘计算中的存储挑战与解决方案
微服务·云原生·容器·kubernetes·k8s
国医中兴11 天前
分布式存储的缓存优化:从理论到实践
微服务·云原生·容器·kubernetes·k8s