Compartir a través de


Solución de problemas de puerta de enlace de salida del complemento de malla de servicio Istio

En este artículo se describe cómo solucionar problemas de puerta de enlace de salida en el complemento de malla del servicio Istio para Azure Kubernetes Service (AKS).

Información general

La puerta de enlace de salida del complemento Istio es un proxy basado en Envoy que se puede utilizar para enrutar el tráfico saliente de las aplicaciones dentro de la malla. La puerta de enlace de salida de Istio es un servicio de tipo ClusterIP y, por tanto, no se expone externamente.

La puerta de enlace de salida del complemento Istio depende crucialmente de la característica Puerta de enlace de salida estática. Debe habilitar la función de puerta de enlace de salida estática en el clúster antes de habilitar una puerta de enlace de salida de complemento de Istio.

Puede crear varias puertas de enlace de salida de complementos de Istio en diferentes espacios de nombres, usando Deployment o Servicename de su elección, con un máximo de 500 puertas de enlace de salida por clúster.

Antes de solucionar problemas

Antes de continuar, realice las siguientes acciones:

  • Instale Azure CLI aks-preview versión 14.0.0b2 o posterior para habilitar la puerta de enlace de salida de Istio.
  • Habilite la característica Puerta de enlace de salida estática en el clúster, cree un grupo de agentes del modo gatewayy configure un StaticGatewayConfiguration recurso personalizado.

Solución de problemas de errores de redes y firewall

Paso 1: Asegúrese de que no haya ningún firewall ni reglas de tráfico saliente bloquee el tráfico de salida.

Si usa Azure Firewall, reglas del grupo de seguridad de red (NSG) u otras restricciones de tráfico saliente, asegúrese de que los intervalos IP de la puerta de enlace de salida del complemento Istio estén incluidos en la lista de permitidos para la comunicación de salida.

Paso 2: Comprobación del complemento cluster Container Networking Interface (CNI)

Dado que la puerta de enlace de salida estática no se admite actualmente en clústeres de Azure CNI Pod Subnet, tampoco se puede usar la puerta de enlace de salida del complemento Istio en estos clústeres.

Resolución de incidencias en el aprovisionamiento de la puerta de enlace de salida

Paso 1: Verificar que se han aprovisionado la implementación y el servicio de la puerta de enlace de salida de Istio

Cada puerta de enlace de salida de Istio debe tener implementaciones y servicios aprovisionados respectivamente. Compruebe que la implementación y el servicio de la puerta de enlace de salida de Istio se aprovisionan mediante la ejecución de los siguientes comandos:

kubectl get deployment $ISTIO_EGRESS_DEPLOYMENT_NAME -n $ISTIO_EGRESS_NAMESPACE
kubectl get service $ISTIO_EGRESS_NAME -n $ISTIO_EGRESS_NAMESPACE

El nombre de la implementación tiene este formato: <istio-egress-gateway-name>-<asm-revision>. Por ejemplo, si el nombre de la puerta de enlace de salida es aks-istio-egressgateway y la revisión del complemento Istio es asm-1-24, el nombre de la implementación es aks-istio-egressgateway-asm-1-24.

Debería ver un servicio de tipo ClusterIP para la puerta de enlace de salida de Istio con un VIP de servicio asignado. El nombre del servicio es el mismo que el nombre de la puerta de enlace de salida de Istio, sin ningún revision anexado, como aks-istio-egressgateway.

Paso 2: Asegurarse de que los controladores de admisión no bloquean el aprovisionamiento de salida de Istio

Asegúrese de que los webhooks autogestionados de mutación y validación no bloqueen el aprovisionamiento de los recursos del gateway de salida de Istio. Dado que la puerta de enlace de salida de Istio se puede implementar en espacios de nombres administrados por el usuario, el aplicador de admisiones de AKS no puede impedir que los controladores de admisión personalizados afecten a los recursos de puerta de enlace de salida de Istio.

Paso 3: Comprobar que el nombre de la puerta de enlace de salida del complemento Istio es válido

Los nombres de puerta de enlace de salida de Istio deben:

  • Tener 63 caracteres o menos de longitud.
  • Solo contienen caracteres alfanuméricos en minúsculas, ., y -.
  • Comience y termine con un carácter alfanumérico en minúsculas.
  • Ser nombres válidos del sistema de nombres de dominio (DNS).

La expresión regular para las validaciones de nombres de salida en Istio es ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$.

Paso 4: Inspeccionar los componentes del gateway de salida estático si no están listas las implementaciones de salida de Istio

Si los componentes de la puerta de enlace de salida estática, como el kube-egress-gateway-cni-manager, fallan, o hay otros problemas con la asignación de IP de salida estática, podría fallar el aprovisionamiento de la puerta de enlace de salida de Istio. En este caso, solucione los errores de puerta de enlace de salida estática o la configuración incorrecta.

Solución de problemas relacionados con errores o configuraciones incorrectas de la puerta de enlace de salida estática.

Paso 1: Inspección de la puerta de enlace de salida de Istio StaticGatewayConfiguration

Asegúrese de que la StaticGatewayConfiguration puerta de enlace de salida del complemento Istio tiene una configuración válida y no se elimina:

  1. Compruebe el gatewayConfigurationName para esa puerta de enlace de salida para encontrar el nombre del StaticGatewayConfiguration para una puerta de enlace de salida de complemento de Istio.

    az aks show -g $RESOURCE_GROUP -n $CLUSTER_NAME -o json | jq '.serviceMeshProfile.istio.components.egressGateways' | grep $ISTIO_EGRESS_NAME -B1
    
  2. Compruebe que el pod spec de la puerta de enlace de salida de complemento Istio tiene la kubernetes.azure.com/static-gateway-configuration anotación establecida en el gatewayConfigurationName para esa puerta de enlace de salida de complemento de Istio.

    kubectl get pod $ISTIO_EGRESS_POD_NAME -n $ISTIO_EGRESS_NAMESPACE -o jsonpath={.metadata.annotations."kubernetes\.azure\.com\/static-gateway-configuration"}
    

Paso 2: Asegúrese de que se aprovisiona un egressIpPrefix para StaticGatewayConfiguration

Si los pods de puerta de enlace de salida de Istio están bloqueados en ContainerCreating, es posible que los pods kube-egress-gateway-cni-manager impidan que el contenedor istio-proxy se cree porque StaticGatewayConfiguration aún no tiene un egressIpPrefix asignado. Para comprobar si se le asigna un egressIpPrefix, verifique el status del StaticGatewayConfiguration para esa puerta de enlace de salida de Istio. Para ver si hay errores con el egressIpPrefix aprovisionamiento, ejecute el comando kubectl describe contra el StaticGatewayConfiguration.

Nota:

Puede tardar hasta unos cinco minutos en asignarse un egressIpPrefix a una puerta de enlace de salida StaticGatewayConfiguration estática.

kubectl get staticgatewayconfiguration $ISTIO_SGC_NAME -n $ISTIO_EGRESS_NAMESPACE -o jsonpath='{.status.egressIpPrefix}'
kubectl describe staticgatewayconfiguration $ISTIO_SGC_NAME -n $ISTIO_EGRESS_NAMESPACE

También puede comprobar los registros del kube-egress-gateway-cni-manager pod que se ejecuta en el nodo del pod de salida de Istio con errores. Si hay problemas con egressIpPrefix el aprovisionamiento o si aún no se asigna un prefijo IP después de aproximadamente cinco minutos, es posible que tenga que continuar depurando la puerta de enlace de salida estática.

Paso 3: Asegúrese de que StaticGatewayConfiguration hace referencia a un grupo de agentes de puerta de enlace válido

Verifique que el spec.gatewayNodepoolName para el StaticGatewayConfiguration de cada puerta de enlace de salida de Istio haga referencia a un grupo de agentes válido del modo Gateway en el clúster. Si alguna puerta de enlace StaticGatewayConfiguration de salida de complemento de Istio hace referencia a ella a través de spec.gatewayNodepoolName, no debe eliminar un Gateway grupo de agentes.

Paso 4: Intente enviar una solicitud externa desde la puerta de enlace de salida de Istio

Para validar que las solicitudes del gateway de salida de Istio se enrutan correctamente a través del grupo de nodos del gateway de salida estática, puede usar el comando kubectl debug para crear un contenedor efímero de Kubernetes y verificar la dirección IP de origen de las solicitudes desde el pod de salida de Istio. Asegúrese de establecer outboundTrafficPolicy.mode temporalmente en ALLOW_ANY para que la puerta de enlace de salida pueda acceder a ifconfig.me. Como práctica de seguridad recomendada, sugerimos volver a establecer outboundTrafficPolicy.mode en REGISTRY_ONLY después de la depuración.

kubectl debug -it --image curlimages/curl $ISTIO_EGRESS_POD_NAME -n $ISTIO_EGRESS_NAMESPACE -- curl ifconfig.me

La dirección IP de origen devuelta debe coincidir con la egressIpPrefix de la StaticGatewayConfiguration puerta de enlace de salida de Istio asociada. Si la solicitud falla o la dirección IP de origen devuelta no coincide con egressIpPrefix, intente reiniciar la implementación del gateway de salida de Istio o depurar posibles problemas con el gateway de salida estática.

Paso 5: Intentar enviar una solicitud desde un pod no inyectado al servicio externo

Otra manera de identificar si el problema se debe a la puerta de enlace de salida del complemento Istio o a la puerta de enlace de salida estática es enviar una solicitud directamente desde un pod no insertado (fuera de la malla de Istio). Puede usar la aplicación de ejemplo curl. En spec.template.metadata.annotations, establezca la anotación kubernetes.azure.com/static-gateway-configuration en gatewayConfigurationName igual para la puerta de enlace de salida del complemento Istio.

Si las solicitudes del pod no inyectado fallan, pruebe a depurar posibles problemas con el gateway de salida estático. Si las solicitudes del pod sin inyectar se realizan correctamente, compruebe las configuraciones del gateway de salida de Istio.

Paso 6: Intente reiniciar la implementación de la puerta de enlace de salida de Istio

Para que los cambios en ciertos StaticGatewayConfiguration campos, tales como defaultRoute y excludeCidrs, surtan efecto, tiene que reiniciar los pods de la puerta de enlace de salida del add-on Istio.

Puede rebotar el pod desencadenando un reinicio de la implementación de la puerta de enlace de salida:

kubectl rollout restart deployment $ISTIO_EGRESS_DEPLOYMENT_NAME -n $ISTIO_EGRESS_NAMESPACE

Paso 7: Intente crear una nueva StaticGatewayConfiguration para el gateway de egreso del complemento Istio

Si el StaticGatewayConfiguration para la puerta de enlace de salida del complemento Istio tiene un error, intente crear un nuevo StaticGatewayConfiguration recurso personalizado en el mismo espacio de nombres. A continuación, ejecute el comando az aks mesh enable-egress-gateway para actualizar el gatewayConfigurationName. Se recomienda esperar hasta que al nuevo StaticGatewayConfiguration se le asigne un egressIpPrefix.

az aks mesh enable-egress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --istio-egressgateway-name $ISTIO_EGRESS_NAME --istio-egressgateway-namespace $ISTIO_EGRESS_NAMESPACE --gateway-configuration-name $NEW_ISTIO_SGC_NAME

Después de actualizar la puerta de enlace de salida para usar el nuevo StaticGatewayConfiguration, si ninguna otra puerta de enlace de salida del complemento Istio la usa, debería poder eliminar el anterior StaticGatewayConfiguration.

Paso 8: Depurar la puerta de enlace de egreso estática

Si los errores con el enrutamiento de salida a través de la puerta de enlace de salida del complemento Istio persisten incluso después de comprobar que el enrutamiento de salida de Istio está configurado correctamente, podría haber un problema de infraestructura o red subyacente con la puerta de enlace de salida estática. Para más información, consulte Configurar puerta de enlace de salida estática en Azure Kubernetes Service (AKS).

Solución de problemas de configuración de salida de Istio y recursos personalizados

Para obtener más información sobre la configuración de egresos de Istio, consulte Puertas de enlace de egresos.

Nota:

La API Gateway no es compatible actualmente con la puerta de enlace de salida del complemento Istio. Debe configurar la puerta de enlace con recursos personalizados de Istio para recibir soporte técnico de Azure para problemas relacionados con la puerta de enlace de salida de Istio.

Paso 1: Habilitar el registro de acceso de Envoy

Puede habilitar el registro de acceso de Envoy a través de Istio MeshConfig o Telemetry API para inspeccionar el tráfico que fluye a través de la puerta de enlace de salida.

Paso 2: Inspeccionar el gateway de salida de Istio y los registros de Istiod

Para inspeccionar los registros del istio-proxy contenedor de la puerta de enlace de salida del complemento Istio, ejecute el siguiente comando:

kubectl logs $ISTIO_EGRESS_POD_NAME -n $ISTIO_EGRESS_NAMESPACE

Si ve el info Envoy proxy is ready mensaje en los registros, indica que el pod de puerta de enlace de salida de Istio puede comunicarse con istiod y está listo para atender el tráfico.

También recomendamos inspeccionar los registros del plano de control en busca de errores de Envoy relacionados con la actualización de la configuración del gateway de salida de Istio.

Paso 3: Validar la configuración de la puerta de enlace de Istio

Asegúrese de que el recurso personalizado Gateway en selector esté configurado correctamente. Por ejemplo, si el objeto Gateway para el gateway de salida de Istio usa el selector istio:, debe coincidir con el valor de la etiqueta istio en el servicio spec de Kubernetes para ese gateway de salida.

Por ejemplo, para una puerta de enlace de salida con el siguiente servicio specde Kubernetes :

apiVersion: v1
kind: Service
metadata:
  annotations:
    meta.helm.sh/release-name: asm-egx-asm-egress-test
    meta.helm.sh/release-namespace: istio-egress-ns
  creationTimestamp: "2025-04-19T21:50:08Z"
  labels:
    app: asm-egress-test
    azureservicemesh/istio.component: egress-gateway
    istio: asm-egress-test

El Gateway recurso personalizado debe configurarse de la siguiente manera:

apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
  name: istio-egressgateway
spec:
  selector:
    istio: asm-egress-test

Paso 4: Asegúrese de que se crea un recurso personalizado ServiceEntry y tiene habilitada una resolución DNS

Asegúrese de crear un ServiceEntry recurso personalizado para el servicio externo específico al que la puerta de enlace de salida reenvía las solicitudes. Incluso si el outboundTrafficPolicy.mode se establece en ALLOW_ANY, puede que sea necesario crear un ServiceEntry recurso personalizado, ya que los Gateway, VirtualService y DestinationRule recursos personalizados pueden hacer referencia a un host externo a través de un ServiceEntry nombre. Además, al configurar un recurso personalizado para una puerta de enlace de salida de Istio, debe establecer spec.resolution a DNS.

Paso 5: Comprobación del espacio de nombres del secreto de Kubernetes para la originación de mTLS de puerta de enlace de salida

Si intenta configurar la puerta de enlace de salida de Istio para realizar la originación mutua de TLS (mTLS), asegúrese de que el objeto secreto de Kubernetes se encuentra en el mismo espacio de nombres donde se implementa la puerta de enlace de salida.

Paso 6: Asegúrese de que las aplicaciones envíen solicitudes HTTP de texto sin cifrar para la iniciación de TLS y políticas de autorización de la puerta de enlace de salida.

Para originar TLS y aplicar directivas de autorización en la puerta de enlace de salida, las cargas de trabajo de la malla deben enviar solicitudes HTTP. A continuación, los servidores proxy sidecar pueden usar mTLS al reenviar solicitudes a la puerta de enlace de salida. La puerta de enlace de salida finalizará la conexión mTLS y originará una conexión TLS/HTTPS al host de destino.

Aviso de declinación de responsabilidades sobre la información de terceros

Los productos de terceros que describe este artículo son fabricados por empresas independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.

Descargo de responsabilidad sobre contacto con terceros

Microsoft proporciona información de contacto de terceros para ayudarle a encontrar información adicional sobre este tema. Esta información de contacto puede cambiar sin previo aviso. Microsoft no garantiza la exactitud de la información de contacto de terceros.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto a la comunidad de comentarios de Azure.