You need to enable JavaScript to run this app. Nginx Ingress Controller 不应用ConfigMap及Ingress注解配置
优惠活动
大模型
产品
解决方案
定价
更多

Nginx Ingress Controller 不应用ConfigMap及Ingress注解配置

问题根因定位

你遇到的配置不生效问题,由项目混淆、部署参数缺失、语法不兼容三类原因导致,具体如下:

核心问题1:混淆了两个完全独立的Nginx Ingress项目

  • 你在1.15版本旧集群使用的是社区维护的ingress-nginx项目,当前部署的是Nginx官方维护的kubernetes-ingress项目(release-1.11版本),二者的配置规则、注解语法、启动参数要求完全不兼容。
    • 社区版ingress-nginx的注解前缀为nginx.ingress.kubernetes.io/,和你旧集群的配置语法一致
    • Nginx官方版的注解前缀为nginx.org/,但语法和社区版完全不同,不存在rewrite-target这类兼容旧写法的参数

核心问题2:部署时缺失关键启动参数,控制器未关联自定义ConfigMap

你直接使用官方提供的默认DaemonSet清单,未给Ingress Controller容器添加指定ConfigMap的启动参数,导致控制器完全不会加载你自定义的nginx-config ConfigMap,全程使用内置默认配置。

核心问题3:Ingress路径、注解语法适配错误

  • 部署Nginx官方版控制器后,仍然沿用社区版的rewrite注解写法,官方版控制器无法识别这类注解
  • 原生Ingress资源中配置的正则路径,没有匹配对应的rewrite规则,直接转发就会触发404错误

具体排查&解决步骤

第一步:确认当前部署的控制器身份

执行以下命令查看控制器的镜像、启动参数,排除项目混淆问题:

kubectl -n nginx-ingress describe daemonset nginx-ingress
  • 若镜像地址为nginx/nginx-ingress,说明是Nginx官方版控制器,后续按官方规则调整
  • 若镜像地址为registry.k8s.io/ingress-nginx/controller,说明是社区版,需重新核对配置项

第二步:为官方版控制器补充ConfigMap关联参数

编辑DaemonSet,在控制器容器的args字段下添加配置加载参数:

args:
  - /nginx-ingress
  # 新增参数,指定要加载的自定义ConfigMap
  - --nginx-configmaps=$(POD_NAMESPACE)/nginx-config
  # 新增参数,指定默认SSL证书Secret
  - --default-server-secret=$(POD_NAMESPACE)/default-server-secret
  • 保存后等待DaemonSet自动滚动更新Pod,再次进入Pod查看/etc/nginx/conf.d下的生成配置,确认你自定义的ignore-invalid-headers、use-forwarded-headers等参数已经写入

第三步:调整Ingress资源的注解与路径规则

针对Nginx官方版控制器,修改现有Ingress配置:

  1. 替换rewrite注解:官方版使用nginx.org/rewrites注解为每个后端服务单独配置转发规则,示例如下:
    metadata:
      annotations:
        # 格式为:服务名-端口=rewrite规则,正则捕获组直接在规则内定义
        nginx.org/rewrites: "serviceName=api rewrite=/$1"
    
  2. 调整请求体大小限制:使用官方版对应的注解nginx.org/client-max-body-size,替换你之前沿用的社区版proxy-body-size类注解,示例:
    metadata:
      annotations:
        nginx.org/client-max-body-size: "100m"
    
  3. 如果你希望完全沿用旧集群的社区版配置语法,建议直接卸载当前的Nginx官方版控制器,重新部署社区版ingress-nginx组件,从根源避免语法不兼容问题。

额外提示:若当前K8s版本为1.22及以上,建议将IngressClass的apiVersion从networking.k8s.io/v1beta1调整为networking.k8s.io/v1,避免版本废弃导致的兼容性问题。

第四步:验证配置生效

修改完成后,查看控制器Pod日志,确认没有配置解析报错:

kubectl -n nginx-ingress logs -l app=nginx-ingress --tail=50

再次进入Pod查看生成的Nginx配置,确认自定义参数、注解规则已经写入后,再测试服务访问是否正常。

内容的提问来源于stack exchange,提问作者ololoepepe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 19:45:06