Iniciación a Istio
Iniciación al complemento de Istio gestionado en IBM Cloud® Kubernetes Service. En este conjunto de pasos desplegará la app de ejemplo BookInfo para practicar el uso de diversas funciones de la red de servicios de Istio.
Antes de empezar, consulte el registro de cambios del complemento Istio para obtener información sobre la versión.
Paso 1: Habilitar el complemento de Istio
Configure el complemento de Istio gestionado en el clúster.
-
Habilite el complemento
istio.ibmcloud ks cluster addon enable istio --cluster <cluster_name_or_ID> -
Verifique que el complemento de Istio gestionado tenga el estado
Addon Ready. Tenga en cuenta que el complemento puede tardar unos minutos en estar listo.ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>Salida de ejemplo
Name Version Health State Health Status istio 1.24 normal Addon Ready -
También puede consultar los componentes individuales del complemento para asegurarse de que los pods de Istio se han desplegado.
kubectl get pods -n istio-systemkubectl get svc -n istio-system
Para obtener más información sobre Istio en IBM Cloud Kubernetes Service, consulte Acerca del complemento de Istio gestionado.
Paso 2: Configurar de la app de ejemplo BookInfo
La aplicación de ejemplo BookInfo incluye una configuración básica de Istio para que pueda probar de inmediato las prestaciones de Istio.
Los cuatro microservicios de BookInfo incluyen:
productpagellama a los microserviciosdetailsyreviewspara llenar la página.detailscontiene información sobre libros.ratingscontiene información sobre clasificación de libros que acompaña a una revisión de un libro.reviewscontiene reseñas de libros y llamadas al microservicioratings. El microservicioreviewstiene varias versiones:v1no llama al microservicioratings.v2llama al microservicioratingsy muestra clasificaciones como estrellas negras, de 1 a 5.v3llama al microservicioratingsy muestra clasificaciones como estrellas rojas, de 1 a 5.
La app BookInfo ya está también expuesta en una dirección IP pública mediante una pasarela de Istio. Para ver la arquitectura de BookInfo, consulte la documentación de Istio.
-
Instale BookInfo en el clúster.
- Descargue el paquete de Istio más reciente, que incluye los archivos de configuración para la app de BookInfo.
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.24.6 sh - - Vaya al directorio del paquete de Istio.
cd istio-1.24.6 - Usuarios de Linux y macOS: añada el cliente
istioctla la variable del sistemaPATH.export PATH=$PWD/bin:$PATH - Etiquete el espacio de nombres
defaultpara la inyección de complementos. Los pods nuevos que se despliegan endefaultse crean ahora automáticamente con los contenedores del complemento proxy de Envoy.kubectl label namespace default istio-injection=enabled - Despliegue la aplicación de BookInfo, la pasarela y las reglas de destino.
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml - Asegúrese de que los pods de microservicios de BookInfo tengan el estado
Running.kubectl get podsNAME READY STATUS RESTARTS AGE details-v1-6865b9b99d-7v9h8 2/2 Running 0 2m productpage-v1-f8c8fb8-tbsz9 2/2 Running 0 2m ratings-v1-77f657f55d-png6j 2/2 Running 0 2m reviews-v1-6b7f6db5c5-fdmbq 2/2 Running 0 2m reviews-v2-7ff5966b99-zflkv 2/2 Running 0 2m reviews-v3-5df889bcff-nlmjp 2/2 Running 0 2m
- Descargue el paquete de Istio más reciente, que incluye los archivos de configuración para la app de BookInfo.
-
Obtenga la dirección pública del equilibrador de carga
istio-ingressgatewayque expone BookInfo.- Clústeres clásicos
- Establezca la dirección IP de entrada de Istio como una variable de entorno.
export INGRESS_IP=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') - Establezca el puerto de entrada de Istio como una variable de entorno.
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') - Cree una variable de entorno
GATEWAY_URLque utilice el host y el puerto de entrada de Ingress.export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT
- Establezca la dirección IP de entrada de Istio como una variable de entorno.
- Clústeres de VPC: cree una variable de entorno
GATEWAY_URLque utilice el nombre de host de entrada de Ingress.export GATEWAY_URL=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
- Clústeres clásicos
-
Ejecute curl sobre la variable
GATEWAY_URLpara comprobar que la app BookInfo se está ejecutando. Una respuesta200significa que la app BookInfo se está ejecutando correctamente con Istio.curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage -
Consulte la página web de BookInfo en un navegador.
Mac OS o Linux
open http://$GATEWAY_URL/productpageWindows
start http://$GATEWAY_URL/productpage -
Intente renovar la página varias veces. Las distintas versiones de la sección reviews se indican con cero estrellas (
v1dereviews), estrellas negras (v2) y estrellas rojas (v3).
Para obtener más información sobre cómo direccionar trabajos en Istio, consulte el apartado Visión general de lo que ha sucedido.
Paso 3: Simular un despliegue por fases de BookInfo
Para simular el lanzamiento de una app, puede realizar un despliegue por fases v3 del microservicio reviews de BookInfo.
Cuando termine de probar la app y esté listo para empezar a dirigir tráfico a la misma, puede realizar despliegues graduales a través de Istio. Por ejemplo, puede publicar v3 al 10 % de los usuarios, luego al 20 % de los usuarios,
y así sucesivamente.
-
Configure un servicio virtual para distribuir el 0 % del tráfico a
v1, el 90 % del tráfico av2y el 10 % del tráfico av3dereviews.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 weight: 0 - destination: host: reviews subset: v2 weight: 90 - destination: host: reviews subset: v3 weight: 10kubectl apply -f <filename>.yaml -
Para ver la página web de BookInfo en un navegador, ejecute
open http://$GATEWAY_URL/productpageen Mac OS o Linux, o bien ejecutestart http://$GATEWAY_URL/productpageen Windows. -
Intente renovar la página varias veces. Observe que la página sin estrellas (
v1) ya no se muestra y que la mayoría de las renovaciones de páginas muestran estrellas negras (v2). Solo rara vez se muestra la página con estrellas rojas (v3). -
Cambie la distribución del tráfico de modo que todo el tráfico se envíe solo a
v3. Observe que, en un escenario real, puede desplegar lentamente los cambios de versión modificando la distribución del tráfico primero a 80:20, luego a 70:30, y así sucesivamente hasta que todo el tráfico se dirija solo a la versión más reciente.- Edite el archivo de configuración para el servicio virtual
reviews.kubectl edit VirtualService reviews - Cambie el valor de
weightdev2por0y el valor deweightdev3por100. - Guarde y cierre el archivo.
- Edite el archivo de configuración para el servicio virtual
-
Intente renovar la página de BookInfo varias veces. Observe que la página con estrellas negras (
v2) ya no se muestra y que solo aparece la página con estrellas rojas (v3). -
Si tiene habilitados los registros de acceso de envoy: verifique que no existen registros de solicitudes a
v2desde que ha cambiado el archivo YAML para las revisionesVirtualService.kubectl logs -l app=reviews,version=v2 -c istio-proxy
Paso 4: Supervisar BookInfo con IBM Cloud Monitoring
Utilice uno de los paneles predefinidos de Monitoring Istio para supervisar sus microservicios BookInfo.
Para desplegar agentes de supervisión en el clúster, realice los pasos siguientes.
-
En la consola de supervisión, haga clic en Abrir panel para la instancia que ha aprovisionado.
-
En la interfaz de usuario de Monitoring, pulse Añadir nuevo panel de control.
-
Busque
Istioy seleccione uno de los cuadros de mando predefinidos de Monitoring Istio.
Para obtener más información sobre la referencia a métricas y paneles, la supervisión de los componentes internos de Istio y la supervisión de las implantaciones A/B y canarias de Istio, consulte la entrada del blog Cómo supervisar Istio, la malla de servicios Kubernetes.
Paso 5: Proteger el tráfico interno del clúster mediante la habilitación de mTLS
Habilite el cifrado para las cargas de trabajo en un espacio de nombres para conseguir el TLS mutuo (mTLS) dentro del clúster. El tráfico que direcciona Envoy entre los pods del clúster se cifra con TLS. Istio se encarga de la gestión de certificados para mTLS. Para más información, consulte la documentación de Istio mutual TLS.
- Cree un archivo de política de autenticación que se denomina
default.yaml. Esta política está limitada al espacio de nombres y configura cargas de trabajo en la red de servicios de modo que solo acepten las solicitudes cifradas con TLS. Observe que no se incluyen especificaciones de destino (targets) porque la política se aplica a todos los servicios de la red en este espacio de nombres.apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" spec: mtls: mode: STRICT - Aplique la política de autenticación a un espacio de nombres.
kubectl apply -f default.yaml -n <namespace> - Cree un archivo de reglas de destino llamado
destination-mtls.yaml. Esta política configura las cargas de trabajo de la red de servicios en un espacio de nombres de modo que envíen el tráfico mediante TLS. Observe que el carácter comodínhost: *.localaplica esta regla de destino a todos los servicios de la red.apiVersion: "networking.istio.io/v1beta1" kind: "DestinationRule" metadata: name: "destination-mtls" spec: host: "*.local" trafficPolicy: tls: mode: ISTIO_MUTUAL - Aplique la regla de destino.
kubectl apply -f destination-mtls.yaml -n <namespace> - Si desea conseguir mTLS para las cargas de trabajo de red de servicios en otros espacios de nombres, repita estos pasos para cada espacio de nombres.
Las reglas de destino también se utilizan por motivos no relacionados con la autenticación, como por ejemplo para direccionar el tráfico a diferentes versiones de un servicio. Cualquier regla de destino que cree para un servicio también debe
contener el mismo bloque TLS que está establecido en mode: ISTIO_MUTUAL. Este bloque impide que la regla altere modifique los valores de mTSL de la red que ha configurado en esta sección.