Instalar Istio on GKE

En esta guía, se muestra cómo comenzar a usar el complemento Istio on GKE, incluidas las opciones de instalación para clústeres nuevos y existentes. Puedes instalar el complemento con la herramienta de línea de comandos de gcloud o Google Cloud Console .

Puedes obtener más información sobre el complemento Istio on GKE y si es adecuado para ti en la Descripción general.

Antes de comenzar

Sigue los pasos que se indican a continuación para habilitar la API de Kubernetes Engine:

  1. Consulta la página de Kubernetes Engine en Google Cloud Console.
  2. Crea o selecciona un proyecto.
  3. Espera a que la API y los servicios relacionados se habiliten. Esto puede tomar varios minutos.
  4. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

Asegúrate de tener instaladas las siguientes herramientas de línea de comandos:

  • gcloud se usa para crear y borrar clústeres de Kubernetes Engine, incluida la creación y la actualización de clústeres con el complemento Istio on GKE. gcloud se incluye en el SDK de Google Cloud: sigue las instrucciones para instalarlo y, luego, inicializarlo a fin de que funcione con tus proyectos de GCP. Si tienes una instalación gcloud existente, verifica que tenga al menos la versión 188.0.0:
    gcloud version
    Ten en cuenta que no es necesario instalar gcloud para crear un nuevo clúster habilitado para Istio, ya que puedes usar Google Cloud Console . 101} En su lugar, es útil administrar clústeres existentes y, luego, instalar otras herramientas, como kubectl.
  • kubectl se usa para administrar Kubernetes, el sistema de organización de clúster que usa GKE. Puedes instalar kubectl mediante gcloud:
    gcloud components install kubectl

Establece valores predeterminados para la herramienta de línea de comandos de gcloud

Para ahorrar tiempo cuando escribes las opciones del ID del proyecto y la zona de Compute Engine en la herramienta de línea de comandos de gcloud, puedes establecer valores predeterminados:
gcloud config set project project-id
gcloud config set compute/zone compute-zone

Elige una opción de seguridad.

Hay dos opciones de seguridad predeterminadas posibles en la malla que puedes elegir cuando creas o actualizas un clúster con Istio on GKE. La elección de cada una depende de las necesidades de tu aplicación inicial.

  • mTLS estricta: En este modo de seguridad, Istio aplica la encriptación mutua de TLS (mTLS) entre todos los servicios y componentes del plano de control de la malla de forma predeterminada, a menos que lo anules con destino específico. . Todas las llamadas dentro de la malla están encriptadas y los servicios no aceptarán tráfico sin encriptar.
  • mTLS permisiva: En este modo de seguridad, Istio permite que los servicios de la malla acepten tráfico encriptado y sin encriptar de forma predeterminada, y todos los servicios envíen llamadas sin encriptar. de forma predeterminada. Como con una mTLS estricta, puedes anular esto para servicios específicos. Usa esta opción si tienes servicios que aún deben aceptar tráfico sin encriptar, por ejemplo, si no migraste por completo tus servicios a Istio y recibes tráfico de clientes heredados fuera de la malla. Istio on GKE proporciona este modo en lugar de solo instalar Istio sin seguridad habilitada, ya que facilita la migración a mTLS estricta para mayor seguridad.

Puedes obtener información sobre cómo actualizar las configuraciones predeterminadas de seguridad y configurar aún más la seguridad de Istio en la página sobre cómo actualizar la configuración predeterminada de seguridad a continuación.

Versiones admitidas de clústeres de GKE

La versión de Istio instalada en GKE que se instala cuando creas o actualizas un clúster con Istio on GKE depende de la versión del clúster. Te recomendamos usar una versión de clúster con la versión más reciente de Istio (1.4.10-gke.5). Si usas una versión anterior, actualiza tu clúster en cuanto esté disponible esta versión de Istio on GKE.

Para ver la lista de versiones compatibles, consulta Istio de GKE en versiones.

Instalar Istio on GKE

Puedes instalar Istio on GKE en un clúster nuevo o en un clúster existente. En ambos casos, esto instala el plano de control de Istio. Para aprovechar al máximo las características de Istio, debes insertar los proxies de archivo adicional de Envoy en los pods de tu malla de servicios.

Crea un clúster con Istio on GKE

Te sugerimos crear al menos un clúster de 4 nodos con el tipo de máquina de 2 CPU virtuales cuando uses este complemento. Puedes implementar Istio con la configuración predeterminada del clúster nuevo de GKE, pero esto podría no proporcionar recursos suficientes para explorar aplicaciones de muestra. Ten en cuenta que el complemento Istio on GKE no es compatible con Workload Identity.

Para crear un clúster con Istio on GKE, sigue estos pasos:

Console

  1. Ve a la página de Kubernetes en Cloud Console y selecciona Crear clúster.
  2. En el diálogo Clúster estándar predeterminado, elija la cantidad de nodos y máquinas que prefiera, tenga en cuenta el tamaño de clúster mínimo recomendado para Istio.
  3. En el menú desplegable Versión principal, selecciona una versión de clúster recomendada de Istio en GKE (o una versión compatible si no puedes usar la versión recomendada).
  4. Seleccione Disponibilidad, Herramientas de redes, seguridad y características adicionales para mostrar opciones de configuración adicionales, incluido Istio en GKE.
  5. Selecciona Habilitar Istio (Beta).
  6. Seleccione el modo de seguridad mTLS que desea usar para su clúster en el menú desplegable.
  7. Haz clic en Crear para generar tu clúster.

Línea de comandos

Para crear un clúster de GKE con Istio habilitado y con la TLS mutua aplicada de manera predeterminada, ejecuta este comando y reemplaza CLUSTER_NAME por el nombre del clúster elegido y CLUSTER_VERSION con un Versión de clúster compatible:

gcloud beta container clusters create CLUSTER_NAME \
    --addons=Istio --istio-config=auth=MTLS_STRICT \
    --cluster-version=CLUSTER_VERSION \
    --machine-type=n1-standard-2 \
    --num-nodes=4

O crear un clúster de GKE con Istio habilitado y con mTLS en modo permisivo:

gcloud beta container clusters create CLUSTER_NAME \
    --addons=Istio --istio-config=auth=MTLS_PERMISSIVE \
    --cluster-version=CLUSTER_VERSION \
    --machine-type=n1-standard-2 \
    --num-nodes=4

Agrega Istio on GKE a un clúster existente

Si quieres actualizar un clúster con el complemento, es posible que primero debas cambiar el tamaño de tu clúster para asegurarte de que tienes suficientes recursos para Istio. Como cuando creas un clúster nuevo, sugerimos que haya al menos un clúster de 4 nodos con el tipo de máquina 2 CPU virtuales.

El clúster también debe ejecutar una versión principal de clúster compatible para usar el complemento. Ten en cuenta que el complemento Istio on GKE no es compatible con Workload Identity.

Para actualizar un clúster existente con el complemento Istio on GKE, sigue estos pasos:

Console

  1. Ve a la página de clústeres de Kubernetes en Cloud Console y selecciona el clúster que quieres actualizar.
  2. Selecciona Editar.
  3. En Istio (Beta), seleccione Habilitado para mostrar Istio mTLS (Beta).
  4. Seleccione el modo de seguridad mTLS que desea usar para su clúster en el menú desplegable.
  5. Haz clic en Guardar para actualizar tu clúster.

Línea de comandos

Para agregar Istio con TLS mutua que se aplique de forma predeterminada a un clúster existente, ejecuta este comando y reemplaza CLUSTER_NAME por el nombre del clúster:

gcloud beta container clusters update CLUSTER_NAME \
    --update-addons=Istio=ENABLED --istio-config=auth=MTLS_STRICT

O bien, para agregar Istio con mTLS en modo permisivo a un clúster existente, haz lo siguiente:

gcloud beta container clusters update CLUSTER_NAME \
    --update-addons=Istio=ENABLED --istio-config=auth=MTLS_PERMISSIVE

Ten en cuenta que el comando clusters update puede requerir otros parámetros, según la configuración real del clúster.

Si tienes una aplicación existente en el clúster, puedes averiguar cómo migrarla para que Istio lo administre en la documentación de Istio.

Verifica la instalación

Para verificar que la instalación de Istio on GKE se haya realizado correctamente, sigue estos pasos:

  1. Si acabas de crear un clúster en lugar de actualizar un clúster, verifica que esté activo y en ejecución con una versión de GKE 1.10.6 o superior:
    gcloud container clusters list
    
    El resultado es similar al siguiente:
    NAME        LOCATION       MASTER_VERSION  MASTER_IP      MACHINE_TYPE   NODE_VERSION   NUM_NODES  STATUS
    istio-demo  us-central1-b  1.11.2-gke.15   35.239.252.38  n1-standard-2  1.11.2-gke.15  4          RUNNING
    
  2. Obtén las credenciales para tu clúster nuevo a fin de que puedas interactuar con él con kubectl.
    gcloud container clusters get-credentials CLUSTER_NAME
    
  3. Asegúrate de que los siguientes servicios de Kubernetes estén implementados: istio-citadel, istio-egressgateway, istio-pilot, istio-ingressgateway, istio-policy, istio-sidecar-injector y istio-telemetry (también verás otros servicios implementados). :
    kubectl get service -n istio-system
    
    NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                                                                   AGE
    istio-citadel              ClusterIP      10.47.245.92    <none>        8060/TCP,9093/TCP                                                                                                         12s
    istio-egressgateway        ClusterIP      10.47.248.129   <none>        80/TCP,443/TCP                                                                                                            12s
    istio-galley               ClusterIP      10.47.248.109   <none>        443/TCP,9093/TCP                                                                                                          12s
    istio-ingressgateway       LoadBalancer   10.47.248.117   <pending>     80:31380/TCP,443:31390/TCP,31400:31400/TCP,15011:30221/TCP,8060:32445/TCP,853:30663/TCP,15030:32010/TCP,15031:32633/TCP   12s
    istio-pilot                ClusterIP      10.47.251.133   <none>        15010/TCP,15011/TCP,8080/TCP,9093/TCP                                                                                     12s
    istio-policy               ClusterIP      10.47.255.244   <none>        9091/TCP,15004/TCP,9093/TCP                                                                                               12s
    istio-sidecar-injector     ClusterIP      10.47.240.36    <none>        443/TCP                                                                                                                   12s
    istio-statsd-prom-bridge   ClusterIP      10.47.247.135   <none>        9102/TCP,9125/UDP                                                                                                         12s
    istio-telemetry            ClusterIP      10.47.242.73    <none>        9091/TCP,15004/TCP,9093/TCP,42422/TCP                                                                                     12s
    promsd                     ClusterIP      10.47.241.188   <none>        9090/TCP                                                                                                                  12s
    
  4. Asegúrate de que los pods de Kubernetes correspondientes estén implementados y que todos los contenedores estén en funcionamiento: istio-pilot-*, istio-policy-*, istio-telemetry-*, istio-egressgateway-*, istio-ingressgateway-*, istio-sidecar-injector-* y istio-citadel-*.

    kubectl get pods -n istio-system
    
    NAME                                        READY   STATUS      RESTARTS   AGE
    istio-citadel-555d845b65-xfdmj              1/1     Running     0          2d
    istio-cleanup-secrets-8x2pl                 0/1     Completed   0          2d
    istio-egressgateway-667d854c49-9q5dl        1/1     Running     0          2d
    istio-galley-6c9cd5b8bb-4j4jk               1/1     Running     0          2d
    istio-ingressgateway-6c796c5594-f972p       1/1     Running     0          2d
    istio-pilot-77f74fc6f-rpbfj                 2/2     Running     0          2d
    istio-policy-655b87fff-4wbwq                2/2     Running     0          2d
    istio-security-post-install-tm2rm           0/1     Completed   1          2d
    istio-sidecar-injector-668c9fb4db-p6lwt     1/1     Running     0          2d
    istio-statsd-prom-bridge-5b645f6f4d-6pbgf   1/1     Running     0          2d
    istio-telemetry-d9848f498-wf6kh             2/2     Running     0          2d
    promsd-6b989699d8-l7jxt                 1/1     Running     0          2d
    

Habilita la inserción de sidecar

Para aprovechar al máximo las características de Istio, cada servicio de tu aplicación debe tener un proxy de archivo adicional Envoy que se ejecute en su pod. El proxy de Envoy intercepta todo el tráfico entrante y saliente al servicio y se comunica con el plano de control de Istio. Puedes insertar un proxy de Envoy de forma manual si actualizas la configuración de Kubernetes de tus pods o puedes usar la inyección automática de archivo adicional basada en webhooks.

De forma predeterminada, la inserción automática del archivo adicional de Istio está inhabilitada para todos los espacios de nombres. Para habilitar la inyección automática, reemplaza NAMESPACE en el siguiente comando por el nombre del espacio de nombres para los servicios de tu aplicación o por default. :

kubectl label namespace NAMESPACE istio-injection=enabled

Los pods en ejecución deben reiniciarse para que el cambio surta efecto, ya que el archivo adicional se agrega en el momento de la creación del pod. Para inhabilitar la inyección automática en el espacio de nombres, quita la etiqueta y reinicia los pods a fin de quitar los archivos adicionales.

Para insertar los sidecars de forma manual, consulta Instala el sidecar.

Configurar el plano de control

Aunque Istio en GKE administra la mayor parte de la configuración del plano de control, para el uso en la producción, recomendamos que elijas y especifiques los valores adecuados para tu caso práctico en la siguiente configuración. Puedes cambiarlas con kubectl o tus herramientas de Kubernetes de preferencia. Esta configuración no se modifica cuando el complemento actualiza tu instalación.

Escalamiento horizontal:

Configura una de las siguientes opciones para asegurarte de tener suficientes réplicas de los componentes del plano de control de Istio a fin de controlar el tráfico de tu malla. Para el uso en producción, recomendamos un mínimo de dos réplicas para istio-policy, istio-telemetry, istio-pilot y istio-sidecar-injector.

  • El ajuste de escala automático horizontal de pods escala automáticamente la cantidad de réplicas según el uso de CPU observado. Proporcionamos valores máximos y máximos predeterminados para los componentes del plano de control de ajuste de escala automático, pero puedes editarlos para que se adapten a tus necesidades. Por ejemplo, así es como se especificaría con kubectl edit que deseas editar la configuración del escalador automático para Istio-Telemetry:

    kubectl edit -n istio-system HorizontalPodAutoscalers/istio-telemetry
    
  • Si no usas el ajuste de escala automático, puedes establecer la cantidad de réplicas para cada elemento del plano de control (a excepción de Citadel, que siempre es un singleton) para el escalamiento manual manual. las rutas "a GCP". Por ejemplo, así es como debes especificar con kubectl que deseas que dos instancias de Pilot:

    kubectl scale -n istio-system --replicas=2 deployment/istio-pilot
    

Solicitudes de recursos

De forma predeterminada, las solicitudes de recursos no están configuradas. Sin embargo, para usos de producción, recomendamos establecerlas con los valores apropiados a fin de garantizar que los nodos tengan recursos suficientes para admitir los pods. Debes establecer solicitudes de recursos para cada contenedor en el pod; de lo contrario, la CPU en los HPA muestra unknown y el ajuste de escala automático no funcionará.

Puedes encontrar puntos de partida recomendados para la configuración de los recursos en cada componente en la guía de Opciones de instalación de Istio. Por ejemplo, las solicitudes y límites de recursos de Mixer se encuentran en opciones de mixer.

kubectl edit -n istio-system Deployments/istio-telemetry

Presupuesto de interrupción del Pod

PodDisruptionBudgets te permite especificar el número mínimo de réplicas disponibles de una implementación determinada que una aplicación puede tolerar y seguir funcionando.

Debes configurar PodDisruptionBudgets para todas las implementaciones que deben permanecer disponibles durante las actualizaciones de Istio on GKE. Como mínimo, recomendamos hacer esto para la puerta de enlace de entrada de Istio proporcionada por el complemento (istio-ingressgateway), si no implementaste y configuraste tu propia puerta de enlace de entrada, como de otra forma el tráfico externo. quizás no pueda acceder a su aplicación durante la actualización.

La configuración del presupuesto de interrupción del pod debe configurarse junto con la configuración de escalamiento horizontal, como se describió antes. La cantidad de réplicas o las réplicas mínimas de escalador automático debe ser mayor que el presupuesto de interrupción del pod mínimo, porque Istio en el proceso de actualización de GKE hace que las réplicas individuales no estén disponibles mientras se actualizan. Esto garantiza que la configuración minAvailable en PodDisruptionBudget no se infrinja durante las actualizaciones y la actualización funcione según lo previsto.

Personaliza tu instalación

Si bien Istio en GKE proporciona un comportamiento predeterminado razonable para muchos casos prácticos, puedes personalizar la instalación de varias maneras, lo que incluye la configuración de herramientas de telemetría y adición de puertas de enlace. En esta sección, se describe cómo realizar personalizaciones compatibles.

Actualiza los valores predeterminados de seguridad

Cuando se cambia el modo de seguridad mTLS predeterminado de Istio en un clúster en ejecución de Estricto a Permisivo, o viceversa, se usa el mismo comando para agregar Istio a un clúster:

Console

  1. Ve a la página de clústeres de Kubernetes en Cloud Console y selecciona el clúster que quieres actualizar.
  2. Selecciona Editar.
  3. En Istio (Beta), seleccione Habilitado para mostrar Istio mTLS (Beta).
  4. Seleccione el modo de seguridad mTLS que desea usar para su clúster en el menú desplegable.
  5. Haz clic en Guardar para actualizar tu clúster.

Línea de comandos

Para cambiar tu clúster a fin de que use Istio de forma forzosa, de manera predeterminada, ejecuta este comando y reemplaza CLUSTER_NAME por el nombre del clúster:

$ gcloud beta container clusters update CLUSTER_NAME \
    --update-addons=Istio=ENABLED --istio-config=auth=MTLS_STRICT

O para cambiar tu clúster a mTLS en modo permisivo, haz lo siguiente:

$ gcloud beta container clusters update CLUSTER_NAME \
    --update-addons=Istio=ENABLED --istio-config=auth=MTLS_PERMISSIVE

Ten en cuenta que, si habilitas mTLS estricta mientras sigues teniendo servicios que deben enviar o recibir tráfico sin encriptar, tu aplicación podría fallar. Puedes encontrar más información sobre cómo migrar a mTLS estricta en la migración mutua de TLS. También puede especificar políticas de autenticación más específicas para el destino. Las políticas de autenticación específicas del destino siempre anularán cualquier configuración predeterminada de mTLS global, incluso si cambias de Estricto a Permisivo o viceversa.

En el sitio de Istio, encontrarás más información sobre cómo configurar y trabajar con la seguridad de Istio, además de cómo configurar una autorización basada en funciones.

Supervisar y registrar

De forma predeterminada, una malla instalada con Istio en GKE puede enviar datos de registro y métricas a Cloud Logging y Cloud Monitoring, siempre que hayas habilitado las funciones relevantes para tu proyecto y clúster. Las versiones de Istio anteriores a la versión 1.1.7 también envían datos de seguimiento de forma predeterminada. Puedes obtener más información al respecto en la asistencia de Google Cloud's operations suite.

Es posible que el seguimiento y el registro generen costos adicionales, en especial, con un gran volumen de datos provenientes de tu malla. Si quieres inhabilitar esta función sin inhabilitar las API del paquete de operaciones de Google Cloud para tu proyecto, actualiza la configuración de Istio on GKE de la siguiente manera.

Para inhabilitar Cloud Logging para Istio en GKE, sigue estos pasos:

  1. Abre la regla stackdriver-log para editar:

    kubectl edit -n istio-system rule stackdriver-log
    
  2. Reemplaza la condición match (context.protocol == "http" || context.protocol == "grpc") && (context.reporter.kind | "inbound" == "inbound") con "false".

  3. Guarde y cierre la regla.

  4. Abre la regla stackdriver-log-tcp.

    kubectl edit -n istio-system rule stackdriver-log-tcp
    
  5. Reemplaza la condición match (context.protocol == "tcp") && (context.reporter.kind | "inbound" == "inbound") con "false".

  6. Guarde y cierre la regla.

Para inhabilitar el seguimiento de Google Cloud's operations suite para Istio en GKE

Si tienes Istio en la versión 1.1.3-gke.0 o anterior de Istio, o si habilitaste manualmente el seguimiento del paquete de operaciones de Google Cloud, puedes inhabilitarlo de la siguiente manera:

  1. Abre la regla stackdriver-tracing-rule para editar:

    kubectl edit -n istio-system rule stackdriver-tracing-rule
    
  2. Reemplaza la condición match context.protocol == "http" || context.protocol == "grpc" con "false".

  3. Guarde y cierre la regla.

Habilita el seguimiento de Google Cloud's operations suite para Istio en GKE

Si usas la versión 1.1.7 o posterior y quieres habilitar el seguimiento de paquetes de operaciones de Google Cloud, haz lo siguiente:

  1. Asegúrate de que la API de Cloud Trace esté habilitada en tu proyecto de Google Cloud.

  2. Abre la regla stackdriver-tracing-rule para editar:

    kubectl edit -n istio-system rule stackdriver-tracing-rule
    
  3. Reemplaza la condición match "false" con context.protocol == "http" || context.protocol == "grpc".

  4. Guarde y cierre la regla.

Agregar puertas de enlace

Se proporciona una puerta de enlace de entrada de Istio como parte de tu instalación de Istio on GKE. La puerta de enlace de entrada predeterminada es adecuada para las implementaciones en las que los recursos instalados (RBAC, servicio, implementación) no necesitan mucha personalización. Puedes agregar campos a la configuración de puerta de enlace de Istio y modificar la siguiente configuración del plano de control:

  • Escalamiento horizontal:
  • Solicitudes de recursos
  • Presupuestos de interrupción del Pod

Cuando actualizas GKE, el complemento Istio on GKE y todos los recursos instalados por el complemento, incluida la puerta de enlace de entrada predeterminada, se actualizan de forma automática. No cambies ningún otro valor en la configuración predeterminada de la puerta de enlace de entrada porque los cambios se revertirán a los valores predeterminados durante la actualización automática.

Para situaciones más complejas en las que se requiere personalización, debes crear una puerta de enlace de entrada nueva. Si agregas una puerta de enlace de entrada o salida, estarán bajo tu control y no se modifican durante la actualización automática.

Ten en cuenta que una puerta de enlace de salida de Istio no está instalada de forma predeterminada en la versión 1.1 y posteriores. Para agregar una puerta de enlace de entrada o de salida, sigue estos pasos:

  1. Otorga permisos de administrador de clúster al usuario actual.

    1. Configura tu cuenta de usuario para que sea el usuario actual.

      gcloud auth login
    2. Otorga permisos de administrador de clúster al usuario actual.

      kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"
      
  2. Sigue los pasos que se indican en Agrega puertas de enlace para agregar la puerta de enlace.

Accede a servicios externos

Todo el tráfico saliente de un pod habilitado para Istio se redirecciona a su proxy de archivo adicional. De manera predeterminada, Istio configura el proxy de archivo adicional para que pase solicitudes de transferencia de servicios desconocidos, pero puedes configurar un control más estricto. Aunque puedesCrear ServiceEntries Para permitir solicitudes salientes a destinos permitidos, es posible que desees agregar una puerta de enlace de salida, como se describe enControl seguro del tráfico de salida en Istio entrada de blog.

¿Qué sigue?

  • Intenta instalar y explorar el ejemplo de Bookinfo para ver lo que puede hacer Istio. Para obtener la app de muestra y laistioctl ve a laVersión de Istio para descargar el archivo de instalación correspondiente al SO en el que ejecutas tus comandos. Luego, sigue las instrucciones para implementar y probar la aplicación (no es necesario que implementes Istio) en el instructivo de instalación de Istio de GKE.
  • Obtén más información sobre Istio en la documentación de código abierto.
  • Si necesita quitar el complemento de Istio de un clúster, consulte Cómo desinstalar Istio on GKE.