すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:AlbConfig を使用した ALB リスナーの設定

最終更新日:Sep 15, 2026

AlbConfig の listeners フィールドは、Application Load Balancer (ALB) のリスナーを設定します。このトピックでは、listeners フィールドの更新動作について説明し、リスナーの作成、設定、削除の方法を示します。

前提条件

開始する前に、以下を確認してください。

注意事項

ACK クラスターによって作成された ALB インスタンスは、マネージドリソース (ServiceManagedResource) です。これらのインスタンスを操作する際には、以下の制限とガイドラインが適用されます。

ALB コンソールでの制限

重要

ALB コンソールで直接リスナーを作成、変更、または削除しないでください。たとえば、コンソールでリスナーポートを変更したり、リスナーを削除したりしないでください。ACK は、AlbConfig CRD から ALB インスタンスへのリスナー設定を継続的に同期します。ALB コンソールでの手動変更は、次の同期サイクルで上書きされます。

AlbConfig をバイパスして ALB コンソールで直接リスナー設定を変更すると、以下のような問題が発生します:

  • ALB コンソールは、リスナー設定を変更しようとすると OperationDenied.ServiceManagedResource エラーを返します。

  • 手動で追加されたリスナー (例:ポート 443) は、ACK が設定を同期した後に自動的に削除される場合があります。

  • 既存の ALB インスタンスを ACK で再利用する場合、手動で設定したリスナー設定は保持されません。

正しい設定パス

HTTPS 証明書、ポート、リクエストタイムアウトを含むすべてのリスナー設定は、Kubernetes クラスター内の AlbConfig カスタムリソースを通じてのみ管理する必要があります。AlbConfig は ALB リスナー設定の信頼できる唯一の情報源であり、ALB コンソールから変更してはなりません。

リスナーのパラメーター

以下の表に、AlbConfig の spec.listeners で使用できるすべてのパラメーターを示します。

パラメーター

タイプ

デフォルト

プロトコル

説明

port

整数

—

HTTP、HTTPS、QUIC

リスナーポート。必須。この値を変更すると、元のリスナーが削除され、新しいリスナーが作成されます。

protocol

文字列

—

HTTP、HTTPS、QUIC

リスナープロトコル。必須。この値を変更すると、元のリスナーが削除され、新しいリスナーが作成されます。

certificates[].CertificateId

文字列

—

HTTPS

リスナーに割り当てる証明書 ID。

certificates[].IsDefault

ブール値

—

HTTPS

デフォルトの証明書であるかどうか。

caEnabled

ブール値

false

HTTPS

CA 証明書検証を有効にするかどうか。

securityPolicyId

文字列

—

HTTPS

TLS セキュリティポリシー ID。例:tls_cipher_policy_1_1。

requestTimeout

整数

60

HTTP、HTTPS

HTTP 504 を返す前にバックエンドサーバーからの応答を待機する最大時間 (秒単位) 。有効な値:1~600。

tags[].key

文字列

—

—

タグキー。

tags[].value

文字列

—

—

タグ値。

gzipEnabled

ブール値

—

HTTP、HTTPS

データ圧縮を有効にするかどうか。true:特定のコンテンツタイプを圧縮します。false:すべての圧縮を無効にします。

xForwardedForConfig.XForwardedForEnabled

ブール値

true

HTTP、HTTPS

クライアント IP を X-Forwarded-For ヘッダーに含めるかどうか。常に有効であり、無効にすることはできません。

xForwardedForConfig.XForwardedForProtoEnabled

ブール値

—

HTTP、HTTPS

バックエンドサーバーに転送されるリクエストヘッダーにリスナープロトコルを含めるかどうか。

xForwardedForConfig.XForwardedForSLBIdEnabled

ブール値

—

HTTP、HTTPS

バックエンドサーバーに転送されるリクエストヘッダーに SLB インスタンス ID を含めるかどうか。

xForwardedForConfig.XForwardedForSLBPortEnabled

ブール値

—

HTTP、HTTPS

バックエンドサーバーに転送されるリクエストヘッダーにリッスンポートを含めるかどうか。

xForwardedForConfig.XForwardedForClientSourceIpsEnabled

ブール値

—

HTTP、HTTPS

X-Forwarded-For ヘッダーから実際のクライアント IP を取得するかどうか。

xForwardedForConfig.XForwardedForClientSourceIpsTrusted

文字列

—

HTTP、HTTPS

信頼できるプロキシ IP アドレスまたは CIDR ブロックのセミコロン区切りリスト。XForwardedForClientSourceIpsEnabled が true の場合にのみ有効です。

aclConfig.aclType

文字列

—

HTTP、HTTPS

ACL タイプ:White (許可リスト) または Black (ブロックリスト) 。

aclConfig.aclEntries[]

文字列

—

HTTP、HTTPS

アクセス制御用の CIDR ブロック。各エントリは完全な CIDR ブロックである必要があります。

listeners フィールドの更新方法

listeners フィールドは配列であるため、完全置換 によって更新されます。つまり、新しい設定が既存の設定を完全に置き換えます。この動作を理解することで、更新された AlbConfig を適用したときに何が起こるかを予測しやすくなります。

主要な用語

  • オブジェクト設定ファイル:適用する YAML ファイルで、AlbConfig の望ましい状態が含まれています。

  • 既存のオブジェクト設定ファイル:クラスターで現在有効な設定。

  • last-applied-configuration:以前の設定を記録する Kubernetes アノテーション。リアルタイムでは更新されません。

更新ルール

シナリオ

新しい設定に

既存の設定に

last-applied-configuration に

結果

①

はい

はい

—

マージ:新しい設定の値を適用して、既存のオブジェクトを更新します。

②

はい

いいえ

—

作成:新しいリスナーを追加します。

③

いいえ

—

はい

削除:リスナーを削除します。デフォルト値にリセットされる場合があります。

④

いいえ

はい

いいえ

削除:既存の設定からリスナーを削除します。

例

次の例では、listeners フィールドを更新する際にルールがどのように適用されるかを示します。

新しい設定 (オブジェクト設定ファイル):

listeners:
- port: 8001
  protocol: HTTP
- port: 8003
  protocol: HTTP
- port: 8005     # 新規 — 追加される
  protocol: HTTP

既存の設定:

listeners:
- port: 8001
  protocol: HTTP
- port: 8002     # 新しい設定になく、last-applied-configuration にあるため — 削除される
  protocol: HTTP
- port: 8003
  protocol: HTTP
- port: 8004     # 新しい設定になく、last-applied-configuration にないため — 削除される
  protocol: HTTP

last-applied-configuration:

listeners:
- port: 8001
  protocol: HTTP
- port: 8002
  protocol: HTTP
- port: 8003
  protocol: HTTP

新しい設定を適用した後の結果:

listeners:
- port: 8001    # 条件①に一致 — 保持される
  protocol: HTTP
- port: 8003    # 条件①に一致 — 保持される
  protocol: HTTP
- port: 8005    # 条件②に一致 — 追加される
  protocol: HTTP
# ポート 8002 は条件③に一致 — 削除される
# ポート 8004 は条件④に一致 — 削除される

リスナーの作成

リスナーは、ALB インスタンスがアプリケーション層の情報に基づいてトラフィックを受信し、転送するためのエントリーポイントです。port と protocol フィールドを組み合わせることで、リスナーが一意に識別されます。

重要

port または protocol を変更すると、元のリスナーが削除され、新しいリスナーが作成されます。

HTTP リスナーは自動的に WebSocket をサポートします。追加の設定は不要です。

protocol に指定できるプロトコルは、HTTP、HTTPS、QUIC です。

コンソール

  1. Container Service for Kubernetes (ACK) コンソールにログインし、左側メニューで [クラスター] をクリックします。

  2. クラスター名をクリックします。左側メニューで、[ワークロード] > [カスタムリソース] を選択します。

  3. リソースオブジェクト タブで、検索ボックスに AlbConfig と入力し、検索結果の [AlbConfig] をクリックします。

  4. [AlbConfig] パネルで、AlbConfig リソース (デフォルトでは alb という名前) を見つけ、[操作] 列の YAML の編集 をクリックします。

  5. YAML の編集 パネルで、spec.listeners.port と spec.listeners.protocol フィールドを追加し、[OK] をクリックします。

    image

kubectl

次のコマンドを実行して AlbConfig を編集します。

kubectl edit albconfig <AlbConfig_Name>

spec の下に listeners フィールドを追加します。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
    # ... 他の設定フィールド
  listeners:
  - port: 80
    protocol: HTTP   # オプション:HTTP、HTTPS、QUIC

ALB インスタンスの自動作成失敗の一般的な原因

AlbConfig が ALB インスタンスの自動作成に失敗する場合、リスナー設定が不完全であることが最も一般的な原因の 1 つです。たとえば、Ingress ルートで TLS/HTTPS が必要なのに、AlbConfig にポート 80 (HTTP) とポート 443 (HTTPS) の両方のリスナーが含まれていない場合や、必要な HTTPS 証明書が見つからないか、設定が誤っている場合、インスタンスの作成や同期が失敗することがあります。

この問題を回避するには、適用する前に AlbConfig のリスナー設定が Ingress の要件と一致していることを確認してください。

  • TLS/HTTPS Ingress ルートが使用される場合、ポート 80 とポート 443 の両方のリスナーが定義されていること。

  • 有効な証明書が HTTPS リスナーに割り当てられているか、ドメイン名に基づく証明書の自動検出が正しく設定されていること。

HTTPS 証明書の設定

certificates フィールドを設定して、HTTPS リスナーに 1 つ以上の証明書を割り当てます。ALB は最初の証明書をデフォルトの証明書として設定します。ALB は、デフォルトの証明書の有効期限が切れたり、適用できなくなったりした場合にのみ、他の証明書をリクエストの暗号化に使用します。

証明書を指定しない場合、リスナーはすぐには作成されません。代わりに、Ingress が関連付けられ、ドメイン名に基づいて証明書が自動的に検出された後に作成されます。詳細については、「HTTPS 証明書を設定して暗号化通信を行う」をご参照ください。
listeners:
- caEnabled: false
  certificates:
  - CertificateId: 756****-cn-hangzhou   # 証明書 ID
    IsDefault: true
  port: 443
  protocol: HTTPS

TLS セキュリティポリシーの設定

securityPolicyId を設定して、HTTPS リスナーに TLS セキュリティポリシーを適用します。カスタムポリシーまたは事前定義されたポリシーを使用できます。詳細については、「TLS セキュリティポリシー」をご参照ください。

listeners:
- port: 443
  protocol: HTTPS
  securityPolicyId: tls_cipher_policy_1_1   # セキュリティポリシー ID

リクエストタイムアウトの設定

requestTimeout を設定して、Application Load Balancer (ALB) がクライアントリクエストを受信した後、バックエンドサーバーからの応答を待機する時間を制御します。タイムアウト期間内に応答が返されない場合、ALB インスタンスは待機を停止し、HTTP 504 エラーをクライアントに返します。

  • デフォルト:60 秒

  • 有効な値:1~600 (整数、秒単位)

  • 600 を超える値を使用するには、クォータセンターでクォータ引き上げを申請してください。

listeners:
- port: 80
  protocol: HTTP
  requestTimeout: 60   # 秒単位。デフォルト:60。有効な値:1~600。

適用範囲

requestTimeout はリスナーレベル (ポートレベル) のパラメーターです。ALB インスタンスの同じリスナーポートを使用するすべてのルートにグローバルに適用されます。同じリスナー上の個別のルートに対して、異なるフロントエンドアイドルセッションタイムアウトを設定することはサポートされていません。

AI ストリーミング応答のサポート

ALB は、AI ストリーミング応答インターフェイス (例:大規模言語モデルのストリーミング出力) をサポートしています。ALB を AI ストリーミングワークロードで使用する場合:

  • ストリーミング転送の全期間をカバーできる十分に大きな値に requestTimeout を設定します。値が低すぎると、ストリームが完了する前に ALB が接続を閉じ、クライアントに HTTP 504 エラーを返します。

  • WAF やバックエンドサービスなど、リクエストチェーン内のすべてのコンポーネントのタイムアウト設定を確認し、ストリーミングセッションを中断させる早期の接続終了を回避してください。

リスナータグの追加

tags フィールドを使用して、リスナーにキーと値のタグを追加します。

listeners:
- port: 80
  protocol: HTTP
  tags:
  - key: "key"
    value: "value1"

データ圧縮の有効化

gzipEnabled を設定して、ALB がクライアントに転送する前に応答データを圧縮するかどうかを制御します。

  • true:コンテンツタイプに応じて、Brotli または Gzip を使用して応答を圧縮します。

  • false:すべてのコンテンツタイプの圧縮を無効にします。

圧縮は、応答ヘッダーの Content-Length が 1,024 バイトを超える場合にのみトリガーされます。2 つの圧縮アルゴリズムは次のように動作します:

  • Brotli:すべてのコンテンツタイプを圧縮します。

  • Gzip:text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、application/atom+xml、application/xml、application/json を圧縮します。

次の例では、圧縮を無効にします。

listeners:
- port: 80
  protocol: HTTP
  gzipEnabled: false   # true:特定のコンテンツタイプを圧縮します。false:すべての圧縮を無効にします。

X-Forwarded-For ヘッダーの設定

xForwardedForConfig フィールドを使用して、ALB がバックエンドサーバーにトラフィックを転送する際にリクエストヘッダーに含める情報を制御します。

重要

すべての xForwardedForConfig パラメーターは、HTTP および HTTPS リスナーにのみ適用されます。

クライアント IP アドレスの取得

XForwardedForEnabled は常に有効であり、無効にすることはできません。有効にすると、ALB はクライアントのソース IP を X-Forwarded-For ヘッダーに追加します。

listeners:
- port: 80
  protocol: HTTP
  xForwardedForConfig:
    XForwardedForEnabled: true

リスナープロトコルの取得

XForwardedForProtoEnabled を true に設定すると、バックエンドサーバーに転送されるヘッダーにリスナープロトコルが含まれます。

listeners:
- port: 80
  protocol: HTTP
  xForwardedForConfig:
    XForwardedForProtoEnabled: true

SLB インスタンス ID の取得

XForwardedForSLBIdEnabled を true に設定すると、バックエンドサーバーに転送されるヘッダーに SLB インスタンス ID が含まれます。

listeners:
- port: 80
  protocol: HTTP
  xForwardedForConfig:
    XForwardedForSLBIdEnabled: true   # true:SLB インスタンス ID を含めます。false:省略します。

リッスンポートの取得

XForwardedForSLBPortEnabled を true に設定すると、バックエンドサーバーに転送されるヘッダーにリッスンポートが含まれます。

listeners:
- port: 80
  protocol: HTTP
  xForwardedForConfig:
    XForwardedForSLBPortEnabled: true   # true:リッスンポートを含めます。false:省略します。

プロキシ背後の実際のクライアント IP の取得

リクエストがプロキシを通過すると、X-Forwarded-For ヘッダーに IP アドレスのチェーンが含まれることがあります。XForwardedForClientSourceIpsEnabled を true に設定すると、ALB はリストを右から左にたどり、信頼リストにない最初の IP を選択することで、実際のクライアント IP を識別できます。

XForwardedForClientSourceIpsTrusted を使用して、信頼するプロキシ IP を指定します。これにより、ソース IP によるレート制限などのシナリオに対応できます。

  • 形式:セミコロンで区切られた IP アドレスまたは CIDR ブロック。スペースは含めません。

  • XForwardedForClientSourceIpsTrusted は、XForwardedForClientSourceIpsEnabled が true の場合にのみ有効です。

listeners:
- port: 80
  protocol: HTTP
  xForwardedForConfig:
    XForwardedForClientSourceIpsEnabled: true
    XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16   # セミコロン区切り、スペースなし

アクセス制御の設定

aclConfig フィールドを使用して、ALB リスナーでアクセス制御を有効にします。アクセス制御を使用すると、許可リストまたはブロックリストを設定して、特定の IP アドレスを許可またはブロックできます。詳細については、「ACL を設定してアクセスを制御する」をご参照ください。

  • aclType:許可リストの場合は White、ブロックリストの場合は Black に設定します。

  • aclEntries:CIDR ブロックのリスト。各エントリは完全な CIDR ブロックである必要があります。

listeners:
- port: 80
  protocol: HTTP
  aclConfig:
    aclEntries:
    - 127.0.0.1/32   # 完全なCIDRブロックである必要があります
    aclType: White    # White:許可リスト。Black:ブロックリスト。

リスナーの削除

リスナーを削除するには、AlbConfig.spec.listeners フィールドから削除します。

重要

リスナーを削除する前に、リスナーに関連付けられているすべての Ingress を削除してください。Ingress がまだ関連付けられている場合、削除は失敗します。

変更前:

listeners:
- port: 8001
  protocol: HTTP
- port: 8002     # 削除するリスナー
  protocol: HTTP

変更後:

listeners:
- port: 8001
  protocol: HTTP