Resuelve problemas de asistencia de VM en Anthos Service Mesh
Los siguientes pasos y registros son útiles para solucionar problemas con la asistencia de la VM de Anthos Service Mesh.
Depura la VM
Si ves que las instancias de VM están en ejecución, pero no son accesibles desde la malla, realiza los siguientes pasos en la instancia de VM.
Verifica el agente
Verifica el estado del proxy de Envoy:
curl localhost:15000/ready -v
Verifica el registro de errores de Envoy
less /var/log/envoy/envoy.err.log
Verifica si hay errores de
service-proxy-agent
:journalctl -u service-proxy-agent
Verifica el
syslog
en los registros de Google Cloud's operations suite para la instancia o en la VM en/var/log/syslog
para Debian y/var/log/messages
para Centos.
Verifica el estado del proxy
Para depurar la configuración del proxy, ejecuta el siguiente comando en la VM:
curl localhost:15000/config_dump > config.out
Copia ese archivo y ejecuta el siguiente comando:
istioctl proxy-config [cluster|route|listener] --file config.out
Errores de token no válidos
Es posible que veas un error similar al siguiente en el registro de errores de Envoy:
E0217 17:59:17.206995798 2411 oauth2_credentials.cc:152] Call to http server ended with error 500 [{
"error": "invalid_target",
"error_description": "federated token response does not have access token. {\"error\":\"invalid_grant\",\"error_description\":\"JWT expired.\"}",
"error_uri": ""
}].
En ese caso, verifica si el token de /var/run/secrets/tokens/istio-token
en la VM caducó y confirma que el valor exp
(segundos del ciclo de entrenamiento) no haya transcurrido:
cat /var/run/secrets/tokens/istio-token | cut -d '.' -f2 | base64 -d | python -m json.tool
{
...
"azp": "...",
"email": "example-service-account@developer.gserviceaccount.com",
"email_verified": true,
"exp": 1613995395,
"google": {
"compute_engine": {
"instance_creation_timestamp": 1613775765,
"instance_id": "5678",
"instance_name": "vm-instance-03-0mqh",
"project_id": "...",
"project_number": 1234,
"zone": "us-central1-c"
}
},
"iat": ...,
"iss": "https://accounts.google.com",
"sub": "..."
}
Información de advertencia de distribución del SO no compatible
En Verifica el agente, si aparece un mensaje de advertencia similar al siguiente en el registro service-proxy-agent:
E0217 17:59:17.206995798 2021-04-09T21:21:29.6091Z service-proxy-agent Warn
Detected image is unsupported: [Ubuntu|Fedora|Suse]. Envoy may not work correctly.
Esto significa que tu distribución de Linux podría no ser compatible, lo que podría hacer que tu proxy tenga un comportamiento inesperado.
Depura el clúster
Sigue estos pasos para solucionar los problemas con tu clúster.
Verifica que funcione el registro automático
Comprueba el
WorkloadEntry
queistiod
genera automáticamente:kubectl get workloadentry -n WORKLOAD_NAMESPACE
Además, puedes verificar que exista el navegador de objetos de Kubernetes.
Si no existe, verifica los errores en los registros
istiod
, que deberían estar disponibles para ti en Google Cloud's operations suite. Como alternativa, puedes recuperarlos directamente:kubectl -n istio-system get pods -l app=istiod
El resultado esperado es similar al siguiente:
NAME READY STATUS RESTARTS AGE istiod-asm-190-1-7f6699cfb-5mzxw 1/1 Running 0 5d13h istiod-asm-190-1-7f6699cfb-pgvpf 1/1 Running 0 5d13h
Configura la variable de entorno del pod y úsala para exportar los registros:
export ISTIO_POD=istiod-asm-190-1-7f6699cfb-5mzxw kubectl logs -n istio-system ${ISTIO_POD} | grep -i 'auto-register\|WorkloadEntry'
Verifica los proxies conectados
Puedes usar el comando proxy-status
para enumerar todos los proxies conectados, incluidos
los de las VM:
istioctl proxy-status
El resultado debe mostrar proxies conectados similares a estos:
NAME CDS LDS EDS RDS ISTIOD VERSION
details-v1-5f449bdbb9-bhl8d.default SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-5mzxw 1.9.0-asm.1
httpbin-779c54bf49-647vd.default SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-pgvpf 1.9.0-asm.1
istio-eastwestgateway-5b6d4ddd9d-5rzx2.istio-system SYNCED SYNCED SYNCED NOT SENT istiod-asm-190-1-7f6699cfb-pgvpf 1.9.0-asm.1
istio-ingressgateway-66b6ddd7cb-ctb6b.istio-system SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-pgvpf 1.9.0-asm.1
istio-ingressgateway-66b6ddd7cb-vk4bb.istio-system SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-5mzxw 1.9.0-asm.1
vm-instance-03-39b3.496270428946 SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-pgvpf 1.9.0
vm-instance-03-nh5k.496270428946 SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-pgvpf 1.9.0
vm-instance-03-s4nl.496270428946 SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-5mzxw 1.9.0
Para obtener más información sobre las opciones del comando, consulta istioctl proxy-config.
Verifica la configuración de Workload Identity
Verifica el estado mesh
para detectar posibles errores en tu clúster. Ten en cuenta que se requiere la versión más reciente de gcloud. Para obtener más información, consulta cómo actualizar a la versión más reciente.
gcloud alpha container hub mesh describe --project=PROJECT_ID
Una configuración válida tendrá un código de estado de OK
para el clúster miembro:
createTime: '2021-06-15T21:56:10.221032150Z'
featureState:
detailsByMembership:
projects/<your project number>/locations/global/memberships/<your cluster name>:
code: OK
description: Revision(s) ready for use: istiod-asm-195-2.
updateTime: 2021-06-15T21:56:10.221032402Z
lifecycleState: ENABLED
name: projects/<your project name>/locations/global/features/servicemesh
servicemeshFeatureSpec: {}
updateTime: '2021-06-15T21:56:10.221032402Z'
Si la VM se configuró de forma incorrecta, el código de estado será WARNING
con detalles adicionales en la descripción:
createTime: '2021-06-15T22:56:10.227167202Z'
featureState:
detailsByMembership:
projects/<your project number>/locations/global/memberships/<your cluster name>:
code: WARNING
description: |-
Revision(s) ready for use: istiod-asm-195-2.
WorkloadGroup <namespace>/<workloadgroup name> missing ServiceAccount field, please see https://cloud.google.com/service-mesh/docs/troubleshooting/troubleshoot-vms#verify_the_workloadgroup_is_set_up_correctly.
servicemeshFeatureState: {}
updateTime: '2021-06-15T22:56:00.220164192Z'
lifecycleState: ENABLED
name: projects/<your project name>/locations/global/features/servicemesh
servicemeshFeatureSpec: {}
updateTime: '2021-06-15T22:56:10.227167402Z'
Verifica que el proveedor de identidad esté configurado de forma correcta
Comprueba los campos de recursos de IdentityProvider
:
kubectl describe identityprovider
Asegúrate de que los campos cumplan con estos requisitos:
- El campo
serviceAccount
está configurado comorequest.auth.claims["email"]
- El campo
issuerURI
está configurado comohttps://accounts.google.com
(actualmente, solo se admite Google como el issuerURI). El campo
name
del proveedor en los metadatos debe establecerse comogoogle
, que es el único proveedor compatible en la actualidad.Un ejemplo válido de CR de
IdentityProvider
:apiVersion: security.cloud.google.com/v1alpha1 kind: IdentityProvider metadata: name: google spec: authentication: oidc: issuerUri: https://accounts.google.com serviceAccount: request.auth.claims["email"]
Verifica que WorkloadGroup
esté configurado de forma correcta
Verifica el WorkloadGroup
:
kubectl get workloadgroup -n WORKLOAD_NAMESPACE
Asegúrate de que los resultados cumplan con estos requisitos:
- El campo
serviceAccount
se configuró de forma correcta, por ejemplo,373206437219-compute@developer.gserviceaccount.com
, en el que la cuenta es la misma que la cuenta de servicio que usa la instancia de VM. security.cloud.google.com/IdentityProvider
, en el campo de anotación, está configurado. P. ej.,security.cloud.google.com/IdentityProvider: google
.El grupo de carga de trabajo hace referencia a un
IdentityProvider
válido, que puedes verificar si compruebas el proveedor de identidad existente:kubectl describe identityprovider
El resultado debería ser una lista de proveedores existentes como el siguiente:
NAME AGE google 39m
Revisa el campo
security.cloud.google.com/IdentityProvider
enWorkloadGroup
y comprueba si el proveedor está incluido en la lista de proveedores existentes.Un ejemplo válido de CR de
WorkloadGroup
:apiVersion: networking.istio.io/v1alpha3 kind: WorkloadGroup metadata: name: wg-a namespace: foo spec: metadata: annotations: security.cloud.google.com/IdentityProvider: google labels: app: wg-a template: ports: grpc: 3550 http: 8080 serviceAccount: 373206437219-compute@developer.gserviceaccount.com
Se encontró un error interno
Si recibes el mensaje Internal Error Found
, consulta Obtén asistencia.
Guía de solución de problemas de VM de Istio
Si deseas obtener pasos adicionales para solucionar problemas, consulta Depura máquinas virtuales.