Notas de Cambios de Istio 1.30.0
Notas de versión de Istio 1.30.0.
Gestión de Tráfico
Mejorada la selección de endpoints para entornos multi-red para usar el gateway para endpoints específicos de red cuando la red del proxy local no está configurada.
Mejorada la selección del namespace de servicio del proxy sidecar. Al configurar proxies sidecar, si un nombre de host existe en múltiples namespaces, Istio ahora prefiere los servicios de Kubernetes y recurre al servicio no-Kubernetes más antiguo (p.ej.,
ServiceEntry) por tiempo de creación. Anteriormente, se elegía el primer namespace visible alfabéticamente.Añadida la síntesis opcional de
x-forwarded-client-certen waypoints ambient. Configurar la anotaciónambient.istio.io/xfcc-include-client-identity: "true"en unGatewayde waypoint (o suGatewayClass) hace que el waypoint sobreescriba XFCC en las solicitudes reenviadas con una entrada poblada a partir de la identidad SPIFFE del workload fuente proporcionada por ztunnel, para que las aplicaciones upstream puedan ver el cliente de origen. Cualquier valor XFCC entrante es reemplazado. Los waypoints sin la anotación no se ven afectados. (Issue #54995)Añadido soporte para la terminación y modo mixto de
TLSRoute. (Issue #55728)Añadida la variable de entorno
PILOT_GATEWAY_TRANSPORT_SOCKET_CONNECT_TIMEOUTpara configurar el tiempo de espera de conexión del socket de transporte en los listeners del gateway. El valor predeterminado sigue siendo 15 segundos. Establece a0spara deshabilitar el tiempo de espera para workloads que requieren tiempos de negociación TLS más largos. (Issue #56320)Añadida la capacidad de compresión HTTP (
gzip,zstd) al servidor HTTP de pilot-agent. (Issue #58697)Añadida la validación de entrada para la anotación
traffic.sidecar.istio.io/excludeInterfacespara asegurar que solo se aceptan nombres de interfaz Linux válidos, previniendo la inyección de parámetros deiptables. (Issue #58781)Añadido soporte para cargar secrets remotos multiclúster desde una ruta del sistema de archivos local especificada por
PILOT_MULTICLUSTER_KUBECONFIG_PATH. Cuando se establece, Istiod monitorea el directorio montado (para claves.yamlo.yml) y actualiza dinámicamente los registros de clústeres remotos. Si tantoPILOT_MULTICLUSTER_KUBECONFIG_PATHcomoLOCAL_CLUSTER_SECRET_WATCHERestán configurados,PILOT_MULTICLUSTER_KUBECONFIG_PATHtiene precedencia. (Issue #58927)Añadido soporte experimental para agentgateway en Istio. La configuración de agentgateway puede habilitarse mediante el flag de características
PILOT_ENABLE_AGENTGATEWAY. Istio soporta la configuración de agentgateway a través de los recursos de la Gateway API. (Issue #59209)Añadido soporte de dirección CIDR para
ServiceEntryen modo ambient. LosServiceEntriescon direcciones CIDR (p.ej.,10.0.0.0/24) ahora se propagan a ztunnel, habilitando el enrutamiento por prefijo más largo para el tráfico destinado a rangos de IP. (Issue #59797)Añadida la posibilidad de configurar los tamaños iniciales de la ventana de flujo y conexión HTTP/2 para los clústeres HBONE CONNECT upstream (generados para waypoints y gateways east-west) mediante los flags de características
PILOT_HBONE_INITIAL_STREAM_WINDOW_SIZEyPILOT_HBONE_INITIAL_CONNECTION_WINDOW_SIZE. Pueden usarse para reducir el buffering no deseado. (Issue #59961)Añadida una anotación
istio.io/connect-strategya losServiceEntriespara permitir diferentes semánticas de conexión DNS. Los usuarios pueden establecer esto aRACE_FIRST_TCP_CONNECTcuando los servidores DNS devuelven múltiples registros A y el cliente debe probar cada endpoint y elegir el primero que resulte en una conexión TCP exitosa. (Issue #59083)Añadido soporte de prioridad de failover para clústeres DNS. (Issue #58674)
Añadido el tiempo de espera de DNS upstream configurable mediante la variable de entorno
DNS_FORWARD_TIMEOUT. El tiempo de espera predeterminado sigue siendo 5 segundos. Los usuarios pueden aumentar el tiempo de espera para servidores DNS de alta latencia o reducirlo para minimizar la latencia de impacto al usuario cuando los servidores DNS no responden. Se configura medianteDNS_FORWARD_TIMEOUT=10sen el contenedoristio-proxyo de forma global medianteproxyMetadata. (Issue #59813)Añadido soporte para listeners TLS passthrough en gateways east-west, permitiendo que los puertos que no son HBONE se expongan a través de la Gateway API (p.ej., para enrutar tráfico hacia el servidor de API de Kubernetes a través de límites de red). Requiere que
AMBIENT_ENABLE_MULTI_NETWORKesté habilitado. (Issue #59223)Añadida la anotación de distribución de tráfico a nivel de namespace. Los servicios heredan la distribución de tráfico de la anotación del namespace cuando no está explícitamente configurada en el servicio. (Issue #58701)
Añadido soporte de
ServiceEntryconDYNAMIC_DNScomodín para proxies sidecar tanto para ubicacionesMESH_INTERNALcomoMESH_EXTERNAL. Habilita el enrutamiento HTTP L7 (mediante cabecera Host) y el enrutamiento TLS L4 (mediante SNI) con observabilidad para hosts comodín (p.ej.,*.example.com) en modo sidecar tradicional. (Issue #58244)Añadida la API
TrafficExtensional paquete de extensiones, habilitando el soporte de primera clase para la extensibilidad con Lua.Habilitados los listeners de Gateway con
protocol: TLSpor defecto. Los listeners de Gateway conprotocol: TLS(usados para TLS passthrough a través deTLSRoute) ahora se aceptan sin requerirPILOT_ENABLE_ALPHA_GATEWAY_API=true, ya queTLSRoutese graduó a GA en la Gateway APIv1.5.0.Corregido un problema que impedía el uso de pods de Namespaces de Usuario de Kubernetes (
hostUsers: false) junto con istio-cni. El soporte está limitado a sistemas operativos que disponen del binarionsenter. (Issue #58750)Corregido el manejo de CORS de la Gateway API: análisis correcto del encabezado
Origincuando se usan orígenes comodín, ignorar solicitudes preflight no coincidentes, y aplicar un análisis más estricto del encabezadoOriginen general. (Issue #59018, Issue #59026)Corregido un problema donde los waypoints no podían añadir el filtro de escucha del inspector TLS cuando solo existían puertos TLS, lo que causaba que el enrutamiento basado en SNI fallara para recursos
ServiceEntrycomodín conresolution: DYNAMIC_DNS. (Issue #59024)Corregido el error de envoltura en el almacén de configuración basado en archivos para usar el verbo
%w, habilitando la propagación adecuada de la cadena de errores conerrors.Is()yerrors.As(). (Issue #59078)Corregido el
tls.Options[gateway.istio.io/tls-terminate-mode]de la Gateway API para anular correctamente el modo TLS después del procesamiento deCACertificateRefs. (Issue #59098)Corregida una referencia nula en la validación de
ServiceEntrypara la resoluciónDYNAMIC_DNSque podía hacer que istiod fallara. (Issue #59171)Corregido el comportamiento del agente
cnipara respetar la configuraciónexcludeNamespacesde modo que el comportamiento sea consistente entre el plugin y el agente. (Issue #59295)Corregido que istiod fallara cuando
PILOT_ENABLE_AMBIENT=trueperoAMBIENT_ENABLE_MULTI_NETWORKno está configurado y existe un recursoWorkloadEntrycon una red diferente a la del clúster local. (Issue #59321)Corregido un problema que impedía el enrutamiento waypoint multiclúster con red única (sin gateway east-west). (Issue #58133)
Corregido un problema donde un
HTTPRoutesinbackendRefsdevolvía un código de estado HTTP 500 en lugar del 404 esperado. Según la especificación de la Gateway API, las rutas sin referencias de backend deben devolver 404, mientras que las rutas con referencias de backend que tienen peso cero deben devolver 500. (Issue #59356)Corregidas las instalaciones multi-clúster que intentaban validar el dominio de confianza incorrecto cuando el control plane no tiene un
ClusterRoleistio-readeractualizado, fallando al leer el dominio de confianza delConfigMapremoto. Ahora, istiod usará como alternativa el dominio de confianza especificado en la configuración de mesh local hasta que pueda leer el remoto. (Issue #59474)Corregida la aplicación de múltiples recursos
VirtualServicepara el mismo nombre de host a los waypoints. (Issue #59483)Corregido un error donde el gateway E/W ocasionalmente enrutaba conexiones HBONE a un servicio incorrecto debido a un pool de conexiones incorrecto en Envoy. (Issue #58630)
Corregido el controlador de despliegue del gateway que rechazaba el tipo
DaemonSetdurante la reconciliación. (Issue #59498)Corregido un problema donde todos los
Gatewaysse reiniciaban después de que istiod se reiniciara. (Issue #59709)Corregidos los fallos de sondeo de salud de kubelet para los pods de mesh ambient en AWS EKS al usar Security Groups for Pods (branch ENI). istio-cni ahora detecta los pods branch ENI y añade reglas IP para enrutar el tráfico de sondeo a través del par veth en lugar del tejido VPC. Controlado por
AMBIENT_ENABLE_AWS_BRANCH_ENI_PROBE(activado por defecto).Corregido que istiod empujara endpoints de gateway IPv6 inalcanzables a proxies solo IPv4 (y viceversa) en meshes multi-red con balanceadores de carga de gateway east-west dual-stack.
Corregida una condición de carrera que causaba un pánico cuando se añadían y eliminaban inmediatamente
HTTPRoutes. Esto podía ocurrir cuando un usuario aplicaba unHTTPRoutey lo eliminaba antes de que el controlador tuviera la oportunidad de procesarlo.Corregido un problema que impedía que
HTTPRouteyGRPCRoutecoexistieran en el mismo nombre de host del gateway sin conflictos. (Issue #59222)Corregida la devolución de
GetAllAddressesForProxyde direcciones de servicio inalcanzables a los proxies cuando la familia IP deDefaultAddressno coincide con la familia IP compatible del proxy.Corregido el campo
todeReferenceGrantpara manejar múltiples entradas; anteriormente solo era efectiva la última entrada, causando unRefNotPermittedincorrecto para las referencias que coincidían con una entrada anterior.Corregido el reporte de estado para los recursos
GatewayyListenerSetpara cumplir con la especificación de la Gateway APIv1.5.0. Cambia el reporte de estado delGatewaypara incluir el número deListenerSetsen el campoAttachedListenerSetsdel recursoGateway, en lugar del número de listeners. También cambia el reporte de estado para losListenerSetspara reportar el número de rutas adjuntas a cada listener en elListenerSet.Corregido un error donde el
percentpredeterminado pararetryBudgetenDestinationRulese establecía incorrectamente en 0.2% en lugar del 20% previsto. (Issue #59504)Corregido un error donde el
retryBudgetconfigurado en latrafficPolicyde nivel superior de unaDestinationRulese descartaba silenciosamente cuando el destino también tenía un subconjunto con su propiatrafficPolicy. Además, elretryBudgetdefinido a nivel de subconjunto también era ignorado. (Issue #59667)Corregidas las
status.addressesobsoletas que no se borraban cuando se actualizaba unServiceEntryde tal manera que ya no calificaba para la auto-asignación de IP. (Issue #58974)Corregida una condición de carrera que causaba registros de error intermitentes “proxy::h2 ping error: broken pipe”. (Issue #59192), (Issue #1346)
Seguridad
Añadido soporte para múltiples proveedores de autorización CUSTOM por workload, habilitando diferentes esquemas de autenticación (OAuth, LDAP, claves API) para diferentes rutas API. (Issue #57933), (Issue #55142), (Issue #34041)
Añadida la posibilidad de especificar namespaces autorizados para los endpoints de depuración cuando
ENABLE_DEBUG_ENDPOINT_AUTH=true. Se habilita configurandoDEBUG_ENDPOINT_AUTH_ALLOWED_NAMESPACEScon una lista separada por comas de namespaces autorizados. El namespace del sistema (normalmenteistio-system) siempre está autorizado.Corregido el mapeo incorrecto de
meshConfig.tlsDefaults.minProtocolVersionatls_minimum_protocol_versionen el contexto TLS descendente. (Issue #58912)Corregida la expresión regular del comparador
serviceAccountenAuthorizationPolicypara citar correctamente el nombre de la cuenta de servicio, permitiendo la coincidencia correcta de cuentas de servicio con caracteres especiales en sus nombres. (CVE-2026-39350) (Issue #59700)Crédito: Esta vulnerabilidad fue descubierta y reportada por Wernerina (https://github.com/Wernerina).
Corregido un problema donde Istiod podía emitir certificados de hoja con un tiempo
NotAftermás allá del vencimiento del certificado de firma. (Issue #59768)Corregido un bypass de autorización en la coincidencia de
AuthorizationPolicypara identidades SPIFFE y namespaces. Los metacaracteres de expresiones regulares en campos comosource.principals(coincidencia por sufijo) ysource.namespacesno se escapaban correctamente en la configuración de Envoy generada, lo que potencialmente permitía que identidades no deseadas coincidieran con las reglas de la política. (Issue #59992)Crédito: Esta vulnerabilidad fue descubierta y reportada por Alex (https://github.com/Alex0Young).
Corregido un error donde la rotación del bundle CA no ocurría cuando los certificados aparecían en diferentes órdenes. Solo se consideran los bloques PEM
CERTIFICATEestándar durante la comparación; otros tipos de bloque (p.ej.,TRUSTED CERTIFICATE) se ignoran, de forma consistente con el manejo existente del bundle CA en Istio. (Issue #59909)Corregida una vulnerabilidad de seguridad crítica donde el mecanismo de fallback de JWKS de Istio filtraba una clave privada RSA, permitiendo a los atacantes falsificar tokens JWT y eludir la autenticación cuando la obtención de JWKS falla. Ver CVE-2026-31837 para detalles. (Advisory GHSA-v75c-crr9-733c)
Crédito: Esta vulnerabilidad fue descubierta y reportada por 1seal (https://github.com/1seal).
Corregido el bloqueo de CIDR en URI de JWKS mediante el uso de una función de control personalizada en un
DialContextpersonalizado. La función de control filtra las conexiones después de la resolución DNS pero antes de marcar, permitiendo que el bloqueo siga las redirecciones y la ruta de descubrimiento del emisor. Esto también preserva las características delDialContextpredeterminado como happy eyeballs ydialSerial(intentando cada IP resuelta en orden). (CVE-2026-41413)Crédito: Esta vulnerabilidad fue descubierta y reportada por KoreaSecurity (https://github.com/KoreaSecurity), 1seal (https://github.com/1seal), y AKiileX (https://github.com/AKiileX).
Corregidos los endpoints de depuración XDS (
syncz,config_dump) para requerir autenticación. Anteriormente accesibles sin autenticación en el puerto XDS de texto plano 15010. Controlado porENABLE_DEBUG_ENDPOINT_AUTH(mismo flag que los endpoints de depuración HTTP). (CVE-2026-31838)Crédito: Esta vulnerabilidad fue descubierta y reportada por 1seal (https://github.com/1seal).
Corregidos los endpoints de depuración XDS (
istio.io/debug/syncz,istio.io/debug/config_dump) servidos porStatusGenpara aplicar autorización del mismo namespace a los llamantes que no son del sistema. Anteriormente, un workload autenticado de cualquier namespace podía enumerar proxies y obtener volcados de configuración de workloads en otros namespaces.Crédito: Esta vulnerabilidad fue descubierta y reportada por 1seal (https://github.com/1seal).
Corregido el SSRF potencial en la obtención de imágenes de
WasmPluginmediante la validación de las URLs de realm del token bearer.Crédito: Esta vulnerabilidad fue descubierta y reportada por Sergey Kanibor en Luntry (https://github.com/r0binak).
Corregidos los
ReadHeaderTimeouteIdleTimeoutfaltantes en el servidor HTTPS del webhook de istiod (puerto 15017), alineándolos con los tiempos de espera existentes en el servidor HTTP (puerto 8080).Corregido el endpoint de depuración XDS para pasar el namespace del llamante para las comprobaciones de autorización adecuadas.
Telemetría
Añadido soporte para las etiquetas
app.kubernetes.io/nameyservice.istio.io/canonical-nameal poblar las etiquetas de métricassource_appydestination_app. El orden de prioridad es:app(para compatibilidad con versiones anteriores), luegoapp.kubernetes.io/name, luegoservice.istio.io/canonical-name. Esto permite a los usuarios que solo tienen etiquetasapp.kubernetes.io/nameque sus métricas se poblen correctamente. (Issue #58436)Añadido el campo
disableContextPropagationa la API de Tracing de Telemetría, permitiendo a los usuarios deshabilitar la propagación de cabeceras de contexto de trazado (p.ej.,X-B3-*,traceparent) independientemente del reporte de spans. Esto es útil para prevenir la filtración de contexto de trazado en gateways de salida manteniendo la observabilidad interna. (Issue #58871)Añadido soporte para el enriquecimiento de atributos de servicio alineado con las convenciones semánticas de OpenTelemetry para spans de trazado. Cuando se establece
serviceAttributeEnrichment: OTEL_SEMANTIC_CONVENTIONSen elOpenTelemetryTracingProviderenMeshConfig,service.namese calcula siguiendo la cadena de alternativas de atributos de servicio K8s de OTel. Adicionalmente,service.namespace,service.versionyservice.instance.idse inyectan comoOTEL_RESOURCE_ATTRIBUTESen el sidecar en tiempo de inyección, y el detector de recursos Environment se habilita automáticamente para que Envoy recoja estos atributos al inicio. (Issue #55026)Añadido un panel de Uso de Recursos al dashboard Grafana de Ztunnel que superpone conexiones TCP activas, descriptores de archivo abiertos y sockets abiertos por instancia.
Corregido un problema donde el descubrimiento de metadatos de peers basado en baggage interfería con las políticas de tráfico TLS o PROXY. Como solución a corto plazo, se deshabilita el descubrimiento de metadatos basado en baggage para las rutas con políticas de tráfico TLS o PROXY configuradas, lo que puede resultar en telemetría incompleta en despliegues multiclúster. Se está trabajando en abordar esta limitación en versiones futuras. (Issue #59117)
Extensibilidad
Añadido soporte para configurar el límite de tamaño del binario Wasm mediante la variable de entorno
ISTIO_WASM_MAX_BINARY_SIZE_BYTES. (Issue #59322)Corregido un límite de tamaño faltante en binarios WASM descomprimidos con gzip obtenidos a través de HTTP, de forma consistente con los límites ya aplicados a otras rutas de obtención.
Instalación
Añadido el valor
useAppArmorAnnotational chart de Helm de istio-cni. Predeterminado entrue. Cuando estrue, el perfil AppArmor se establece con la anotacióncontainer.apparmor.security.beta.kubernetes.io(obsoleta en Kubernetes 1.30). En caso contrario, se usa el campoappArmorProfileensecurityContext. (Issue #54721)Añadido
values.global.enableReaderRBAC(predeterminado:true) para controlar la instalación deistio-reader-service-accounty suClusterRole/ClusterRoleBindingistio-readerrelacionados para los flujos de trabajo de secret remoto multiclúster. Establece afalsepara deshabilitar la instalación de estos recursos. Al instalar con Helm, estableceglobal.enableReaderRBAC=falsetanto en los charts base como en istiod, ya que elServiceAccountes renderizado por el chart base mientras que elClusterRole/ClusterRoleBindingrelacionado es renderizado por el chartistiod. (Issue #56326)Añadido soporte de Helm v4 (apply del lado del servidor). Corregido un conflicto de propiedad del campo
failurePolicydel webhook que causaba quehelm upgradecon SSA fallara. (Issue #58302), (Issue #59367)Añadidas anulaciones de puertos configurables para el servicio de gateway de red mediante los valores
networkGatewayPorts. (Issue #59072)Añadida la validación de plantillas para fallar temprano cuando
service.portsestá vacío ynetworkGatewayno está configurado. (Issue #59072)Añadido el registro de advertencias y errores de análisis de configuración en los registros de istiod para todos los tipos de recursos de Istio (
DestinationRule,EnvoyFilter,Sidecar, etc.), de modo que los operadores ya no necesiten inspeccionar los campos de estado de recursos individuales para descubrir configuraciones incorrectas. (Issue #59105)Añadida la condición de estado
WaypointBounda los recursosWorkloadEntry, reportando si el workload está correctamente adjunto a su proxy waypoint o si hubo un error al vincularlo. (Issue #59993)Añadido el flag
--tls-min-versionapilot-discoverypara configurar la versión TLS mínima para el servidor y webhook de istiod. Los valores admitidos son1.2(predeterminado) y1.3. (Issue #58789)Añadido
registry.istio.iocomo el registro predeterminado para las imágenes de Istio.Añadidos los campos
dnsPolicyydnsConfigal chart de Helm de ztunnel para la configuración DNS personalizada en entornos con requisitos DNS no estándar.Corregidos los permisos de archivo de configuración CNI al predeterminado 0600 en lugar de 0644 para el cumplimiento del benchmark de Kubernetes CIS
v1.12. El acceso de lectura de grupo puede habilitarse estableciendo la variable de entornovalues.cni.env.CNI_CONF_GROUP_READ=trueen elDaemonSetistio-cni-node, lo que establece los permisos en 0640. (Issue #59071)Corregida una referencia nula que ocurría durante el proceso de actualización en un despliegue multi-primary. (Issue #59153)
Corregido un problema donde establecer los límites o solicitudes de recursos a
nullcausaba errores de validación (cpu request must be less than or equal to cpu limit of 0). Esto afectaba a la inyección de proxy, la generación de gateway y los despliegues de charts de Helm. (Issue #58805)Corregida la variable de entorno
PILOT_ENABLE_NODE_UNTAINT_CONTROLLERSfaltante en el despliegueistiodal habilitar el controlador de descontaminación. (Issue #52050)Corregidas las reconciliaciones innecesarias de Helm causadas por
from: []en las reglas de entrada deNetworkPolicy.Corregido un conflicto del gestor de campos en
ValidatingWebhookConfigurationdurantehelm upgradecon apply del lado del servidor en herramientas que respetan.Release.IsUpgrade(Helm 4, Flux). El campofailurePolicyahora se omite de la plantilla del webhook al actualizar, preservando el valor establecido en tiempo de ejecución por el controlador del webhook. Para herramientas que usanhelm templatecon SSA, establecebase.validationFailurePolicy: Failpara evitar el conflicto.
istioctl
Mejorado el rendimiento del comando
istioctl bug-report.Añadidos los flags
--skip-cluster-dump,--skip-analyze,--skip-proxy-debug,--skip-netstaty--skip-coredumpsal comandoistioctl bug-reportpara permitir omitir secciones costosas del reporte.Corregida la obtención de registros con soporte para filtrado de inclusión y exclusión para la selección de pods.
Añadido el flag
--tailpara establecer el número máximo de líneas de registro a obtener por contenedor. El valor predeterminado sigue siendo ilimitado.Actualizada la versión mínima de Kubernetes compatible a
1.32.x.Añadida la validación de puertos a los comandos de
istioctlpara prevenir valores inválidos fuera del rango 1-65535. (Issue #58584)Añadido soporte para
istioctl proxy-status -oyaml/jsonpara listar el estado del proxy de un namespace único. (Issue #59377)Añadida una advertencia de
istioctl analyze(IST0175) cuando existen recursosRequestAuthenticationperoBLOCKED_CIDRS_IN_JWKS_URISno está configurado en istiod. (Issue #59523)Añadidas opciones de salida JSON y YAML al subcomando
istioctl proxy-status. (Issue #56880)Añadido soporte para filtrar la salida de
istioctl ztunnel-config workloadeistioctl ztunnel-config connectionspor nombre de pod de workload.Corregido un problema donde
istioctlreportaba falsamente un error enEnvoyFiltercon operaciónREPLACEenVIRTUAL_HOST. (Issue #59495)Corregido un error de ordenamiento en
istioctl ztunnel-config connectionsque causaba que el ordenamiento de la salida fuera no determinístico. (Issue #59775)Corregido un problema donde la salida JSON y YAML de
istioctl ztunnel-config serviceno incluía el campocanonicaldel volcado de configuración de ztunnel. (Issue #59962)Corregido un problema donde la salida JSON y YAML de
istioctl ztunnel-config serviceno incluíacidrVipsdel volcado de configuración de ztunnel. (Issue #59962)Corregido un problema donde los contenedores distroless de
istioctlse estaban construyendo con la imagen base incorrecta.
Cambios de Documentación
- Actualizada la ubicación de la documentación de la Gateway API Inference Extension; ahora está en la sección de arquitectura. (Issue #56948)