Resolución de problemas en Application Gateway para contenedores
En este artículo se proporcionan algunas instrucciones para ayudarle a solucionar problemas comunes en Puerta de enlace de aplicaciones para contenedores.
Búsqueda de la versión del controlador ALB
Antes de empezar a solucionar problemas, determine la versión del controlador ALB que se implementa. Puede determinar qué versión del controlador ALB se está ejecutando mediante el siguiente comando kubectl (asegúrese de sustituir el espacio de nombres si no usa el espacio de nombres predeterminado de azure-alb-system
):
kubectl get deployment -n azure-alb-system -o wide
Ejemplo:
NOMBRE | LISTO | ACTUALIZADO | AVAILABLE | AGE | CONTENEDORES | IMÁGENES | SELECTOR |
---|---|---|---|---|---|---|---|
alb-controller | 2/2 | 2 | 2 | 18d | alb-controller | mcr.microsoft.com/application-lb/images/alb-controller:1.0.2 | app=alb-controller |
alb-controller-bootstrap | 1/1 | 1 | 1 | 18d | alb-controller-bootstrap | mcr.microsoft.com/application-lb/images/alb-controller-bootstrap:1.0.2 | app=alb-controller-bootstrap |
En este ejemplo, la versión del controlador ALB es 1.0.2.
La versión del controlador ALB se puede actualizar ejecutando el comando helm upgrade alb-controller
. Para obtener más información, consulte Instalación del controlador ALB.
Sugerencia
La versión más reciente del controlador ALB se puede encontrar en las notas de la versión del controlador ALB.
Recopilación de registros del controlador ALB
Los registros se pueden recopilar del controlador ALB mediante el comando kubectl logs que hace referencia al pod del controlador ALB.
Obtención del nombre del pod del controlador ALB en ejecución
Ejecute el siguiente comando de kubectl. Asegúrese de sustituir el espacio de nombres si no usa el espacio de nombres predeterminado de
azure-alb-system
:kubectl get pods -n azure-alb-system
Debería ver una salida similar al ejemplo siguiente: Los nombres de pod pueden diferir ligeramente.
NOMBRE LISTO STATUS REINICIO AGE alb-controller-6648c5d5c-sdd9t 1/1 En ejecución 0 4d6h alb-controller-6648c5d5c-au234 1/1 En ejecución 0 4d6h alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 En ejecución 0 4d6h El controlador ALB usa una elección proporcionada por el administrador del entorno de ejecución del controlador para determinar un pod activo y en espera para lograr una alta disponibilidad.
Copie el nombre de cada pod alb-controller (no el pod de arranque, en este caso:
alb-controller-6648c5d5c-sdd9t
yalb-controller-6648c5d5c-au234
) y ejecute el siguiente comando para determinar el pod activo.kubectl logs alb-controller-6648c5d5c-sdd9t -n azure-alb-system -c alb-controller | grep "successfully acquired lease"
Debería ver lo siguiente si el pod es principal:
successfully acquired lease azure-alb-system/alb-controller-leader-election
Recopilación de los registros
Los registros del controlador ALB se devuelven en formato JSON.
Ejecute el siguiente comando kubectl reemplazando el nombre por el nombre del pod devuelto en el paso 1:
kubectl logs -n azure-alb-system alb-controller-6648c5d5c-sdd9t
Del mismo modo, puede redirigir la salida del comando existente a un archivo especificando el signo mayor que (>) y el nombre de archivo para escribir los registros en:
kubectl logs -n azure-alb-system alb-controller-6648c5d5c-sdd9t > alb-controller-logs.json
Errores de configuración
Puerta de enlace de aplicaciones para contenedores devuelve un código de estado 500.
Los escenarios en los que vería un código de error 500 en Puerta de enlace de aplicaciones para contenedores son los siguientes:
Entradas de back-end no válidas : un back-end se define como no válido en los escenarios siguientes:
- Hace referencia a un tipo desconocido o no admitido de recurso. En este caso, el estado de HTTPRoute tiene una condición con el motivo establecido en
InvalidKind
y el mensaje explica qué tipo de recurso es desconocido o no admitido. - Hace referencia a un recurso que no existe. En este caso, el estado de HTTPRoute tiene una condición con el motivo establecido en
BackendNotFound
y el mensaje explica que el recurso no existe. - Hace referencia a un recurso de otro espacio de nombres cuando la referencia no está permitida explícitamente por ReferenceGrant (o un concepto equivalente). En este caso, el estado de HTTPRoute tiene una condición con el motivo establecido en
RefNotPermitted
y el mensaje explica en qué referencia de espacio de nombres cruzado no se permite.
Por ejemplo, si un HTTPRoute tiene dos back-end especificados con pesos iguales, y uno no es válido, el 50 por ciento del tráfico debe recibir un 500.
- Hace referencia a un tipo desconocido o no admitido de recurso. En este caso, el estado de HTTPRoute tiene una condición con el motivo establecido en
No se encontraron puntos de conexión para todos los back-end: cuando no se encuentran puntos de conexión para todos los back-end a los que se hace referencia en HTTPRoute, se obtiene un código de error 500.
El recurso personalizado de Application Load Balancer no refleja el estado listo
Síntomas
El mensaje de estado del recurso personalizado ApplicationLoadBalancer indica continuamente "Application Gateway for Containers resource Application Gateway for Containers-name
está en proceso de actualización"»
Los siguientes registros se repiten en el pod alb-controller primario.
{"level":"info","version":"x.x.x","Timestamp":"2024-02-26T20:31:53.760150719Z","message":"Stream opened for config updates"}
{"level":"info","version":"x.x.x","operationID":"1ea7ffd4-b2c4-460b-bce7-4d3f855ce8d5","Timestamp":"2024-02-26T20:31:53.760313623Z","message":"Successfully sent config update request"}
{"level":"error","version":"x.x.x","error":"rpc error: code = PermissionDenied desc = ALB Controller with object id '5b26a949-297d-40c7-b10f-5d1cf2e3259d' does not have authorization to perform action on Application Gateway for Containers resource.Please check RBAC delegations to the Application Gateway for Containers resource.","Timestamp":"2024-02-26T20:31:53.769444995Z","message":"Unable to capture config update response"}
{"level":"info","version":"x.x.x","Timestamp":"2024-02-26T20:31:53.769504489Z","message":"Retrying to open config update stream"}
{"level":"info","version":"x.x.x","Timestamp":"2024-02-26T20:31:54.461487406Z","message":"Stream opened up for endpoint updates"}
{"level":"info","version":"x.x.x","operationID":"808825c2-b0a8-476b-b83a-8e7357c55750","Timestamp":"2024-02-26T20:31:54.462070039Z","message":"Successfully sent endpoint update request"}
{"level":"error","version":"x.x.x","error":"rpc error: code = PermissionDenied desc = ALB Controller with object id '5b26a949-297d-40c7-b10f-5d1cf2e3259d' does not have authorization to perform action on Application Gateway for Containers resource.Please check RBAC delegations to the Application Gateway for Containers resource.","Timestamp":"2024-02-26T20:31:54.470728646Z","message":"Unable to capture endpoint update response"}
{"level":"info","version":"x.x.x","Timestamp":"2024-02-26T20:31:54.47077373Z","message":"Retrying to open up endpoint update stream"}
El recurso de puerta de enlace de Kubernetes no puede obtener el token de la cadena de credenciales.
Síntomas
No se aplican cambios a HttpRoutes a Puerta de enlace de aplicaciones para contenedores.
Se devuelve el siguiente mensaje de error en el recurso Kubernetes Gateway y no se refleja ningún cambio para ningún recurso HttpRoute.
status:
conditions:
- lastTransitionTime: "2023-04-28T22:08:34Z"
message: The Gateway is not scheduled
observedGeneration: 2
reason: Scheduled
status: "False"
type: Scheduled
- lastTransitionTime: "2023-04-28T22:08:34Z"
message: "No addresses have been assigned to the Gateway : failed to get token
from credential chain: [FromAssertion(): http call(https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/oauth2/v2.0/token)(POST)
error: reply status code was 401:\n{\"error\":\"unauthorized_client\",\"error_description\":\"AADSTS70021:
No matching federated identity record found for presented assertion. Assertion
Issuer: 'https://azureregion.oic.prod-aks.azure.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/'.
Assertion Subject: 'system:serviceaccount:azure-application-lb-system:gateway-controller-sa'.
Assertion Audience: 'api://AzureADTokenExchange'. https://docs.microsoft.com/en-us/azure/active-directory/develop/workload-identity-federation\\r\\nTrace
ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\r\\nCorrelation ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\r\\nTimestamp:
2023-04-28 22:08:46Z\",\"error_codes\":[70021],\"timestamp\":\"2023-04-28 22:08:46Z\",\"trace_id\":\"08079978-7238-4ae3-9406-ba3b479db000\",\"correlation_id\":\"b2f10283-8dc6-4493-bb0e-b0cd009b17fb\",\"error_uri\":\"https://login.microsoftonline.com/error?code=70021\"}
DefaultAzureCredential: failed to acquire a token.\nAttempted credentials:\n\tEnvironmentCredential:
incomplete environment variable configuration. Only AZURE_TENANT_ID and AZURE_CLIENT_ID
are set\n\tManagedIdentityCredential: IMDS token request timed out\n\tAzureCLICredential:
fork/exec /bin/sh: no such file or directory]"
observedGeneration: 2
reason: AddressNotAssigned
status: "False"
type: Ready
Solución
Asegúrese de que las credenciales federadas de la identidad administrada para el pod del controlador ALB realicen cambios en Puerta de enlace de aplicaciones para contenedores configuradas en Azure. Puede encontrar instrucciones sobre cómo configurar credenciales federadas en las guías de inicio rápido:
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de