Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 Service
name
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ón14.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
gateway
y configure unStaticGatewayConfiguration
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:
Compruebe el
gatewayConfigurationName
para esa puerta de enlace de salida para encontrar el nombre delStaticGatewayConfiguration
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
Compruebe que el pod
spec
de la puerta de enlace de salida de complemento Istio tiene lakubernetes.azure.com/static-gateway-configuration
anotación establecida en elgatewayConfigurationName
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 spec
de 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.