ALB Ingress Controller は、Kubernetes クラスター向けのイングレスコントローラーであり、外部トラフィックを内部サービスにルーティングします。ALB イングレスを使用してサービスにアクセスすると、ALB Ingress Controller はそのサービスに関連付けられたエンドポイントリソースの変更をモニターし、バックエンドノードのステータスを対応するバックエンドサーバーグループに同期し、これらの変更を Application Load Balancer (ALB) インスタンスに適用します。本トピックでは、ALB イングレス使用時に発生する可能性のある異常イベントの診断および解決方法について説明します。
仕組み
ALB イングレス経由でサービスにアクセスする際、ALB Ingress Controller はさまざまなリソースの変更をモニターし、それらの変更を関連付けられた ALB インスタンスに同期します。このプロセスは、さまざまな制限や構成エラーにより失敗する可能性があります。次の図は、各リソース間の論理的な関係と同期プロセスを示しています。
手順 1: 異常なイベントを確認する
コンソールを使用する場合:左側のナビゲーションウィンドウで、 を選択します。対象の名前空間を選択し、対象のイングレス名をクリックして詳細ページを開き、イベント タブをクリックします。
kubectl を使用する場合:
kubectl describe ingress <ingress-name> -n <namespace>期待される出力:
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedBuildModel 2m28s (x10 over 6m43s) ingress listener is not exist in alb, port: 443, protocol: HTTPS Normal Sync 19s (x32 over 11d) ingress Scheduled for sync Normal SuccessfullyReconciled 4s (x20 over 11d) ingress Successfully reconciled
説明 列または Message フィールドで、イングレスに関連するイベント情報を確認します。
Scheduled for sync:イベントが開始されたことを示します。Successfully reconciled:調整が完了したことを示します。Warningメッセージについては、手順 2 でトラブルシューティングを行ってください。異常イベントが報告されていないにもかかわらず変更が反映されない場合は、「ALB イングレスの変更が反映されないが、異常イベントが報告されていない場合はどうすればよいですか?
手順 2:異常イベントの分析と解決
以下の表は、一般的な異常イベント、その原因、および解決策を示しています。
新機能と互換性のない古いバージョンの ALB Ingress Controller コンポーネントによって引き起こされる異常イベントを回避するため、診断を実行する前に、リリースノート を参照し、コンポーネントを目的のバージョンにスペックアップしてください。
メッセージ | 原因 | 解決策 |
listener is not exist in alb, port: 80, protocol: HTTP | ALB Ingress Controller v2.11.0 以降では、イングレスのリスナーは自動作成されず、関連付けのみが行われます。このエラーは、対応する AlbConfig で事前にリスナーを作成せずにイングレスでリスナーを使用した場合に発生します。 | ALB Ingress Controller v2.11.0 以降では、イングレスリソースに必要なリスナーを AlbConfig で作成してください。詳細については、「AlbConfig を使用して ALB リスナーを構成する」をご参照ください。 |
listener not found for (80/HTTP), with ingresses 1 | ALB Ingress Controller v2.11.0 以降では、このエラーは、まだイングレスに関連付けられている AlbConfig からリスナーを削除した場合に発生します。エラーメッセージには、不足しているリスナーと関連付けられているイングレスの数が表示されます。 | リスナーを削除するには、まずそのリスナーに関連付けられているすべてのイングレスを削除する必要があります。 重要 誤ってリスナーを削除した場合は、再度追加する必要があります。 |
none certificate found for host | TLS が有効になっており、ドメインに対して証明書の自動検出がアクティブですが、Certificate Management Service にそのドメインに一致する証明書が存在しません。 |
|
The param of Rules.1.RuleConditions.2.PathConfig.Values.1 is illegal | ルーティングルールに無効なパスパラメーターが含まれています。 |
|
The param of ServerGroupName is illegal | ALB バックエンドサーバーグループの名前が無効なフォーマットです。 | サーバーグループ名が正しいフォーマットであることを確認してください。 コントローラーは、 |
The specified resource sgp-vz2fb219vv792flx3u is in use | ACK で管理されている ALB バックエンドサーバーグループが別の ALB インスタンスから参照されています。 | Application Load Balancer コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。サーバーグループ ページで、対象のバックエンドサーバーグループを見つけ、必要に応じて ALB インスタンスとの関連付けを解除します。 |
Message: Invalid parameter. Check the parameter input. | このエラーは、AlbConfig で証明書を指定する際に証明書 ID を誤って構成した場合によく発生します。 | 証明書 ID としてリソース ID または数値 ID が使用されていないか確認してください。CertIdentifier で指定された証明書 ID を使用する必要があります。 |
Message: Failed to create SSL Certificate with name default-https-secret-1-b585e6 ({namespace}-{name}-{identity}). Error: The certificate has expired . | イングレスで使用されているシークレット証明書の有効期限が切れています。エラーメッセージ中の証明書名は、
|
構成の詳細については、「暗号化通信のための HTTPS 証明書を構成する」をご参照ください。 |
failed to createSSLCertificateWithName: XXX ErrorCode: NameRepeat Message: The name is already used. Please enter another name. | イングレスで使用されているシークレット証明書の有効期限が切れています。新しい証明書をアップロードする際に期限切れの証明書と同じ名前を使用すると、SSL 証明書名の競合が発生します。 | |
invalid server group Cookie: |
| Cookie 書き換え方式を使用する場合は、Cookie 値を必ず構成してください。 パラメーターの詳細については、「アノテーションを使用してセッション維持を実装する」をご参照ください。 |
| ||
The quota of alb_quota_server_added_num is exceeded for resource eni-xxxx, usage 202/200 | ALB の | クォータセンターでサーバーグループのクォータを増やしてください。 |
よくある質問
ALB イングレスの変更が反映されない
IngressClass と AlbConfig 間のバインディングが正しくないために、コントローラーが AlbConfig の調整イベントをトリガーしなかったり、変更イベントを処理できなかったりすることが原因の可能性があります。詳細については、「IngressClass を使用して AlbConfig をイングレスに関連付ける」をご参照のうえ、IngressClass の spec.parameters パラメーターが正しい AlbConfig リソースオブジェクト名を指していることを確認してください。