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.

Inicie una sesión en la cuenta. If applicable, target the appropriate resource group. Establezca el contexto para el clúster.

  1. Habilite el complemento istio.

    ibmcloud ks cluster addon enable istio --cluster <cluster_name_or_ID>
    
  2. 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
    
  3. 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-system
    
    kubectl 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:

  • productpage llama a los microservicios details y reviews para llenar la página.
  • details contiene información sobre libros.
  • ratings contiene información sobre clasificación de libros que acompaña a una revisión de un libro.
  • reviews contiene reseñas de libros y llamadas al microservicio ratings. El microservicio reviews tiene varias versiones:
    • v1 no llama al microservicio ratings.
    • v2 llama al microservicio ratings y muestra clasificaciones como estrellas negras, de 1 a 5.
    • v3 llama al microservicio ratings y 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.

  1. Instale BookInfo en el clúster.

    1. 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 -
      
    2. Vaya al directorio del paquete de Istio.
      cd istio-1.24.6
      
    3. Usuarios de Linux y macOS: añada el cliente istioctl a la variable del sistema PATH.
      export PATH=$PWD/bin:$PATH
      
    4. Etiquete el espacio de nombres default para la inyección de complementos. Los pods nuevos que se despliegan en default se crean ahora automáticamente con los contenedores del complemento proxy de Envoy.
      kubectl label namespace default istio-injection=enabled
      
    5. 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
      
    6. Asegúrese de que los pods de microservicios de BookInfo tengan el estado Running.
      kubectl get pods
      
      NAME                                     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
      
  2. Obtenga la dirección pública del equilibrador de carga istio-ingressgateway que expone BookInfo.

    • Clústeres clásicos
      1. 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}')
        
      2. 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}')
        
      3. Cree una variable de entorno GATEWAY_URL que utilice el host y el puerto de entrada de Ingress.
        export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT
        
    • Clústeres de VPC: cree una variable de entorno GATEWAY_URL que 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}')
      
  3. Ejecute curl sobre la variable GATEWAY_URL para comprobar que la app BookInfo se está ejecutando. Una respuesta 200 significa que la app BookInfo se está ejecutando correctamente con Istio.

    curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
    
  4. Consulte la página web de BookInfo en un navegador.

    Mac OS o Linux

    open http://$GATEWAY_URL/productpage
    

    Windows

    start http://$GATEWAY_URL/productpage
    
  5. Intente renovar la página varias veces. Las distintas versiones de la sección reviews se indican con cero estrellas (v1 de reviews), 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.

  1. Configure un servicio virtual para distribuir el 0 % del tráfico a v1, el 90 % del tráfico a v2 y el 10 % del tráfico a v3 de reviews.

    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: 10
    
    kubectl apply -f <filename>.yaml
    
  2. Para ver la página web de BookInfo en un navegador, ejecute open http://$GATEWAY_URL/productpage en Mac OS o Linux, o bien ejecute start http://$GATEWAY_URL/productpage en Windows.

  3. 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).

  4. 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.

    1. Edite el archivo de configuración para el servicio virtual reviews.
      kubectl edit VirtualService reviews
      
    2. Cambie el valor de weight de v2 por 0 y el valor de weight de v3 por 100.
    3. Guarde y cierre el archivo.
  5. 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).

  6. Si tiene habilitados los registros de acceso de envoy: verifique que no existen registros de solicitudes a v2 desde que ha cambiado el archivo YAML para las revisiones VirtualService.

    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.

  1. Suministre una instancia de IBM Cloud Monitoring.

  2. Configure un agente de supervisión en el clúster.

  3. En la consola de supervisión, haga clic en Abrir panel para la instancia que ha aprovisionado.

  4. En la interfaz de usuario de Monitoring, pulse Añadir nuevo panel de control.

  5. Busque Istio y 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.

  1. 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
    
  2. Aplique la política de autenticación a un espacio de nombres.
    kubectl apply -f default.yaml -n <namespace>
    
  3. 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ín host: *.local aplica 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
    
  4. Aplique la regla de destino.
    kubectl apply -f destination-mtls.yaml -n <namespace>
    
  5. 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.