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. 修改后必须重启控制器
相关推荐
m0_525724722 小时前
Jenkins共享库实现流水线复用
自动化·k8s·devops
菜地里的小菜鸟7 天前
failed to get imageFs info: non-existent label “docker-images
k8s·failedtogetimagefsin·k8s报错
菜地里的小菜鸟8 天前
kubectl debug
k8s·kubectldebug
腾飞开源10 天前
01_K8s干货笔记之认识K8s
运维·笔记·云原生·容器·kubernetes·k8s·容器化部署
小匠石钧知13 天前
02_在多个RockyLinux10虚拟机上安装k8s集群
云原生·容器·kubernetes·k8s
ShirleyWang01219 天前
让headlamp控制台能访问
linux·服务器·python·k8s·k3s
spider_xcxc19 天前
K8s 部署学习笔记
docker·容器·kubernetes·云计算·k8s
ShirleyWang01219 天前
Day02 K3s NGF(Nginx Gateway Fabric)单 Worker 环境网关更新与故障处置 SOP
linux·服务器·python·k8s·k3s
ShirleyWang01219 天前
DAY01 K3s 私有化部署排障复盘与 SOP
linux·服务器·k8s·k3s·企业部署
XUHUOJUN23 天前
AKS 不是安装在 Windows Server 上,而是运行在 Windows Server 之上的 Azure 平台能力
windows·架构·k8s·azure local·azure stack