You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Ingress Nginx至1.12.x后无法提供页面的问题咨询

问题:Nginx Ingress升级后*-snippet注解失效导致404及Header配置问题

将Nginx Ingress从1.11.5(Helm Chart版本4.11.5)升级至1.12.2(Helm Chart版本4.12.2)后出现异常:原本正常运行的Ingress资源返回404错误。

  • 移除Ingress模板中的configuration-snippet注解后,页面可正常显示,但全局配置的controller.addHeaders会导致ContentSecurityPolicy Header不符合业务要求。
  • 本次升级是为修复CVE-2025-1097、CVE-2025-1098、CVE-2025-1974、CVE-2025-24513和CVE-2025-24514漏洞,问题大概率与这些安全变更相关。
  • 升级前后均已设置controller.allowSnippetAnnotations: true,但*-snippet注解仍无法正常工作。

需求:

  1. 如何重新启用*-snippet注解?
  2. 受安全变更影响,是否还能继续启用该注解?
  3. 有没有更优的Header配置方式替代当前方案?

关联Ingress配置示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers ContentSecurityPolicy "default-src 'self' 'unsafe-eval' 'unsafe-inline' https://*.pendo.io  https://*.storage.googleapis.com; img-src 'self' https://*.pendo.io data:;frame-src 'self' 'unsafe-eval' 'unsafe-inline' https://*.pendo.io  https://*.storage.googleapis.com blob: data:;object-src 'self' 'unsafe-eval' 'unsafe-inline' https://*.pendo.io  https://*.storage.googleapis.com blob: data:;"
      more_set_headers "Cache-Control: no-store";
    nginx.ingress.kubernetes.io/cors-allow-credentials: "false"
    nginx.ingress.kubernetes.io/cors-allow-headers: Authorization, Content-Type
    nginx.ingress.kubernetes.io/cors-allow-methods: GET, POST, PUT, DELETE, OPTIONS
    nginx.ingress.kubernetes.io/cors-allow-origin: https://<host>,http://localhost:3000
    nginx.ingress.kubernetes.io/cors-max-age: "3600"
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-buffer-size: 64k
    nginx.ingress.kubernetes.io/proxy-buffers-number: "8"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.org/proxy-pass-headers: IDAM_USER,IDAM-USER
    nginx.org/server-tokens: "False"
  labels:
    app: <release-name>
    app.kubernetes.io/managed-by: Helm
  name: <release-name>
  namespace: <namespace>
spec:
  ingressClassName: <ingressclass-name>
  rules:
  - host: <host>
    http:
      paths:
      - backend:
          service:
            name: <release-name>
            port:
              number: 80
        path: /(.*)
        pathType: Prefix
  tls:
  - hosts:
    - ‎<host>
    secretName: <secret-name>

解答

1. 重新启用*-snippet注解的方法

1.12.x版本为修复上述CVE漏洞,对snippet注解的启用逻辑做了双重限制,仅设置controller.allowSnippetAnnotations: true已不足以生效,需补充配置:

  • 在Helm values中新增controller.config.snippets.enabled: true,该参数是新版本新增的全局snippet开关:
    controller:
      allowSnippetAnnotations: true
      config:
        snippets:
          enabled: true
    
  • 若使用自定义IngressClass,需确保该Class关联的controller实例已配置上述两个参数,而非仅依赖全局默认配置。

2. 安全变更下是否仍可启用*-snippet注解

可以启用,但需明确并管控风险:

  • 本次修复的CVE核心是snippet注解存在代码注入风险,因此启用后必须严格限制Ingress资源的创建/修改权限,仅允许可信的ServiceAccount或操作人配置带有snippet注解的Ingress。
  • 多租户环境不建议全局开启snippet功能,可通过IngressClass粒度控制,仅给特定业务集群/命名空间开启对应controller的snippet配置。

3. 更优的Header配置方式

若不想依赖snippet注解,推荐以下替代方案:

方案一:使用官方Header注解

对于Header设置需求,可直接使用nginx.ingress.kubernetes.io/add-header官方注解,支持多行配置多个Header,无需依赖more_set_headers指令:

nginx.ingress.kubernetes.io/add-header: |
  ContentSecurityPolicy "default-src 'self' 'unsafe-eval' 'unsafe-inline' https://*.pendo.io https://*.storage.googleapis.com; img-src 'self' https://*.pendo.io data:;frame-src 'self' 'unsafe-eval' 'unsafe-inline' https://*.pendo.io https://*.storage.googleapis.com blob: data:;object-src 'self' 'unsafe-eval' 'unsafe-inline' https://*.pendo.io https://*.storage.googleapis.com blob: data:;"
  Cache-Control "no-store"

方案二:ConfigMap自定义模板+IngressClass隔离

  • 创建自定义Nginx配置模板,嵌入Header设置逻辑,通过ConfigMap挂载到controller。
  • 针对不同业务需求创建多个IngressClass,每个Class关联不同的ConfigMap模板,实现差异化Header策略,避免全局配置冲突。

方案三:后端服务直接设置Header

若业务允许,直接在后端应用中返回所需Header,完全绕过Ingress层配置,这是最安全且无依赖的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:05:02