Kubernetes nginx-ingress 应用程序处理的入口控制器 CORS

Kubernetes nginx-ingress ingress controller CORS handled by application

我正在努力让 NGINX 从我的应用程序来回代理 CORS headers。允许的来源由我的 ASP.NET Web 应用程序指定,我想将这些 headers 代理回客户端。在 Kubernetes 外部运行的应用程序可以完美地处理 CORS headers,因此应用程序似乎已正确配置 CORS。据我所知,Kubernetes NGINX 入口控制器似乎不允许我这样做。

我想继续允许我的应用程序处理允许的来源,因此我只需要配置 NGINX 反向代理以传递所有 headers。查看文档 proxy_pass_request_headers 默认设置为 on 。我之前对 NGINX 的理解是,此配置设置是代理到另一台服务器时所必需的,以便 headers 向后和向前传递。

文档中概述的注释 enable-cors 和围绕 CORS 的各种配置选项对我没有多大用处,因为它们假设 Ingress Controller 是允许来源的真实来源。在我的情况下不是。

我原以为这是允许应用程序处理 CORS 的常见请求,但我正在努力寻找解决此问题的方法。

非常感谢任何人可以提供的任何帮助!

更新 - 添加图表

我根据我对这里拓扑的理解创建了一个小图表。这很可能是对过程的过度简化,但希望您能更容易地理解我想要实现的目标。

所以这实际上与我遇到的其他一些问题有关。毕竟 CORS headers 没有被剥离。在进行了大量调试后,我怀疑 CORS 模块没有在典型的 IIS 容器中配置。这是第一个问题。 https://github.com/microsoft/dotnet-framework-docker/issues/625

对于那些感兴趣的人,这里是用于使用 Chocolatey 添加 CORS 的 DockerFile 行:

RUN Set-ExecutionPolicy Bypass -Scope Process -Force; `
    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; `
    iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')); `
    choco install iis-cors-module -y

Kubernetes NGINX 没有剥离 headers 并且确实在正常代理所有 headers。

如果其他人将来遇到类似问题,还有一些其他有趣的花絮: