Esta es mi solicitud de autenticación,
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.comMi política de autorización es esta,
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"]Lo siguiente me ayuda a excluir la ruta de salud (/usuario/ping) sin un token válido.
Mi Servicio Virtual es
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.localPero cuando lo verifico, puedo ver que solo la API de salud obtiene 200 descansos, todos obtienen 404, cuando revisé el navegador vi que
El acceso a XMLHttpRequest en 'https://' desde el origen 'https://<>' ha sido bloqueado por la política de CORS: la respuesta a la solicitud de verificación previa no pasa la verificación de control de acceso: sin encabezado 'Access-Control-Allow-Origin' está presente en el recurso solicitado.
En el servicio virtual intenté agregar "corsPolicy" pero nada funcionó.
muestra de servicio virtual probado ejemplo es
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"<<Lo anterior no es nuestro ejemplo, pero lo he copiado, pero lo apliqué con mi entorno actual, ¡pero todavía no tuve suerte! alguien puede ayudar, luchando durante todo el día en esto :)
Las solicitudes previas al vuelo de CORS son solicitudes de OPTIONS HTTP que los navegadores emiten automáticamente; consulte este sitio para obtener más detalles .
Por lo tanto, permita llamadas a OPTIONS en su política de AuthorizationPolicy para permitir solicitudes previas al vuelo.
- to: - operation: methods: ["OPTIONS"]