kubernetes CORS规则nginx-入口规则

de90aj5v  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(4)|浏览(133)

我需要允许来自多个来源的请求:http://localhost:4200http://localhost:4242,等等,在nginx-ingress版本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"

CORS策略已阻止从源“http://localhost:4200 "访问”https://stage.site.com/api/session"处的XMLHttpRequest:当要求的认证模式为'include'时,回应中的'Access-Control-Allow-Origin'信头值不得为万用字符'*'。XMLHttpRequest起始之要求的认证模式是由withCredentials属性控制。

iyr7buue

iyr7buue1#

添加注解以启用CORS

nginx.ingress.kubernetes.io/enable-cors: "true"

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

e5njpo68

e5njpo682#

你可以创建第二个入口,使用不同的域和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"

但$http_origin正在允许每一个原点注意!

w7t8yxp5

w7t8yxp53#

这是一个合理要求的功能: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

envsm3lx

envsm3lx4#

现在,您可以在cors-allow-origin中添加多个原点作为逗号分隔值
示例:

nginx.ingress.kubernetes.io/cors-allow-origin: "https://example.com, https://another.com, http://localhost:8000"

来源:Cors允许多个来源

相关问题