ALB Ingress コントローラー 2.15.0 以降では、API リクエストの検証にアドミッション Webhook を使用します。リクエストに無効な構成が含まれている場合、Webhook はリソースが永続化される前にそのリクエストをインターセプトし、特定のエラーメッセージを返します。これにより、Ingress や AlbConfig の誤った構成を早期に検出し、無効なパラメーター形式による調整(リコンサイル)の失敗を防ぐことができます。
仕組み
ALB Ingress コントローラーは、Kubernetes 1.9 以降で利用可能な Kubernetes の動的アドミッション制御を使用します。リクエストが API サーバーに到達すると、認証および権限付与の後、リソースオブジェクトが etcd に書き込まれる前に Webhook によって検証されます。
ValidatingAdmissionWebhook は ALB Ingress コントローラーと共にデプロイされます。この Webhook は、どの操作およびリソースタイプが検証をトリガーするかを定義します。具体的には、Ingress の作成および更新リクエストが対象です。
Webhook は以下の 3 つのコンポーネントで構成されます。
| コンポーネント | 役割 |
|---|---|
| ValidatingAdmissionWebhook | Webhook URL を登録し、どのリソースおよび操作が検証をトリガーするかを定義します |
| TLS 証明書 | API サーバーと Webhook サービス間の通信を暗号化します |
| Webhook サービス | 各 AdmissionReview リクエストを処理し、Ingress リソースを検証して AdmissionResponse を返します |
Webhook 検証を使用する理由:
無効なリクエストを早期にキャッチできます。 Webhook はリソースが作成される前にリクエストをインターセプトするため、不要なコンピュートおよびネットワークリソースの消費を削減し、クラスターの異常状態リスクを低減します。
検証ロジックをコントローラーから分離できます。 ALB Ingress コントローラーはリソースのデプロイメントおよび管理に集中できます。検証は個別の Webhook サービスで実行され、単一責任の原則に従います。
リソース作成の制御を一元化できます。 Webhook サービスはリソース作成リクエストに対する中央ゲートとして機能し、誤構成または悪意のある YAML がクラスターに到達するリスクを軽減します。
対処可能なエラーメッセージが得られます。 検証に失敗した場合、Webhook は無効なパラメーターを直接指し示す具体的なエラーメッセージを返すため、コントローラーログを詳細に調査することなく問題を修正できます。
Webhook インターセプションメッセージの確認
API サーバーが Webhook 検証によりリクエストを拒否した場合、エラーはコンソールおよび CLI の両方に表示されます。
コンソールでの表示:

CLI での表示:

エラーメッセージには、Webhook(validate.alb.ingress.kubernetes.io)および具体的な検証エラーが記載されています。例:
Error from server: admission webhook "validate.alb.ingress.kubernetes.io" denied the request:
webhook validate ingress ingress: check ingress listen port invalid上記のエラーは、listen-ports アノテーションの値が解析できなかったことを示しています。具体的には、リスナー構成の配列要素に無効な文字(:)が追加されています。アノテーションの値を修正してマニフェストを再適用してください。
検証エラー リファレンス
以下の表に、AlbConfig および Ingress リソースのすべての検証エラーを示します。
AlbConfig エラー
| エラー種別 | エラーメッセージ |
|---|---|
| YAML 解析失敗 | webhook validate albconfig alb: Unmarshal error : %v Please check the format of albconfig yaml |
| 無効なリスナーポート | webhook validate albconfig alb: listener port number mustbetween [1:65535], or you should set listen port explicitly in listener config. Error listen port : 0 |
| 無効なリスナープロトコル | webhook validate albconfig alb: listener protocol is invalid : HTTPP, or you should set listen protocol explicitly in listener config. Please set protocol value HTTP or HTTPS or QUIC |
| 無効な logstore 名 | webhook validate albconfig alb: logstore name should start with alb_ |
| 空のタグキーまたは値 | webhook validate albconfig alb: empty tag key/value is invalid |
| 無効な IP アドレスタイプ | the value Interne is invalid. Please set the value as one of: [Internet Intranet] |
| 無効な IPv6 アドレスタイプ | the value Interne is invalid. Please set the value as one of: [Internet Intranet] |
| 無効な IP アドレスモード | the value Dynamicc is invalid. Please set the value as one of: [Dynamic Fixed] |
| 無効なインスタンスタイプ | the value Standardd is invalid. Please set the value as one of: [Basic Standard StandardWithWaf] |
| 競合するアクセス制御設定 | webhook validate albconfig alb: aclEntry and aclIds cannot use together in listener |
Ingress エラー
| エラー種別 | エラーメッセージ |
|---|---|
無効な backend-scheduler 値 | the value of alb.ingress.kubernetes.io/backend-scheduler annotation is invalid : test. the value wlcc is invalid. Please set the value as one of: [wrr wlc sch uch] |
無効な backend-protocol 値 | the value of alb.ingress.kubernetes.io/backend-protocol annotation is invalid : test. the value wlcc is invalid. Please set the value as one of: [HTTP HTTPS gRPC] |
無効な healthcheck-protocol 値 | the value of alb.ingress.kubernetes.io/healthcheck-protocol annotation is invalid : test. the value wlcc is invalid. Please set the value as one of: [HTTP HTTPS TCP gRPC] |
無効な healthcheck-method 値 | the value of alb.ingress.kubernetes.io/healthcheck-method annotation is invalid : test. the value wlcc is invalid. Please set the value as one of: [GET HEAD POST] |
無効な healthcheck-httpcode 値 | the value of alb.ingress.kubernetes.io/healthcheck-httpcode annotation is invalid : test. the value wlcc is invalid. Please set the value as one of: [http_2xx http_3xx http_4xx http_5xx] |
無効な healthcheck-httpversion 値 | the value of alb.ingress.kubernetes.io/healthcheck-httpversion annotation is invalid : test. the value wlcc is invalid. Please set the value as one of: [HTTP1.1 HTTP1.0] |
無効な listen-ports 形式 | webhook validate ingress ingress: check ingress listen port invalid |
パスに ^ | webhook validate ingress ingress: path is invalid because path contains ^ character |
| カスタム転送アクションの解析失敗 | webhook validate ingress test: the value of actions annotation is invalid |