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"]
这是我请求的身份验证,
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"]