Istio 请求身份验证 - 获取结果为 404 的 Cors

Istio Request Authentication - getting Cors with result 404

这是我请求的身份验证,

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name:prod-authenticator
  namespace: prod
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  jwtRules:
  - issuer: https://securetoken.google.com/<project-id>
    jwksUri: https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com

我的AuthorizationPolicy是这样的,

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name:prod-authorized-api
 namespace: prod
spec:
 action: ALLOW
 rules:
 - from:
   - source:
        requestPrincipals: ["*"]

 - to:
    - operation:
        paths: ["/user/ping"]

下面帮助我排除没有有效令牌的健康路径(/user/ping)。

我的虚拟服务是

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: user-svc-vs
  namespace: prod
spec:
  hosts:
  - gateway.xxxx.com
  gateways:
  - istio-system/prod-gateway
  http:
  - match:
    - uri:
        prefix: /pop
    route:
    - destination:
        host:user-svc.prod.svc.cluster.local 

但是当检查时我可以看到只有健康 api 得到 200 其余的都得到 404,当检查浏览器时我看到

从源 'https://<>' 访问 'https://' 处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否 'Access-Control-Allow-Origin' header 出现在请求的资源上。

在虚拟服务中,我尝试添加“corsPolicy”但没有任何效果。

尝试过的示例虚拟服务示例是

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings-route
spec:
  hosts:
  - ratings.prod.svc.cluster.local
  http:
  - route:
    - destination:
        host: ratings.prod.svc.cluster.local
        subset: v1
    corsPolicy:
      allowOrigins:
      - exact: https://example.com
      allowMethods:
      - POST
      - GET
      allowCredentials: false
      allowHeaders:
      - X-Foo-Bar
      maxAge: "24h"

<<以上不是我们的例子,但我已经复制了,但我应用了我当前的环境,但仍然没有运气!任何人都可以帮忙吗,为此奋斗了一整天:)

CORS 飞行前请求是由浏览器自动发出的 HTTP OPTIONS 请求,请参阅 this site for details

因此,允许 OPTIONS 在您的 AuthorizationPolicy 中调用以允许飞行前请求。

- to:
    - operation:
        methods: ["OPTIONS"]