gpt4 book ai didi

kubernetes - 预检(选项)返回 403,CORS

转载 作者:行者123 更新时间:2023-12-02 11:33:26 37 4
gpt4 key购买 nike

我们在 Istio 中使用 Kubernetes 并配置了一个虚拟服务:

  http:
- match:
- uri:
prefix: /api
rewrite:
uri: /api
route:
- destination:
host: svc-api
port:
number: 80
subset: stable
weight: 0
- destination:
host: svc-api
port:
number: 80
subset: vnext
weight: 100
corsPolicy: &apiCorsPolicy
allowOrigins:
- exact: '*'
allowMethods:
- GET
- POST
- OPTIONS
allowCredentials: true
allowHeaders:
- "*"
- match:
- uri:
prefix: /
rewrite:
uri: /
route:
- destination:
host: svc-api
port:
number: 80
subset: stable
weight: 0
- destination:
host: svc-api
port:
number: 80
subset: vnext
weight: 100
corsPolicy: *apiCorsPolicy
https://[host]/api/* 提出请求来自浏览器的 OPTIONS 请求失败 'from origin [request] has been blocked by CORS policy' .
在 k8 中描述服务显示了正确的配置。
根据 v 1.6.4 使用 allowOrigins 的结构和 exact而不是 allowOrigin是正确的。
我在这里缺少什么?

最佳答案

这里有几件事值得一提。

最近在旧的 istio 版本中,cors 和 jwt 结合在一起出现了问题,请查看以下链接:

  • Istio 1.5 cors not working - Response to preflight request doesn't pass access control check
  • https://github.com/istio/istio/issues/16171

  • 还有一个 github issue关于那个,在这个 comment社区成员有同样的问题,也许值得为此打开一个新的 github 问题?

    此外还有来自 istio dev @howardjohn 的回答

    Hi everyone. Testing CORS using curl can be a bit misleading. CORS is not enforced at the server side; it will not return a 4xx error for example. Instead, headers are returned back which are used by browsers to deny/accept. https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/cors.html?highlight=cors gives a good demo of this, and https://www.sohamkamani.com/blog/2016/12/21/web-security-cors/#:~:text=CORS%20isn't%20actually%20enforced,header%20in%20all%20its%20responses. is a good explanation.

    So Istio's job here is simply to return these headers. I have added a test showing this works: #26231.



    正如我在评论中提到的,值得一看另一个社区成员配置 here ,因为他有一个工作选项示例,但 POST 有 403 问题。

    我会在你的虚拟服务中改变的几件事
    仅使用 corsPolicy而不是 corsPolicy: &apiCorsPolicy
    corsPolicy:
    除了精确之外,您还可以使用正则表达式,它可以解决通配符的问题。
    allowOrigins:
    - regex: '*'
    关于 //api路径,我认为前缀在这里就足够了,你不需要重写。

    关于kubernetes - 预检(选项)返回 403,CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63356015/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com