Sdílet prostřednictvím


Řešení potíží ve službě Application Gateway pro kontejnery

Tento článek obsahuje některé pokyny, které vám pomůžou vyřešit běžné problémy ve službě Application Gateway for Containers.

Vyhledání verze ovladače ALB

Než začnete řešit potíže, určete verzi nasazeného kontroleru ALB. Verzi řadiče ALB můžete zjistit pomocí následujícího příkazu kubectl (pokud nepoužíváte výchozí obor názvů azure-alb-system):

kubectl get deployment -n azure-alb-system -o wide

Příklad výstupu:

NAME PŘIPRAVENO AKTUÁLNÍ DOSTUPNÉ AGE (VĚK) KONTEJNERY IMAGE VOLIČ
alb-controller 2/2 2 2 18d alb-controller mcr.microsoft.com/application-lb/images/alb-controller:1.3.7 app=alb-controller
alb-controller-bootstrap 1/1 1 1 18d alb-controller-bootstrap mcr.microsoft.com/application-lb/images/alb-controller-bootstrap:1.3.7 app=alb-controller-bootstrap

V tomto příkladu je ovladač ALB verze 1.3.7.

Verzi řadiče ALB lze upgradovat spuštěním helm upgrade alb-controller příkazu. Další informace naleznete v tématu Instalace kontroleru ALB.

Tip

Nejnovější verzi řadiče ALB najdete ve zprávě k vydání verze řadiče ALB.

Shromažďování protokolů kontroleru ALB

Protokoly lze shromažďovat z kontroleru ALB pomocí příkazu kubectl logs odkazující na pod řadiče ALB.

  1. Získání názvu podu řadiče ALB

    Spusťte následující příkaz kubectl. Pokud nepoužíváte výchozí obor názvů azure-alb-system:

    kubectl get pods -n azure-alb-system
    

    Měl by se zobrazit výstup podobný následujícímu příkladu. Názvy podů se můžou mírně lišit.

    NAME PŘIPRAVENO STAV RESTARTY AGE (VĚK)
    alb-controller-6648c5d5c-sdd9t 1/1 Spuštěno 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 Spuštěno 0 4d6h
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 Spuštěno 0 4d6h

    Kontroler ALB používá volby poskytované správcem modulu controller-runtime k určení aktivního a pohotovostního podu pro zajištění vysoké dostupnosti.

    Zkopírujte název každého podu alb-controller (ne pod bootstrap, v tomto případě: alb-controller-6648c5d5c-sdd9t a alb-controller-6648c5d5c-au234) a spuštěním následujícího příkazu určete aktivní pod.

    kubectl logs alb-controller-6648c5d5c-sdd9t -n azure-alb-system -c alb-controller | grep "successfully acquired lease"
    

    Pokud je pod primární, měli byste vidět následující: successfully acquired lease azure-alb-system/alb-controller-leader-election

  2. Shromažďování protokolů

    Protokoly z kontroleru ALB se vrací ve formátu JSON.

    Spusťte následující příkaz kubectl a nahraďte název podem vráceným v kroku 1:

    kubectl logs -n azure-alb-system alb-controller-6648c5d5c-sdd9t
    

    Podobně můžete výstup existujícího příkazu přesměrovat na soubor zadáním znaménka větší než (>) a názvu souboru pro zápis protokolů do:

    kubectl logs -n azure-alb-system alb-controller-6648c5d5c-sdd9t > alb-controller-logs.json
    

Chyby konfigurace

Application Gateway pro kontejnery vrací stavový kód 500.

Scénáře, ve kterých byste si všimli kódu chyby 500 ve službě Application Gateway pro kontejnery, jsou následující:

  1. Neplatné položky back-endu : Back-end je definován jako neplatný v následujících scénářích:

    • Odkazuje na neznámý nebo nepodporovaný druh prostředku. V tomto případě má stav HTTPRoute podmínku s důvodem nastaveným na InvalidKind a zpráva vysvětluje, jaký druh prostředku je neznámý nebo nepodporovaný.
    • Odkazuje na prostředek, který neexistuje. V tomto případě má stav HTTPRoute podmínku s důvodem nastavenou na BackendNotFound a zpráva vysvětluje, že prostředek neexistuje.
    • Odkazuje na prostředek v jiném oboru názvů, pokud odkaz explicitně nepovoluje ReferenceGrant (nebo ekvivalentní koncept). V tomto případě má stav HTTPRoute podmínku s důvodem nastavenou RefNotPermitted na a zpráva vysvětluje, který odkaz mezi obory názvů není povolený.

    Pokud má například HTTPRoute dva back-endy zadané se stejnou váhou a jedna je neplatná 50 procent provozu musí obdržet 500.

  2. Pro všechny back-endy se nenašly žádné koncové body: pokud nejsou nalezeny žádné koncové body pro všechny back-endy odkazované v httpRoute, získá se kód chyby 500.

Vlastní prostředek Load Balanceru aplikace neodráží stav Připraveno

Příznaky

Zpráva o stavu vlastního prostředku ApplicationLoadBalancer nepřetržitě říká: "Prostředek Application Gateway for Containers-name Application Gateway for Containers prochází aktualizací".

Následující protokoly se opakují primárním podem řadiče alb.

{"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":"aaaa0000-bb11-2222-33cc-444444dddddd","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 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' 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 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' 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"}

Prostředek brány Kubernetes nemůže získat token z řetězu přihlašovacích údajů

Příznaky

Ve službě Application Gateway pro kontejnery se neaplikují žádné změny služby HttpRoutes.

Následující chybová zpráva se vrátí u prostředku brány Kubernetes a u prostředků HttpRoute se neprojeví žádné změny.

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\":\"0000aaaa-11bb-cccc-dd22-eeeeee333333\",\"correlation_id\":\"aaaa0000-bb11-2222-33cc-444444dddddd\",\"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

Řešení

Ujistěte se, že jsou v Azure nakonfigurované federované přihlašovací údaje spravované identity podu kontroleru ALB, aby bylo možné provádět změny ve službě Application Gateway for Containers. Pokyny ke konfiguraci federovaných přihlašovacích údajů najdete v průvodcích rychlým startem: