Solución de problemas generales del complemento de malla de servicio de Istio
En este artículo se describen las estrategias generales (que usan kubectl
, istioctl
y otras herramientas) para solucionar problemas relacionados con el complemento de malla de servicio Istio para Microsoft Azure Kubernetes Service (AKS). En este artículo también se proporciona una lista de posibles mensajes de error, motivos de repeticiones de errores y recomendaciones para resolver estos errores.
Requisitos previos
La herramienta kubectl de Kubernetes o una herramienta similar para conectarse al clúster
Nota: Para instalar kubectl mediante la CLI de Azure, ejecute el comando az aks install-cli .
La herramienta de línea de comandos Istio istioctl
La herramienta Dirección URL de cliente (cURL)
Lista de comprobación de solución de problemas: Uso de kubectl
Los siguientes pasos de solución de problemas usan varios kubectl
comandos para ayudarle a depurar pods bloqueados o errores en el demonio de Istio (Istiod).
Paso 1: Obtención de registros de pods de Istiod
Para obtener los registros de pod de Istiod, ejecute el siguiente comando kubectl logs :
kubectl logs --selector app=istiod --namespace aks-istio-system
Paso 2: Rebote (eliminación) de un pod
Es posible que tenga una buena razón para reiniciar un pod. Dado que Istiod es una implementación, es seguro eliminar simplemente el pod mediante la ejecución del comando kubectl delete :
kubectl delete pods <istio-pod> --namespace aks-istio-system
El pod de Istio se administra mediante una implementación. Se vuelve a crear y volver a implementar automáticamente después de eliminarlo directamente. Por lo tanto, eliminar el pod es un método alternativo para reiniciar el pod.
Nota:
Como alternativa, puede reiniciar la implementación directamente ejecutando el siguiente comando kubectl rollout restart :
kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system
Paso 3: Comprobación del estado de los recursos
Si Istiod no está programado o si el pod no responde, es posible que desee comprobar el estado de la implementación y los conjuntos de réplicas. Para ello, ejecute el comando kubectl get :
kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]
El estado del recurso actual aparece cerca del final de la salida. La salida también puede mostrar eventos asociados a su bucle de controlador.
Paso 4: Obtención de tipos de definición de recursos personalizados
Para ver los tipos de definiciones de recursos personalizados (CRD) que usa Istio, ejecute el kubectl get
comando :
kubectl get crd | grep istio
Para enumerar todos los nombres de recursos basados en una CRD determinada, ejecute el siguiente kubectl get
comando:
kubectl get <crd-type> --all-namespaces
Paso 5: Ver la lista de pods de Istiod
Para ver la lista de pods de Istiod, ejecute el siguiente kubectl get
comando:
kubectl get pod --namespace aks-istio-system --output yaml
Paso 6: Obtener más información sobre la configuración de Envoy
Si tiene problemas de conectividad entre pods, obtenga más información sobre la configuración de Envoy ejecutando el siguiente comando kubectl exec en el puerto de administración de Envoy:
kubectl exec --namespace <pod-namespace> \
"$(kubectl get pods \
--namespace <pod-namespace> \
--selector app=sleep \
--output jsonpath='{.items[0].metadata.name}')" \
--container sleep \
-- curl -s localhost:15000/clusters
Paso 7: Obtener los registros de sidecar para los sidecars de origen y destino
Recupere los registros de sidecar para los sidecars de origen y destino mediante la ejecución del siguiente kubectl logs
comando dos veces (la primera vez para el pod de origen y la segunda para el pod de destino):
kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy
Lista de comprobación de solución de problemas: Uso de istioctl
En los pasos de solución de problemas siguientes se describe cómo recopilar información y depurar el entorno de malla mediante la ejecución de varios istioctl
comandos.
Todos los istioctl
comandos deben ejecutarse junto con la --istioNamespace aks-istio-system
marca para que apunte a la instalación del complemento de AKS de Istio.
Advertencia
Algunos istioctl
comandos envían solicitudes a todos los sidecars.
Nota:
Antes de empezar, observe que la mayoría istioctl
de los comandos requieren que conozca la revisión del plano de control. Puede obtener esta información del sufijo de las implementaciones de Istiod o los pods, o bien puede ejecutar el siguiente comando istioctl tag list :
istioctl tag list
Paso 1: Asegurarse de que Istio está instalado correctamente
Para comprobar que tiene una instalación correcta del complemento istio, ejecute el siguiente comando istioctl verify-install :
istioctl verify-install --istioNamespace aks-istio-system --revision <tag>
Paso 2: Análisis de espacios de nombres
Para analizar todos los espacios de nombres o para analizar un espacio de nombres específico, ejecute el siguiente comando istioctl analyze :
istioctl analyze --istioNamespace aks-istio-system \
--revision <tag> \
[--all-namespaces | --namespace <namespace-name>] \
[--failure-threshold {Info | Warning | Error}]
Paso 3: Obtener el estado del proxy
Para recuperar el estado del proxy, ejecute el siguiente comando istioctl proxy-status :
istioctl proxy-status pod/<pod-name> \
--istioNamespace aks-istio-system \
--revision <tag> \
--namespace <pod-namespace>
Paso 4: Descargar la configuración del proxy
Para descargar la configuración del proxy, ejecute el siguiente comando istioctl proxy-config all :
istioctl proxy-config all <pod-name> \
--istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--output json
Nota:
En lugar de usar la all
variante del istioctl proxy-config
comando, puede usar una de las siguientes variantes:
- istioctl proxy-config ecds (servicio de detección de configuración de extensión)
- istioctl proxy-config bootstrap
- clúster de proxy-config de istioctl
- punto de conexión de proxy-config de istioctl
- agente de escucha de proxy-config de istioctl
- registro de proxy-config de istioctl
- ruta de proxy-config de istioctl
- istioctl proxy-config secret
Paso 5: Comprobar el estado de inyección
Para comprobar el estado de inyección del recurso, ejecute el siguiente comando istioctl experimental check-inject :
istioctl experimental check-inject --istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--labels <label-selector> | <pod-name> | deployment/<deployment-name>
Paso 6: Obtener un informe de errores completo
Un informe de errores completo contiene la información más detallada. Sin embargo, la ejecución de este informe puede llevar mucho tiempo en un clúster grande porque incluye todos los pods. Puede limitar el informe de errores a determinados espacios de nombres. También puede limitar el informe a determinadas implementaciones, pods o selectores de etiquetas.
Para recuperar un informe de errores, ejecute el siguiente comando istioctl bug-report :
istioctl bug-report --istioNamespace aks-istio-system \
[--include <namespace-1>[, <namespace-2>[, ...]]]
Lista de comprobación de solución de problemas: Varios problemas
Paso 1: Corregir problemas de uso de recursos
Si encuentra un consumo elevado de memoria en Envoy, compruebe de nuevo la configuración de Envoy para obtener la recopilación de datos de estadísticas. Si va a personalizar las métricas de Istio a través de MeshConfig, recuerde que ciertas métricas pueden tener una cardinalidad alta y, por lo tanto, crear una superficie de memoria mayor. Otros campos de MeshConfig, como la simultaneidad, afectan al uso de la CPU y deben configurarse cuidadosamente.
De forma predeterminada, Istio agrega información sobre todos los servicios que están en el clúster a cada configuración de Envoy. El sidecar puede limitar el ámbito de esta adición a las cargas de trabajo que solo están dentro de espacios de nombres específicos. Para obtener más información, consulte Watch out for this Istio proxy sidecar memory pitfall ( Cuidado con este problema de memoria sidecar del proxy de Istio).
Por ejemplo, la siguiente Sidecar
definición en el aks-istio-system
espacio de nombres restringe la configuración de Envoy para todos los servidores proxy de la malla a aks-istio-system
y otras cargas de trabajo dentro del mismo espacio de nombres que esa aplicación específica:
apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
name: sidecar-restrict-egress
namespace: aks-istio-system # Needs to be deployed in the root namespace.
spec:
egress:
- hosts:
- "./*"
- "aks-istio-system/*"
También puede intentar usar la opción DiscoverySelectors de Istio en MeshConfig. La discoverySelectors
opción contiene una matriz de selectores de Kubernetes y puede restringir el reconocimiento de Istiod a espacios de nombres específicos (en lugar de todos los espacios de nombres del clúster). Para más información, consulte Uso de selectores de detección para configurar espacios de nombres para la malla de servicio de Istio.
Paso 2: Corregir problemas de configuración incorrecta de tráfico y seguridad
Para solucionar problemas comunes de administración del tráfico y configuración incorrecta de seguridad que encuentran los usuarios de Istio con frecuencia, consulte Problemas de administración del tráfico y Problemas de seguridad en el sitio web de Istio.
Para obtener vínculos a información sobre otros problemas, como la inyección de sidecar, la observabilidad y las actualizaciones, consulte Problemas comunes en el sitio de documentación de Istio.
Paso 3: Evitar la sobrecarga de CoreDNS
Los problemas relacionados con la sobrecarga de CoreDNS pueden requerir que cambie cierta configuración de DNS de Istio, como el dnsRefreshRate
campo de la definición meshConfig de Istio.
Paso 4: Corregir las condiciones de carrera de pods y sidecar
Si el pod de la aplicación se inicia antes de que se inicie Envoy sidecar, es posible que la aplicación deje de responder o que se reinicie. Para obtener instrucciones sobre cómo evitar este problema, consulte Pod o contenedores comienzan con problemas de red si istio-proxy no está listo. En concreto, establecer el holdApplicationUntilProxyStarts
campo MeshConfig en defaultConfig
para true
puede ayudar a evitar estas condiciones de carrera.
Paso 5: Configurar una entrada de servicio al usar un proxy HTTP para el tráfico saliente
Si el clúster usa un proxy HTTP para el acceso saliente a Internet, tendrá que configurar una entrada de servicio. Para más información, consulte Compatibilidad con proxy HTTP en Azure Kubernetes Service.
Mensajes de error
La tabla siguiente contiene una lista de posibles mensajes de error (para implementar el complemento, habilitar puertas de enlace de entrada y realizar actualizaciones), el motivo por el que se produjo un error y recomendaciones para resolver el error.
Error | Motivo | Recomendaciones |
---|---|---|
Azure service mesh is not supported in this region |
La característica no está disponible en la región durante la versión preliminar (está disponible en la nube pública, pero no en la nube soberana). | Consulte la documentación pública sobre la característica en las regiones admitidas. |
Missing service mesh mode: {} |
No estableció la propiedad mode en el perfil de malla de servicio de la solicitud de clúster administrada. | En el campo ServiceMeshProfile de la managedCluster solicitud de API, establezca la mode propiedad Istio en . |
Invalid istio ingress mode: {} |
Se establece un valor no válido para el modo de entrada al agregar entradas dentro del perfil de malla de servicio. | Establezca el modo de entrada en la solicitud External de API en o Internal . |
Too many ingresses for type: {}. Only {} ingress gateway are allowed |
Intentó crear demasiadas entradas en el clúster. | Cree, como máximo, una entrada externa y una entrada interna en el clúster. |
Istio profile is missing even though Service Mesh mode is Istio |
Ha habilitado el complemento Istio sin proporcionar el perfil de Istio. | Al habilitar el complemento Istio, especifique información específica del componente (puerta de enlace de entrada, CA del complemento) para el perfil de Istio y la revisión determinada. |
Istio based Azure service mesh is incompatible with feature %s |
Intentó usar otra extensión, complemento o característica que actualmente no es compatible con el complemento Istio (por ejemplo, Open Service Mesh). | Antes de habilitar el complemento Istio, deshabilite primero la otra característica y limpie todos los recursos correspondientes. |
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority |
No proporcionó todos los parámetros necesarios para la CA del complemento. | Proporcione todos los parámetros necesarios para la característica de entidad de certificación (CA) del complemento (para obtener más información, consulte Configuración del complemento de malla de servicio basado en Istio con certificados de ENTIDAD de certificación del complemento). |
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature |
No habilitó el complemento Secretos de AKS-Store CSI Driver antes de usar la CA del complemento. | Configure Azure Key Vault antes de usar la característica de entidad de certificación del complemento. |
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' |
Ha usado un identificador de recurso de AKS no válido. | Consulte el formato mencionado en el mensaje de error para establecer un identificador válido de Azure Key Vault para la característica de ca del complemento. |
Kubernetes version is missing in orchestrator profile |
Falta la solicitud de la versión de Kubernetes. Por lo tanto, no puede realizar una comprobación de compatibilidad de versiones. | Asegúrese de proporcionar la versión de Kubernetes en las operaciones de actualización de complementos de Istio. |
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' |
Intentó habilitar una revisión de complemento de Istio que no es compatible con la versión actual del clúster de Kubernetes. | Use el comando az aks mesh get-upgrades de la CLI de Azure para saber qué revisiones de complemento de Istio están disponibles para el clúster actual. |
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' |
Está usando una versión de Kubernetes no compatible. | Actualice a una versión de Kubernetes compatible. |
ServiceMeshProfile revision field must not be empty |
Intentó actualizar el complemento istio sin especificar una revisión. | Especifique la revisión y todos los demás parámetros (para obtener más información, consulte Actualización de revisión secundaria). |
Request exceeds maximum allowed number of revisions (%d) |
Intentó realizar una operación de actualización aunque ya (%d) hay revisiones instaladas. |
Complete o revierte la operación de actualización antes de actualizar a otra revisión. |
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information |
Intentó acceder a la información de revisión y compatibilidad antes de completar o revertir la operación de actualización actual. | Complete o revierte la operación de actualización actual antes de recuperar la información de revisión y compatibilidad. |
Referencias
Para obtener sugerencias generales sobre la depuración de Istio, consulte Herramientas de diagnóstico de Istio.
Solución de problemas del complemento mesh de istio service meshConfig
Solución de problemas de puerta de enlace de entrada de complemento de Istio Service Mesh
Solución de problemas de certificado de ca del complemento de malla de servicio Istio
Aviso de declinación de responsabilidades sobre la información de terceros
Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías 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.
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 con los comentarios de la comunidad de Azure.