Ř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.
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
aalb-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
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í:
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.
- Odkazuje na neznámý nebo nepodporovaný druh prostředku. V tomto případě má stav HTTPRoute podmínku s důvodem nastaveným na
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: