Tráfico HTTP
Esta tarea muestra cómo configurar la política de autorización de Istio de acción ALLOW para el tráfico HTTP en un mesh de Istio.
Antes de empezar
Antes de comenzar esta tarea, haga lo siguiente:
Lea los conceptos de autorización de Istio.
Siga la guía de instalación de Istio para instalar Istio con mTLS habilitado.
Despliegue la application de ejemplo Bookinfo.
Después de desplegar la application Bookinfo, vaya a la página del producto Bookinfo en http://$GATEWAY_URL/productpage. En
la página del producto, puede ver las siguientes secciones:
- Detalles del Libro en el medio de la página, que incluye: tipo de libro, número de páginas, editorial, etc.
- Reseñas del Libro en la parte inferior de la página.
Cuando actualiza la página, la aplicación muestra diferentes versiones de reseñas en la página del producto. La aplicación presenta las reseñas en un estilo round robin: estrellas rojas, estrellas negras o sin estrellas.
Configurar el control de acceso para workloads usando tráfico HTTP
Usando Istio, puede configurar fácilmente el control de acceso para los workloads
en su malla. Esta tarea muestra cómo configurar el control de acceso usando la autorización de Istio.
Primero, configure una política simple de allow-nothing que rechace todas las solicitudes al workload,
y luego otorgue más acceso al workload de forma gradual e incremental.
Ejecute el siguiente comando para crear una política
allow-nothingen el namespacedefault. La política no tiene un camposelector, lo que aplica la política a cada workload en el namespacedefault. El campospec:de la política tiene el valor vacío{}. Ese valor significa que no se permite ningún tráfico, denegando efectivamente todas las solicitudes.$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: allow-nothing namespace: default spec: {} EOFApunte su navegador a la
productpagede Bookinfo (http://$GATEWAY_URL/productpage). Debería ver"RBAC: acceso denegado". El error muestra que la políticadeny-allconfigurada está funcionando como se esperaba, y Istio no tiene ninguna regla que permita ningún acceso a los workloads en la mesh.Ejecute el siguiente comando para crear una política
productpage-viewerpara permitir el acceso con el métodoGETal workloadproductpage. La política no establece el campofromen lasrules, lo que significa que todas las fuentes están permitidas, permitiendo efectivamente a todos los usuarios y workloads:$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: "productpage-viewer" namespace: default spec: selector: matchLabels: app: productpage action: ALLOW rules: - to: - operation: methods: ["GET"] EOFApunte su navegador a la
productpagede Bookinfo (http://$GATEWAY_URL/productpage). Ahora debería ver la página “Bookinfo Sample”. Sin embargo, puede ver los siguientes errores en la página:Error al obtener los detalles del productoError al obtener las reseñas del productoen la página.
Estos errores son esperados porque no hemos otorgado al workload
productpageacceso a los workloadsdetailsyreviews. A continuación, debe configurar una política para otorgar acceso a esos workloads.Ejecute el siguiente comando para crear la política
details-viewerpara permitir que el workloadproductpage, que emite solicitudes utilizando la cuenta de servicecluster.local/ns/default/sa/bookinfo-productpage, acceda al workloaddetailsa través de métodosGET:$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: "details-viewer" namespace: default spec: selector: matchLabels: app: details action: ALLOW rules: - from: - source: principals: ["cluster.local/ns/default/sa/bookinfo-productpage"] to: - operation: methods: ["GET"] EOFEjecute el siguiente comando para crear una política
reviews-viewerpara permitir que el workloadproductpage, que emite solicitudes utilizando la cuenta de servicecluster.local/ns/default/sa/bookinfo-productpage, acceda al workloadreviewsa través de métodosGET:$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: "reviews-viewer" namespace: default spec: selector: matchLabels: app: reviews action: ALLOW rules: - from: - source: principals: ["cluster.local/ns/default/sa/bookinfo-productpage"] to: - operation: methods: ["GET"] EOFApunte su navegador a la
productpagede Bookinfo (http://$GATEWAY_URL/productpage). Ahora, debería ver la página “Bookinfo Sample” con “Detalles del Libro” en la parte inferior izquierda, y “Reseñas del Libro” en la parte inferior derecha. Sin embargo, en la sección “Reseñas del Libro”, hay un errorService de calificaciones no disponible actualmente.Esto se debe a que el workload
reviewsno tiene permiso para acceder al workloadratings. Para solucionar este problema, debe otorgar al workloadreviewsacceso al workloadratings. A continuación, configuramos una política para otorgar al workloadreviewsese acceso.Ejecute el siguiente comando para crear la política
ratings-viewerpara permitir que el workloadreviews, que emite solicitudes utilizando la cuenta de servicecluster.local/ns/default/sa/bookinfo-reviews, acceda al workloadratingsa través de métodosGET:$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: "ratings-viewer" namespace: default spec: selector: matchLabels: app: ratings action: ALLOW rules: - from: - source: principals: ["cluster.local/ns/default/sa/bookinfo-reviews"] to: - operation: methods: ["GET"] EOFApunte su navegador a la
productpagede Bookinfo (http://$GATEWAY_URL/productpage). Debería ver las calificaciones “negras” y “rojas” en la sección “Reseñas del Libro”.¡Felicidades! Ha aplicado con éxito la política de autorización para aplicar el control de acceso para workloads usando tráfico HTTP.
Limpieza
Elimine todas las políticas de autorización de su configuración:
$ kubectl delete authorizationpolicy.security.istio.io/allow-nothing
$ kubectl delete authorizationpolicy.security.istio.io/productpage-viewer
$ kubectl delete authorizationpolicy.security.istio.io/details-viewer
$ kubectl delete authorizationpolicy.security.istio.io/reviews-viewer
$ kubectl delete authorizationpolicy.security.istio.io/ratings-viewer