CORS 规则 nginx-ingress 规则

dez*_*nto 12 cors kubernetes kubernetes-ingress

我需要允许来自多个来源的请求:http://localhost:4200http://localhost:4242,等,nginx的上,入口版本1.7.1。但我无法为多个来源做到这一点,因为nginx.ingress.kubernetes.io/cors-allow-credentials: true不会与nginx.ingress.kubernetes.io/cors-allow-origin: "*". 它会导致浏览器生成 CORS 错误。也许有人有避免此错误的解决方案?

这是我的配置

 annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS, DELETE"
nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,X-CustomHeader,X-LANG,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Api-Key,X-Device-Id,Access-Control-Allow-Origin"
Run Code Online (Sandbox Code Playgroud)

从源“ http://localhost:4200 ”访问“ https://stage.site.com/api/session ”的XMLHttpRequest已被 CORS 策略阻止:“Access-Control-Allow-Origin”的值当请求的凭据模式为“包含”时,响应中的标头不得为通配符“*”。XMLHttpRequest 发起的请求的凭证模式由 withCredentials 属性控制。

Pie*_*ros 9

您可以创建第二个 Ingress,具有不同的域和 cors 源,指向相同的目的地。不是最好的解决方案,但它有效。

或者:

        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/configuration-snippet: |
           more_set_headers "Access-Control-Allow-Origin: $http_origin";
        nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
        nginx.ingress.kubernetes.io/cors-allow-methods: PUT, GET, POST, 
           OPTIONS, DELETE, PATCH
        nginx.ingress.kubernetes.io/enable-cors: "true"
Run Code Online (Sandbox Code Playgroud)

但注意 $http_origin 允许每个来源!


F1k*_*1ko 9

这是一个相当要求的功能:https ://github.com/kubernetes/ingress-nginx/issues/5496

作为当前的解决方法,您可以使用以下代码片段为 CORS 定义多个域: https: //github.com/kubernetes/ingress-nginx/issues/5496#issuecomment-662798662

PR 已提交并等待完成。因此,这应该在即将发布的版本之一中本地推出: https: //github.com/kubernetes/ingress-nginx/pull/7134

更新:

正如评论中提到的,该功能已经发布。

以下代码片段解决了该问题:

annotations:
  nginx.ingress.kubernetes.io/enable-cors: "true"
  nginx.ingress.kubernetes.io/cors-allow-origin: "https://example.com, https://another-example.com"
Run Code Online (Sandbox Code Playgroud)

更多信息可以在文档中找到:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#enable-cors

  • 对于任何偶然发现这个答案的人,情况不再是这样,该功能请求已被批准并合并,文档解释了如何执行此操作:https://kubernetes.github.io/ingress-nginx/user-guide/nginx -配置/注释/#enable-cors (2认同)

Nic*_*Ben 6

添加注释以启用CORS

nginx.ingress.kubernetes.io/enable-cors: "true"
Run Code Online (Sandbox Code Playgroud)

请注意,字符串“*”不能用于支持凭据的资源https://www.w3.org/TR/cors/#resource-requests),请尝试使用您的域列表(逗号分隔)而不是 *

  • 逗号分隔列表不起作用。`nginx.ingress.kubernetes.io/cors-allow-origin` 仅支持一个域,否则解析为 '*'。https://github.com/kubernetes/ingress-nginx/issues/5496 (3认同)