Compartir a través de


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.

  1. 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 y alb-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

  2. 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:

  1. 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.

  2. 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: