Kubernetes Ingress headers 单引号

Kubernetes Ingress headers single quotes

我 运行 遇到了一个非常奇怪的问题,我无法设置 Content-Security-Policy 所需的单引号。我假设我是 运行 一个旧版本的入口,只有在我禁用和 re-enabled 它(microk8s)后才更新。

    nginx.ingress.kubernetes.io/configuration-snippet: |
      add_header Access-Control-Allow-Origin "https://myhost";
      more_set_headers "X-FRAME-OPTIONS: SAMEORIGIN";
      more_set_headers "Content-Security-Policy: default-src 'self' blob:;";

结果:

skipping ingress ...: nginx.ingress.kubernetes.io/configuration-snippet annotation contains invalid word '

我试过使用 x2,使用 \ 转义,用单引号将所有内容括起来并转义,但没有任何效果。如果有人能告诉我如何向 headers 添加单引号,或者我是否可以避免它们并仍然发送 CSP,我将不胜感激。

编辑:需要说明的是,此配置过去适用于旧版本,现在入口版本为 v1.0.5。语法或其他设置都没有问题。

与清理注释输入相关的 1.0.5 中出现了更改。

您可能需要查看 CVE-2021-25742: Ingress-nginx custom snippets。我输入了 粗体 对你感兴趣的部分。

annotation-value-word-blocklist defaults are "load_module,lua_package,_by_lua,location,root,proxy_pass,serviceaccount,{,},',"

Users from mod_security and other features should be aware that some blocked values may be used by those features and must be manually unblocked by the Ingress Administrator.

在我看来,您的问题与 mod_security + above 黑名单有关,其中包含 ' 符号。

更多详情请查看https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#annotation-value-word-blocklist

为了解决您的问题,您应该

  • 将 annotation-value-word-blocklist 的值设置为空字符串 ""

  • 更改 annotation-value-word-blocklist 的值并从其列表中删除 '