Preguntas frecuentes

En su búsqueda de información sobre Istio y la tecnología de service mesh, ¡esperamos que estas preguntas frecuentes le ayuden!

General

¿Qué es Istio?

Istio es una service mesh abierta e independiente de la plataforma que proporciona gestión del tráfico, aplicación de políticas y recopilación de telemetría.

Abierto: Istio se está desarrollando y manteniendo como software de código abierto. Alentamos las contribuciones y los comentarios de la comunidad en general.

Independiente de la plataforma: Istio no está dirigido a ningún entorno de implementación específico. Durante las etapas iniciales de desarrollo, Istio admitirá implementaciones basadas en Kubernetes. Sin embargo, Istio se está creando para permitir una adaptación rápida y fácil a otros entornos.

service mesh: Istio está diseñado para gestionar las comunicaciones entre microservicios y aplicaciones. Sin requerir cambios en los servicios subyacentes, Istio proporciona una resistencia de tráfico de línea de base automatizada, recopilación de métricas de servicio, seguimiento distribuido, cifrado de tráfico, actualizaciones de protocolo y funcionalidad de enrutamiento avanzada para toda la comunicación de servicio a servicio.

Para obtener más detalles, consulte La service mesh de Istio

¿Por qué querría usar Istio?

Tradicionalmente, gran parte de la lógica gestionada por Istio se ha integrado directamente en las aplicaciones. En una flota de servicios, la gestión de las actualizaciones de esta lógica de comunicaciones puede ser una gran carga. Istio proporciona una solución a nivel de infraestructura para gestionar las comunicaciones de servicio.

Desarrolladores de aplicaciones: Con Istio gestionando cómo fluye el tráfico a través de sus servicios, los desarrolladores pueden centrarse exclusivamente en la lógica empresarial e iterar rápidamente en nuevas funciones.

Operadores de servicios: Istio permite la aplicación de políticas y la supervisión de la malla desde un único punto de control centralizado, independientemente de la evolución de la aplicación. Como resultado, los operadores pueden garantizar el cumplimiento continuo de las políticas a través de un plano de gestión simplificado.

¿Cómo empiezo a usar Istio?

Recomendamos seguir las instrucciones de la página de introducción, que instala una configuración de demostración junto con la principal aplicación de ejemplo de Istio, Bookinfo. Luego puede usar esta configuración para recorrer varias guías de Istio que muestran el enrutamiento inteligente, la aplicación de políticas, la seguridad, la telemetría, etc., en un estilo de tutorial.

Para comenzar a usar Istio con implementaciones de producción de Kubernetes, consulte nuestra documentación de modelos de implementación y la página de preguntas frecuentes ¿qué método de instalación de Istio debo usar?.

¿Cuál es la licencia?

Istio utiliza la Licencia Apache 2.0.

¿Cómo se inició Istio?

El proyecto Istio fue iniciado por equipos de Google e IBM en asociación con el equipo de Envoy de Lyft. Se ha desarrollado completamente en abierto en GitHub.

¿Qué entornos de implementación son compatibles?

Istio está diseñado para ser independiente de la plataforma, inicialmente centrado en Kubernetes. Para nuestra versión 1.26, Istio admite entornos que ejecutan Kubernetes (1.29, 1.30, 1.31, 1.32, 1.33).

¿Cómo puedo contribuir?

Las contribuciones son muy bienvenidas. Esperamos los comentarios, los feedbacks y los bugs de la comunidad.

Los repositorios de código están alojados en GitHub. Consulte nuestras Directrices de contribución para saber cómo contribuir.

Además del código, hay otras formas de contribuir a la comunidad de Istio, incluso en nuestro foro de discusión, Slack y Stack Overflow.

¿Dónde está la documentación?

Consulte la documentación aquí mismo en istio.io. Los documentos incluyen descripciones generales de conceptos, guías de tareas, ejemplos y la documentación de referencia completa.

La documentación detallada a nivel de desarrollador se mantiene en nuestra Wiki

Istio no funciona, ¿qué hago?

Consulte la guía de operaciones para encontrar soluciones y nuestra página de informes de errores para presentar errores.

¿Cuál es la hoja de ruta de Istio?

Consulte nuestra página de feature status y las noticias para conocer las últimas novedades.

¿Qué significa la palabra 'Istio'?

Es la palabra griega para ‘vela’.

¿Cómo puedo unirme al espacio de trabajo de Slack de Istio?

Si desea tener interacciones en vivo con miembros de nuestra comunidad, puede unirse a nosotros en el espacio de trabajo de Slack de Istio.

Configuración

¿Qué método de instalación de Istio debo usar?

Además de la sencilla instalación de evaluación de introducción, existen varios métodos diferentes que puede utilizar para instalar Istio. Cuál debe usar depende de sus requisitos de producción. A continuación se enumeran algunas de las ventajas y desventajas de cada uno de los métodos disponibles:

  1. instalación de istioctl

    La ruta de instalación y gestión más sencilla y cualificada con alta seguridad. Este es el método recomendado por la comunidad para la mayoría de los casos de uso.

    Ventajas:

    • Validación exhaustiva de la configuración y verificación del estado.
    • Utiliza la API IstioOperator, que proporciona amplias opciones de configuración/personalización.

    Desventajas:

    • Se deben gestionar varios binarios, uno por cada versión menor de Istio.
    • El comando istioctl puede establecer valores automáticamente en función de su entorno de ejecución, produciendo así instalaciones variables en diferentes entornos de Kubernetes.
  2. Instalar usando Helm

    Permite una fácil integración con flujos de trabajo basados en Helm y la eliminación automática de recursos durante las actualizaciones.

    Ventajas:

    • Enfoque familiar que utiliza herramientas estándar de la industria.
    • Gestión nativa de versiones y actualizaciones de Helm.

    Desventajas:

    • Menos comprobaciones y validaciones en comparación con istioctl install.
    • Algunas tareas administrativas requieren más pasos y tienen una mayor complejidad.
  3. Aplicar un manifiesto de Kubernetes generado

    Este método es adecuado cuando se requiere una auditoría estricta o un aumento de los manifiestos de salida, o si existen restricciones de herramientas de terceros.

    Ventajas:

    • Más fácil de integrar con herramientas que no usan helm o istioctl.
    • No se requieren herramientas de instalación que no sean kubectl.

    Desventajas:

    • No se realizan comprobaciones en tiempo de instalación, detección de entorno o validaciones compatibles con ninguno de los métodos anteriores.
    • No se admite la gestión de la instalación ni la capacidad de actualización.
    • La experiencia del usuario es menos optimizada.
    • La notificación de errores durante la instalación no es tan sólida.

Las instrucciones de instalación para todos estos métodos están disponibles en la página de instalación de Istio.

Kubernetes - ¿Cómo puedo depurar problemas con la inyección automática de sidecar?

Asegúrese de que su cluster haya cumplido los requisitos previos para la inyección automática de sidecar. Si su microservicio está implementado en los namespaces kube-system, kube-public o istio-system, están exentos de la inyección automática de sidecar. Utilice un namespace diferente en su lugar.

Modo ambient

¿Es ztunnel un único punto de fallo?

El ztunnel de Istio no introduce un único punto de fallo (SPOF) en un cluster de Kubernetes. Los fallos de ztunnel se limitan a un único nodo, que se considera un componente falible en un cluster. Se comporta de la misma manera que otra infraestructura crítica para el nodo que se ejecuta en cada cluster, como el kernel de Linux, el tiempo de ejecución del contenedor, etc. En un sistema diseñado correctamente, las interrupciones de los nodos no provocan interrupciones del cluster. Más información.

Seguridad

¿Cómo puedo habilitar/deshabilitar TLS mutuo después de instalar Istio?

Puede cambiar la configuración de TLS mutuo para sus servicios en cualquier momento utilizando la política de autenticación y la regla de destino. Consulte la tarea para obtener más detalles.

¿Puedo habilitar TLS mutuo para algunos servicios mientras lo dejo deshabilitado para otros servicios en el mismo cluster?

La política de autenticación puede ser mesh-wide (lo que afecta a todos los servicios de la malla), namespace-wide (todos los servicios del mismo namespace) o específicamente del servicio. Puede tener una o varias políticas para configurar TLS mutuo para los servicios de un cluster de la forma que desee.

¿Cómo puedo verificar que el tráfico utiliza el cifrado TLS mutuo?

Si instaló Istio con values.global.proxy.privileged=true, puede usar tcpdump para determinar el estado del cifrado. También en Kubernetes 1.23 y versiones posteriores, como alternativa a la instalación de Istio como privilegiado, puede usar kubectl debug para ejecutar tcpdump en un contenedor efímero. Consulte Migración de TLS mutuo de Istio para obtener instrucciones.

Si TLS mutuo está habilitado globalmente, ¿pueden los servicios que no son de Istio acceder a los servicios de Istio?

Cuando TLS mutuo STRICT está habilitado, los workloads que no son de Istio no pueden comunicarse con los servicios de Istio, ya que no tendrán un certificado de cliente de Istio válido.

Si necesita permitir estos clientes, el modo TLS mutuo se puede configurar en PERMISSIVE, lo que permite tanto texto sin formato como TLS mutuo. Esto se puede hacer para workloads individuales o para toda la malla.

Consulte Política de autenticación para obtener más detalles.

¿Cómo puedo usar las comprobaciones de estado de liveness y readiness de Kubernetes para las comprobaciones de estado de los pods cuando TLS mutuo está habilitado?

Si TLS mutuo está habilitado, las comprobaciones de estado HTTP y TCP del kubelet no funcionarán sin modificaciones, ya que el kubelet no tiene certificados emitidos por Istio.

Hay varias opciones:

  1. Usar la reescritura de sondeo para redirigir las solicitudes de liveness y readiness a la workload directamente. Consulte Reescritura de sondeo para obtener más información. Esto está habilitado de forma predeterminada y se recomienda.

  2. Usar un puerto separado para las comprobaciones de estado y habilitar TLS mutuo solo en el puerto de servicio normal. Consulte Comprobación de estado de los servicios de Istio para obtener más información.

  3. Usar el modo PERMISSIVE para el workload, para que pueda aceptar tanto tráfico de texto sin formato como de TLS mutuo. Tenga en cuenta que TLS mutuo no se aplica con esta opción.

¿Cómo configurar el tiempo de vida de los certificados de Istio?

Para los workloads que se ejecutan en Kubernetes, el tiempo de vida de sus certificados de Istio es, de forma predeterminada, de 24 horas.

Esta configuración se puede anular personalizando el campo proxyMetadata de la configuración del proxy. Por ejemplo:

proxyMetadata:
  SECRET_TTL: 48h
¿El TLS mutuo automático excluye los puertos establecidos con la anotación "excludeInboundPorts"?

No. Cuando se utiliza traffic.sidecar.istio.io/excludeInboundPorts en los workloads del servidor, Istio sigue configurando el Envoy del cliente para que envíe TLS mutuo de forma predeterminada. Para cambiar eso, debe configurar una regla de destino con el modo TLS mutuo establecido en DISABLE para que los clientes envíen texto sin formato a esos puertos.

Solución de problemas de conectividad de MySQL

Es posible que MySQL no se pueda conectar después de instalar Istio. Esto se debe a que MySQL es un protocolo primero del servidor, lo que puede interferir con la detección de protocolos de Istio. En particular, el uso del modo mTLS PERMISSIVE puede causar problemas. Es posible que vea mensajes de error como ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0.

Esto se puede solucionar asegurándose de que se utilice el modo STRICT o DISABLE, o de que todos los clientes estén configurados para enviar mTLS. Consulte protocolos primero del servidor para obtener más información.

¿Admite Istio la autorización?

Sí. Istio proporciona funciones de autorización tanto para servicios HTTP como para servicios TCP sin formato en la malla. Más información.

¿Cómo configurar la entrada de Istio para que solo acepte tráfico TLS?

Siguiendo las instrucciones de la tarea Asegurar el tráfico de entrada, la entrada de Istio se puede proteger para que solo acepte tráfico TLS.

¿Puedo instalar el sidecar de Istio para los servicios HTTPS?

Sí, puedes. Funciona tanto con TLS mutuo habilitado como deshabilitado.

Métricas y registros

¿Se puede acceder a las métricas de Istio a través de REST?

Puede recopilar datos de telemetría sobre Istio utilizando Prometheus. Y luego usar la API HTTP de Prometheus para consultar esos datos.

¿Cuáles son las diferencias en la telemetría informada por la telemetría en el proxy (también conocida como v2) y la telemetría basada en Mixer (también conocida como v1)?

La telemetría en el proxy (también conocida como v2) reduce el costo de los recursos y mejora el rendimiento del proxy en comparación con el enfoque de telemetría basada en Mixer (también conocida como v1), y es el mecanismo preferido para mostrar la telemetría en Istio. Sin embargo, existen algunas diferencias en la telemetría informada entre v1 y v2 que se enumeran a continuación:

  • Faltan labels para el tráfico fuera de la malla La telemetría en el proxy se basa en el intercambio de metadatos entre los proxies de Envoy para recopilar información como el nombre de el workload del par, el namespace y las labels. En la telemetría basada en Mixer , esta funcionalidad la realizaba Mixer como parte de la combinación de los atributos de la solicitud con los datos de la plataforma. Este intercambio de metadatos lo realizan los proxies de Envoy agregando un encabezado HTTP específico para el protocolo HTTP o aumentando el protocolo ALPN para el protocolo TCP como se describe aquí. Esto requiere que los proxies de Envoy se inyecten tanto en los workloads del cliente como del servidor, lo que implica que a la telemetría informada cuando un par no está en la malla le faltarán atributos del par como el nombre de el workload, el namespace y las labels. Sin embargo, si ambos pares tienen proxies inyectados, todas las labels mencionadas aquí están disponibles en las métricas generadas. Cuando el workload del servidor está fuera de la malla, los metadatos de el workload del servidor todavía se distribuyen al sidecar del cliente, lo que hace que las métricas del lado del cliente tengan los metadatos de el workload del servidor labels completadas.

  • El intercambio de metadatos TCP requiere mTLS El intercambio de metadatos TCP se basa en el protocolo ALPN de Istio que requiere que el TLS mutuo (mTLS) esté habilitado para que los proxies de Envoy intercambien metadatos con éxito. Esto implica que si mTLS no está habilitado en su cluster, la telemetría para el protocolo TCP no incluirá información del par como el nombre de el workload, el namespace y las labels.

  • No hay mecanismo para configurar depósitos personalizados para métricas de histograma La telemetría basada en Mixer admitía la personalización de depósitos para métricas de tipo histograma como la duración de la solicitud y los tamaños de bytes de TCP. La telemetría en el proxy no tiene tal mecanismo disponible. Además, los depósitos disponibles para las métricas de latencia en la telemetría en el proxy están en milisegundos en comparación con los segundos en la telemetría basada en Mixer. Sin embargo, hay más depósitos disponibles de forma predeterminada en la telemetría en el proxy para las métricas de latencia en los niveles de latencia más bajos.

  • No hay vencimiento de métricas para métricas de corta duración La telemetría basada en Mixer admitía el vencimiento de métricas por el cual las métricas que no se generaban durante un período de tiempo configurable se daban de baja para la recopilación por parte de Prometheus. Esto es útil en escenarios, como trabajos únicos, que generan métricas de corta duración. Dar de baja las métricas evita la notificación de métricas que ya no cambiarían en el futuro, lo que reduce el tráfico de red y el almacenamiento en Prometheus. Este mecanismo de vencimiento no está disponible en la telemetría en el proxy. La solución alternativa para esto se puede encontrar aquí.

¿Cómo puedo gestionar las métricas de corta duración?

Las métricas de corta duración pueden afectar el rendimiento de Prometheus, ya que a menudo son una gran fuente de cardinalidad de labels. La cardinalidad es una medida del número de valores únicos para una label. Para gestionar el impacto de sus métricas de corta duración en Prometheus, primero debe identificar las métricas y labels de alta cardinalidad. Prometheus proporciona información de cardinalidad en su página /status. Se puede recuperar información adicional a través de PromQL. Hay varias formas de reducir la cardinalidad de las métricas de Istio:

  • Deshabilitar la reserva del encabezado del host. La label destination_service es una fuente potencial de alta cardinalidad. Los valores para destination_service se establecen de forma predeterminada en el encabezado del host si el proxy de Istio no puede determinar el servicio de destino a partir de otros metadatos de la solicitud. Si los clientes utilizan una variedad de encabezados de host, esto podría dar como resultado una gran cantidad de valores para destination_service. En este caso, siga la guía de personalización de métricas para deshabilitar la reserva del encabezado del host en toda la malla. Para deshabilitar la reserva del encabezado del host para una workload o un namespace en particular, debe copiar la configuración de EnvoyFilter de estadísticas, actualizarla para que la reserva del encabezado del host esté deshabilitada y aplicarla con un selector más específico. Este problema tiene más detalles sobre cómo lograrlo.
  • Eliminar labels innecesarias de la colección. Si no se necesita la label con alta cardinalidad, puede eliminarla de la colección de métricas a través de la personalización de métricas usando tags_to_remove.
  • Normalizar los valores de las labels, ya sea a través de la federación o la clasificación. Si se desea la información proporcionada por la label, puede usar la federación de Prometheus o la clasificación de solicitudes para normalizar la label.

¿Cómo migro la funcionalidad de Mixer existente?

Mixer fue eliminado en la versión 1.8 de Istio. La migración es necesaria si todavía depende de los adaptadores integrados de Mixer o de cualquier adaptador fuera de proceso para la extensión de la malla.

Para los adaptadores integrados, se proporcionan varias alternativas:

Para los adaptadores personalizados fuera de proceso, se recomienda encarecidamente la migración a extensiones basadas en Wasm. Consulte las guías sobre el desarrollo de módulos Wasm y la distribución de extensiones. Como solución temporal, puede habilitar el soporte de la API de registro de acceso gRPC y ext-authz de Envoy en Mixer, lo que le permite actualizar Istio a versiones posteriores a la 1.7 sin dejar de usar Mixer 1.7 con adaptadores fuera de proceso. Esto le dará más tiempo para migrar a extensiones basadas en Wasm. Tenga en cuenta que esta solución temporal no ha sido probada en batalla y es poco probable que reciba correcciones de parches, ya que solo está disponible en la rama 1.7 de Istio, que está fuera de la ventana de soporte después de febrero de 2021.

¿Se puede usar el adaptador de Prometheus en entornos que no son de Kubernetes?

Puede usar docker-compose para instalar Prometheus.

¿Cómo averiguar qué le sucedió a una solicitud en Istio?

Puede habilitar el seguimiento para determinar el flujo de una solicitud en Istio.

Además, puede usar los siguientes comandos para saber más sobre el estado de la malla:

  • istioctl proxy-config: recupera información sobre la configuración del proxy cuando se ejecuta en Kubernetes:

    # Recuperar información sobre la configuración de arranque para la instancia de Envoy en el pod especificado.
    $ istioctl proxy-config bootstrap productpage-v1-bb8d5cbc7-k7qbm
    

    Recuperar información sobre la configuración del cluster para la instancia de Envoy en el pod especificado.

    $ istioctl proxy-config cluster productpage-v1-bb8d5cbc7-k7qbm

    Recuperar información sobre la configuración del listener para la instancia de Envoy en el pod especificado.

    $ istioctl proxy-config listener productpage-v1-bb8d5cbc7-k7qbm

    Recuperar información sobre la configuración de la ruta para la instancia de Envoy en el pod especificado.

    $ istioctl proxy-config route productpage-v1-bb8d5cbc7-k7qbm

    Recuperar información sobre la configuración del endpoint para la instancia de Envoy en el pod especificado.

    $ istioctl proxy-config endpoints productpage-v1-bb8d5cbc7-k7qbm

    Pruebe lo siguiente para descubrir más comandos de proxy-config

    $ istioctl proxy-config –help

  • kubectl get: obtiene información sobre diferentes recursos en la malla junto con la configuración de enrutamiento:

    # Listar todos los virtual services
    $ kubectl get virtualservices
¿Puedo usar Prometheus para recopilar métricas de aplicaciones con Istio?

Sí. Prometheus es un sistema de monitoreo de código abierto y una base de datos de series de tiempo. Puede usar Prometheus con Istio para registrar métricas que rastrean la salud de Istio y de las aplicaciones dentro de la service mesh. Puede visualizar métricas usando herramientas como Grafana y Kiali. Consulte Configuración para Prometheus para comprender cómo habilitar la recopilación de métricas.

Algunas notas:

  • Si el pod de Prometheus se inició antes de que el pod de istiod pudiera generar los certificados requeridos y distribuirlos a Prometheus, el pod de Prometheus deberá reiniciarse para poder recopilar de los destinos protegidos con TLS mutuo.
  • Si su aplicación expone las métricas de Prometheus en un puerto dedicado, ese puerto debe agregarse a las especificaciones del servicio y la implementación.

Seguimiento distribuido

¿Cómo funciona el seguimiento distribuido con Istio?

Istio se integra con sistemas de seguimiento distribuido utilizando el seguimiento basado en Envoy. Con la integración de seguimiento basada en Envoy, las aplicaciones son responsables de reenviar las cabeceras de seguimiento para las solicitudes salientes posteriores.

Puede encontrar información adicional en la descripción general del seguimiento distribuido y en los documentos de seguimiento de Envoy.

¿Qué se requiere para el seguimiento distribuido con Istio?

Istio permite la notificación de tramos de seguimiento para las comunicaciones de workload a workload dentro de una malla. Sin embargo, para que los diversos tramos de seguimiento se unan para obtener una vista completa del flujo de tráfico, las aplicaciones deben propagar el contexto de seguimiento entre las solicitudes entrantes y salientes.

En particular, Istio se basa en que las aplicaciones reenvíen el ID de solicitud generado por Envoy y las cabeceras estándar. Estas cabeceras incluyen:

  • x-request-id
  • traceparent
  • tracestate

Los usuarios de Zipkin deben asegurarse de que propagan las cabeceras de seguimiento B3.

  • x-b3-traceid
  • x-b3-spanid
  • x-b3-parentspanid
  • x-b3-sampled
  • x-b3-flags
  • b3

La propagación de cabeceras se puede lograr a través de bibliotecas de cliente, como OpenTelemetry. También se puede lograr manualmente, como se documenta en la tarea de seguimiento distribuido.

¿Cómo funciona el seguimiento basado en Envoy?

Para las integraciones de seguimiento basadas en Envoy, Envoy (el proxy sidecar) envía información de seguimiento directamente a los backends de seguimiento en nombre de las aplicaciones que se están representando.

Envoy:

  • genera ID de solicitud y cabeceras de seguimiento (es decir, X-B3-TraceId) para las solicitudes a medida que fluyen a través del proxy
  • genera tramos de seguimiento para cada solicitud en función de los metadatos de la solicitud y la respuesta (es decir, el tiempo de respuesta)
  • envía los tramos de seguimiento generados a los backends de seguimiento
  • reenvía las cabeceras de seguimiento a la aplicación representada

Istio admite OpenTelemetry y backends compatibles, incluidos Jaeger. Otras plataformas compatibles incluyen Zipkin y Apache SkyWalking.

¿Qué genera las cabeceras de seguimiento iniciales?

La gateway de Istio o el proxy sidecar (Envoy) genera las cabeceras iniciales, si no las proporciona la solicitud.

¿Por qué Istio no puede propagar cabeceras en lugar de la aplicación?

Aunque un sidecar de Istio procesará tanto las solicitudes entrantes como las salientes para una instancia de aplicación asociada, no tiene una forma implícita de correlacionar las solicitudes salientes con la solicitud entrante que las causó. La única forma en que se puede lograr esta correlación es si la aplicación propaga información relevante (es decir, cabeceras) de la solicitud entrante a las solicitudes salientes. La propagación de cabeceras se puede lograr a través de bibliotecas de cliente o manualmente. Se proporciona una discusión adicional en ¿Qué se requiere para el seguimiento distribuido con Istio?.

¿Por qué no se rastrean mis solicitudes?

La tasa de muestreo para el seguimiento se establece en el 1% en el perfil de configuración predeterminado. Esto significa que solo 1 de cada 100 instancias de seguimiento capturadas por Istio se informará al backend de seguimiento. La tasa de muestreo en el perfil demo se establece en 100%. Consulte esta sección para obtener información sobre cómo establecer la tasa de muestreo.

Si aún no ve ningún dato de seguimiento, confirme que sus puertos cumplen con las convenciones de nomenclatura de puertos de Istio y que el puerto de contenedor apropiado está expuesto (a través de la especificación del pod, por ejemplo) para permitir la captura de tráfico por el proxy sidecar (Envoy).

Si solo ve datos de seguimiento asociados con el proxy de salida, pero no con el proxy de entrada, aún puede estar relacionado con las convenciones de nomenclatura de puertos de Istio.

¿Cómo puedo controlar el volumen de trazas?

Istio, a través de Envoy, actualmente admite una estrategia de muestreo basada en porcentajes para la generación de trazas. Consulte esta sección para obtener más información sobre cómo establecer esta tasa de muestreo.

¿Admite Istio el seguimiento de solicitudes para los mensajes del bus de eventos de vert.x?

Actualmente, Istio no proporciona soporte para los protocolos pub/sub y de bus de eventos. Cualquier uso de esas tecnologías es en el mejor de los casos y está sujeto a roturas.

Gestión del tráfico

¿Cómo puedo ver las reglas de ruta actuales que he configurado con Istio?

Las reglas se pueden ver usando kubectl get virtualservice -o yaml

¿En qué puertos captura un proxy sidecar el tráfico entrante?

Istio captura el tráfico entrante en todos los puertos de forma predeterminada. Puede anular este comportamiento utilizando la anotación del pod traffic.sidecar.istio.io/includeInboundPorts para especificar una lista explícita de puertos para capturar, o utilizando traffic.sidecar.istio.io/excludeOutboundPorts para especificar una lista de puertos para omitir.

¿Cuál es la diferencia entre los modos TLS MUTUAL e ISTIO_MUTUAL?

Ambas configuraciones de DestinationRule enviarán tráfico TLS mutuo. Con ISTIO_MUTUAL, los certificados de Istio se utilizarán automáticamente. Para MUTUAL, se deben configurar la clave, el certificado y la CA de confianza. Esto permite iniciar TLS mutuo con aplicaciones que no son de Istio.

¿Se puede usar Istio con StatefulSets y servicios headless?

Sí, Istio es totalmente compatible con estas workloads a partir de Istio 1.10.

¿Por qué no funciona mi configuración de CORS?

Después de aplicar la configuración de CORS, es posible que descubra que aparentemente no sucedió nada y se pregunte qué salió mal. CORS es un concepto HTTP comúnmente mal entendido que a menudo genera confusión al configurar.

Para entender esto, es útil dar un paso atrás y ver qué es CORS y cuándo debe usarse. De forma predeterminada, los navegadores tienen restricciones sobre las solicitudes de “origen cruzado” iniciadas por scripts. Esto evita, por ejemplo, que un sitio web attack.example.com realice una solicitud de JavaScript a bank.example.com y robe la información confidencial de un usuario.

Para permitir esta solicitud, bank.example.com debe permitir que attack.example.com realice solicitudes de origen cruzado. Aquí es donde entra en juego CORS. Si estuviéramos sirviendo bank.example.com en un cluster habilitado para Istio, podríamos configurar una corsPolicy para permitir esto:

apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: bank
spec:
  hosts:
  - bank.example.com
  http:
  - corsPolicy:
      allowOrigins:
      - exact: https://attack.example.com
...

En este caso, permitimos explícitamente un único origen; los comodines son comunes para las páginas no confidenciales.

Una vez que hacemos esto, un error común es enviar una solicitud como curl bank.example.com -H "Origin: https://attack.example.com", y esperar que la solicitud sea rechazada. Sin embargo, curl y muchos otros clientes no verán una solicitud rechazada, porque CORS es una restricción del navegador. La configuración de CORS simplemente agrega encabezados Access-Control-* en la respuesta; depende del cliente (navegador) rechazar la solicitud si la respuesta no es satisfactoria. En los navegadores, esto se hace mediante una solicitud de verificación previa.

¿Puedo usar la especificación de Ingress estándar sin ninguna regla de ruta?

Las especificaciones de ingress simples, con coincidencias basadas en host, TLS y ruta exacta funcionarán de fábrica sin necesidad de reglas de ruta . Sin embargo, tenga en cuenta que la ruta utilizada en el recurso de ingress no debe tener ningún carácter ..

Por ejemplo, el siguiente recurso de ingress coincide con las solicitudes para el host example.com, con /helloworld como URL.

$ kubectl create -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: simple-ingress
  annotations:
    kubernetes.io/ingress.class: istio
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /helloworld
        pathType: Prefix
        backend:
          service:
            name: myservice
            port:
              number: 8000
EOF

Sin embargo, las siguientes reglas no funcionarán porque usan expresiones regulares en la ruta y anotaciones ingress.kubernetes.io:

$ kubectl create -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: this-will-not-work
  annotations:
    kubernetes.io/ingress.class: istio
    # Ingress annotations other than ingress class will not be honored
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /hello(.*?)world/
        pathType: Prefix
        backend:
          service:
            name: myservice
            port:
              number: 8000
EOF

¿Qué protocolos admite Istio?

Actualmente, Istio admite protocolos basados en TCP. Además, Istio proporciona funcionalidades como enrutamiento y métricas para otros protocolos como http y mysql.

Para obtener una lista de todos los protocolos e información sobre cómo configurar los protocolos, consulte la documentación de Selección de protocolo.