Application Gateway for Containers でのトラブルシューティング
この記事では、Application Gateway for Containers での一般的な問題のトラブルシューティングに役立つガイダンスをいくつか提供します。
ALB コントローラーのバージョンの検出
トラブルシューティングを開始する前に、デプロイする ALB コントローラーのバージョンを特定します。 次の kubectl コマンドを使用して、どのバージョンの ALB コントローラーが実行されているのかを特定できます (azure-alb-system
の既定の名前空間を使用していない場合は、名前空間を置き換えるようにしてください)。
kubectl get deployment -n azure-alb-system -o wide
出力例:
名前 | 準備完了 | UP-TO-DATE | AVAILABLE | AGE | コンテナー | IMAGES | SELECTOR |
---|---|---|---|---|---|---|---|
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 |
この例の ALB コントローラーのバージョンは 1.3.7 です。
ALB コントローラーのバージョンは、helm upgrade alb-controller
コマンドを実行するとアップグレードできます。 詳細については、「ALB コントローラーをインストールする」を参照してください。
ヒント
ALB コントローラーの最新バージョンは、「ALB コントローラーのリリース ノート」で確認できます。
ALB コントローラー のログの収集
ALB コントローラー ポッドを参照する kubectl logs コマンドを使用して、ALB コントローラーからログを収集できます。
実行中の ALB コントローラー ポッド名を取得します
次の kubectl コマンドを実行します。
azure-alb-system
の既定の名前空間を使用していない場合は、必ずご使用の名前空間に置き換えてください。kubectl get pods -n azure-alb-system
次の例のような出力が表示されます。 ポッド名は若干異なる場合があります。
名前 準備完了 状態 再起動 AGE alb-controller-6648c5d5c-sdd9t 1/1 実行中 0 4d6h alb-controller-6648c5d5c-au234 1/1 実行中 0 4d6h alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 実行中 0 4d6h ALB コントローラーでは、コントローラー ランタイム マネージャーで提供される選択を使用して、高可用性を実現するためのアクティブおよびスタンバイ ポッドを決定します。
各 alb-controller ポッド (ブートストラップ ポッドではなく、この場合は
alb-controller-6648c5d5c-sdd9t
とalb-controller-6648c5d5c-au234
) の名前をコピーして、次のコマンドを実行し、アクティブ ポッドを決定します。kubectl logs alb-controller-6648c5d5c-sdd9t -n azure-alb-system -c alb-controller | grep "successfully acquired lease"
ポッドがプライマリの場合は、次のように表示されます:
successfully acquired lease azure-alb-system/alb-controller-leader-election
ログを収集する
ALB コントローラーからのログは JSON 形式で返されます。
次の kubectl コマンドを実行すると、名前が手順 1 で返されたポッド名に置き換えられます。
kubectl logs -n azure-alb-system alb-controller-6648c5d5c-sdd9t
同様に、大なり (>) 記号とログを書き込むファイル名を次のように指定することで、既存のコマンドの出力をファイルにリダイレクトできます。
kubectl logs -n azure-alb-system alb-controller-6648c5d5c-sdd9t > alb-controller-logs.json
構成エラー
Application Gateway for Containers から 500 状態コードが返される
Application Gateway for Containers で 500 エラー コードが表示される可能性のあるシナリオは次のとおりです。
無効なバックエンド エントリ: バックエンドが次のシナリオで無効として定義されている。
- 不明またはサポートされていない種類のリソースを参照している。 この場合、HTTPRoute の状態には理由が
InvalidKind
に設定された条件があり、メッセージにはどの種類のリソースが不明またはサポートされていないかが示される。 - 存在しないリソースを参照している。 この場合、HTTPRoute の状態には理由が
BackendNotFound
に設定された条件があり、メッセージにはリソースが存在しないことが示される。 - ReferenceGrant (または同等の概念) で参照が明示的に許可されていない場合に、別の名前空間内のリソースを参照する。 この場合、HTTPRoute の状態には理由が
RefNotPermitted
に設定された条件があり、メッセージにはどの名前空間間の参照が許可されていないのかが示される。
たとえば、HTTPRoute に同じ重みを持つ 2 つのバックエンドが指定されていて、1 つが無効な場合は、トラフィックの 50% で 500 を受信することにならざるを得ません。
- 不明またはサポートされていない種類のリソースを参照している。 この場合、HTTPRoute の状態には理由が
すべてのバックエンドにエンドポイントが見つからない: HTTPRoute で参照しているすべてのバックエンドにエンドポイントが見つからない場合に、500 エラー コードが取得される。
Application Load Balancer カスタム リソースに準備完了状態が反映されません
現象
ApplicationLoadBalancer カスタム リソースの状態メッセージに "Application Gateway for Containers リソース Application Gateway for Containers-name
は更新中です" と表示され続けています。
次のログは、プライマリ alb-controller ポッドによって繰り返されます。
{"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"}
Kubernetes Gateway リソースで資格情報チェーンからのトークンの取得に失敗する
現象
HttpRoute に対する変更が Application Gateway for Containers に適用されていません。
Kubernetes Gateway リソースで次のエラー メッセージが返され、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\":\"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
解決策
Application Gateway for Containers に変更を加えるための ALB コントローラー ポッド用マネージド ID のフェデレーション資格情報が Azure で構成されていることを確認します。 フェデレーション資格情報を構成する方法の手順については、以下のクイックスタート ガイドで確認できます。