全局配置放在哪里
ingress-nginx 控制器的 ConfigMap(通常名为 ingress-nginx-controller)保存该控制器的全局参数:请求体大小上限、允许的 TLS 协议版本、是否信任转发头、可信代理网段等。它对该控制器下的所有 Ingress 生效,属于平台级配置,改动一次全体受影响,因此要走评审与低峰窗口。单个 Ingress 上如果写了同名注解,注解优先于全局键。
基本信息
| 适用组件 | ingress-nginx 控制器,命名空间通常为 ingress-nginx |
|---|---|
| 对象 | ConfigMap,默认名多为 ingress-nginx-controller |
| 生效方式 | 改完后由控制器加载,部分变更需要重载或滚动重启控制面 Pod |
| 优先级 | Ingress 上的注解优先于全局键,全局键作为默认值 |
| 代表键 | client-max-body-size、ssl-protocols、use-forwarded-headers、proxy-real-ip-cidr |
典型使用场景
- 统一放开上传体积:文件上传类业务把默认请求体上限调大
- 收紧 TLS 配置:限定只允许较新的协议版本,满足安全基线
- 保留真实客户端 IP:在 LB 之后正确使用转发头与可信代理网段
- 排障降噪:打开更详细的访问日志级别定位问题请求
- 连接与超时对齐:统一调整上游超时,避免后端长任务被误切断
查看与修改
查看与修改
kubectl -n ingress-nginx get cm ingress-nginx-controller -o yaml | head -30
kubectl -n ingress-nginx edit cm ingress-nginx-controller
kubectl -n ingress-nginx rollout restart deploy/ingress-nginx-controller # 必要时重启控制面
kubectl -n ingress-nginx logs deploy/ingress-nginx-controller --tail=50 # 确认加载无报错常用键(示例)
常用键(示例)
data:
client-max-body-size: "50m" # 请求体上限,过大也带来内存压力
ssl-protocols: "TLSv1.2 TLSv1.3" # 只允许较新协议
use-forwarded-headers: "true" # 信任上游 LB 的转发头
proxy-real-ip-cidr: "10.0.0.0/8" # 可信代理网段,写宽会信任伪造头
proxy-read-timeout: "120" # 上游读超时,配合长任务调整常用键与风险
| 配置键 | 作用 | 风险点 |
|---|---|---|
| client-max-body-size | 请求体上限 | 过小导致上传报错,过大增加内存与带宽压力 |
| ssl-protocols | 允许的 TLS 协议版本 | 加回旧协议会拉低整体安全基线 |
| use-forwarded-headers | 是否采用转发头 | 与可信代理网段不匹配时来源判断失真 |
| proxy-real-ip-cidr | 可信代理网段 | 写宽会接受伪造的真实来源 |
| proxy-read-timeout | 上游读超时 | 与后端实际处理时间不一致会误切断连接 |
ConfigMap 的 data 必须是字符串:数字与布尔值都加引号,避免被解析成非预期类型后控制器加载失败。
多数键改完由控制器自动重载,重载瞬间可能有极短的连接抖动;大流量集群安排在低峰变更,并提前准备好回滚键值。