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. 修改后必须重启控制器
相关推荐
小白的码BUG之路1 天前
K8S -- 下载安装dashboard
k8s
切糕师学AI3 天前
K8s 滚动更新与 Spring Boot 优雅停机实战:如何做到真正的平滑发布?
spring boot·云原生·容器·kubernetes·k8s
fengkai45455 天前
7、Kubernetes的Ingress&Network&Scheduler
运维·kubernetes·k8s·ingress·network·scheduler
mengge.cloud9 天前
1022小白入门教程(番外筑基)— nerdctl 容器基本功 + K8s 资源编写
linux·网络·云原生·容器·kubernetes·云计算·k8s
上火的金鱼妹10 天前
节点调度优化 + redis 现有问题优化
k8s
fengkai454511 天前
3、Kubernetes的Namespace&Contexts&Pod&YAML格式
运维·容器·kubernetes·k8s·namespace·yaml·pod
meijinmeng11 天前
Karpenter + Keda 让Kuberntes实现动态扩缩容机制方案指南
k8s
.冰块.12 天前
VMware+Ubuntu24.04 kubeadm 部署 K8s 1.30.2 三节点集群
运维·云原生·容器·kubernetes·k8s·容器编排
我不会起名字32214 天前
K8s Ingress 返回 502 但后端日志正常:4 类上游断连与排查链
kubernetes·k8s·ingress·502·keepalive
Eminem8914 天前
18、k8s配置管理中心Secret
k8s