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

Container Service for Kubernetes:AlbConfig を使用した ALB インスタンスの設定

最終更新日:Dec 05, 2025

AlbConfig は、ALB Ingress Controller によって提供されるカスタムリソース定義 (CRD) であり、Application Load Balancer (ALB) インスタンスとリスナーを設定するために使用されます。このトピックでは、AlbConfig の作成、変更、更新方法、および Simple Log Service を有効にする方法について説明します。

範囲

注意事項

  • リソース設定を直接変更または更新するには、kubectl edit コマンドを使用することを推奨します。 kubectl apply コマンドを使用してリソースを変更または更新する必要がある場合は、まず kubectl diff コマンドを実行して変更をプレビューしてから、kubectl apply コマンドを実行します。 変更が期待どおりであることを確認してから、kubectl apply コマンドを実行して変更を Kubernetes クラスターに適用します。

  • Flannel ネットワークプラグインを使用する場合、ALB Ingress のバックエンドサービスは NodePort および LoadBalancer サービスタイプのみをサポートします。

AlbConfig の作成

各 AlbConfig は 1 つの ALB インスタンスに対応します。 複数の ALB インスタンスを使用するには、複数の AlbConfig を作成する必要があります。 次の手順では、AlbConfig を作成する方法について説明します。

重要

ALB Ingress Controller コンポーネントをインストールするときに、[ALB クラウドネイティブゲートウェイインスタンスソース][新規作成] または [既存のものを使用] オプションを選択すると、Controller は「alb」という名前の AlbConfig リソースと「alb」という名前の IngressClass リソースを自動的に作成します。

  1. `alb.yaml` という名前のファイルを作成し、次の内容をファイルにコピーします。 このファイルを使用して AlbConfig を作成できます。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb
    spec:
      config:
        name: alb
        addressType: Internet
        zoneMappings:               
        - vSwitchId: vsw-uf6ccg2a9g71hx8go****  # クラスターが存在する VPC 内の異なるゾーンにある少なくとも 2 つの vSwitch の ID に置き換えます。
          allocationId: eip-asdfas****          # EIP ID に置き換えます。 デフォルトでは、パブリック IP アドレスが自動的に割り当てられます。
        - vSwitchId: vsw-uf6nun9tql5t8nh15****  # クラスターが存在する VPC 内の異なるゾーンにある少なくとも 2 つの vSwitch の ID に置き換えます。
          allocationId: eip-dpfmss****          # EIP ID に置き換えます。
      listeners:
        - port: 80
          protocol: HTTP

    パラメーター

    説明

    spec.config.name

    ALB インスタンスの名前。

    spec.config.addressType

    ALB インスタンスのアドレスタイプ。 有効な値:

    • Internet (デフォルト): ALB インスタンスにはパブリック IP アドレスがあります。 ドメイン名はパブリック IP アドレスに解決されます。 インスタンスはインターネット経由でアクセスできます。

    • Intranet: ALB インスタンスにはプライベート IP アドレスのみがあります。 ドメイン名はプライベート IP アドレスに解決されます。 インスタンスは VPC 内でのみアクセスできます。

    重要

    addressType パラメーターは、ALB インスタンスを作成するときにのみ解析されます。 このパラメーターを更新しても有効になりません。

    spec.config.zoneMappings

    • vSwitchId: ALB Ingress が使用する vSwitch の ID。

      • 異なるゾーンにある少なくとも 2 つの vSwitch の ID を指定します。 ゾーンは ALB でサポートされている必要があります。 サポートされているゾーンの詳細については、「ALB でサポートされているリージョンとゾーン」をご参照ください。

      • vSwitch とクラスターは同じ VPC にある必要があります。

      重要
      • シングルゾーンのリージョンの場合、vSwitch ID を 1 つだけ指定する必要があります。

      • zoneMappings パラメーターは、ALB インスタンスを作成するときにのみ解析されます。 このパラメーターを更新しても有効になりません。

    • allocationId: zoneMappings で、パブリック向け ALB インスタンスが依存する EIP の ID を指定できます。

      • EIP ID を指定しない場合、パブリック IP アドレスが自動的に割り当てられます。 システムは、基本的なセキュリティ保護を備えた従量課金制のボーダーゲートウェイプロトコル (BGP) (マルチライン) EIP を自動的に作成し、EIP を ALB インスタンスに関連付けます。 課金の詳細については、「ALB の課金の概要」をご参照ください。

      • 既存の EIP の ID を指定して、新しい ALB インスタンスに関連付けることができます。

      重要
      • インターネット共有帯域幅インスタンスに追加されていない、購入済みのトラフィック課金 EIP のみを関連付けることができます。

      • 同じ ALB インスタンスに対して異なるゾーンに割り当てられた EIP は、同じタイプである必要があります。

    クラスターに ALB Ingress Controller コンポーネントをインストールするときに、デフォルトの AlbConfig を作成することを選択できます。 vSwitchID を除き、AlbConfig の他のパラメーターは次のデフォルト設定で作成されます。

    クリックして AlbConfig のデフォルト設定を表示

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb # AlbConfig の名前。
    spec:
      config:
        accessLogConfig:
          logProject: ""
          logStore: ""
        addressAllocatedMode: Dynamic # AlbConfig では、addressAllocatedMode パラメーターを使用して ALB インスタンスの IP モードを指定できます。 有効な値は Dynamic (動的 IP モード) と Fixed (固定 IP モード) です。
        addressType: Internet
        billingConfig:
          internetBandwidth: 0
          internetChargeType: ""
          payType: PostPay
        deletionProtectionEnabled: true
        edition: Standard
        forceOverride: false
        zoneMappings:
        - vSwitchId: #...
        - vSwitchId: #...
    status:
      loadBalancer:
        dnsname: alb-s2em8fr9debkg5****.cn-shenzhen.alb.aliyuncs.com
        id: alb-s2em8fr9debkg5****
  2. 次のコマンドを実行して AlbConfig を作成します。

    kubectl apply -f alb.yaml

    予想される出力:

    AlbConfig.alibabacloud.com/alb created
  3. 次のコマンドを実行して AlbConfig リソースを表示します。

    kubectl get AlbConfig

    予想される出力:

    NAME   ALBID        DNSNAME                                  PORT&PROTOCOL   CERTID   AGE
    alb    alb-******   alb-******.<regionID>.alb.aliyuncs.com                            28m
    説明

    HTTPS リスナーを作成し、その証明書を設定すると、PORT&PROTOCOL および CERTID 列にコンテンツが表示されます。 これらの列はデフォルトでは空です。

既存の ALB インスタンスの再利用

既存の ALB インスタンスを再利用する場合は、AlbConfig の作成時にインスタンス ID を指定する必要があります。 既存の ALB インスタンスは、Application Load Balancer (ALB) コンソールで作成された標準または WAF 対応インスタンスである必要があります。 基本的な ALB インスタンスは再利用できません。 インスタンスは 1 つのクラスターでのみ再利用でき、複数のクラスターで同じ ALB インスタンスを再利用することはできません。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: reuse-alb
spec:
  config:
    id: **** # ALB コンソールで作成された標準または WAF 対応の ALB インスタンスの ID。
    forceOverride: false
    listenerForceOverride: false

次の表にパラメーターを示します。

パラメーター

説明

id

  • id フィールドがないか、id フィールドが空の場合、ALB インスタンスが再利用されていないシナリオにあることを示します。 この場合、forceOverride および listenerForceOverride フィールドは有効になりません。

  • id フィールドが有効な値に設定されている場合、ALB インスタンスは再利用されます。

    • forceOverridetrue に設定されている場合、ALB インスタンスとそのリスナーのプロパティは強制的に上書きされます。 ALB インスタンスとそのリスナーの設定は、送信された AlbConfig の設定に完全に置き換えられます。

    • forceOverridefalse に設定されている場合、ALB インスタンスのプロパティは強制的に上書きされません。 リスナーのプロパティを強制的に上書きするかどうかは、listenerForceOverride フィールドによって決まります。

      • listenerForceOverridefalse に設定されている場合、プロパティは上書きされません。 ALB Ingress Controller は、クラスター内の AlbConfig に基づいて自動的に作成されるリスナーのみを管理します。 これらのリスナーのデフォルトの命名形式は ingress-auto-listener-{port} です。 リスナー設定は AlbConfig の対象となります。 他の自己管理リスナーの存在と設定は、AlbConfig によって管理されません。

      • listenerForceOverridetrue に設定されている場合、ALB Ingress Controller は ALB インスタンスのすべてのリスナーを管理します。 リスナーの存在と設定は AlbConfig の対象となります。

重要

ALB インスタンスを再利用する場合、リスナー名を手動で変更しないでください。 これにより、リスナーが ACK によって誤って管理されたり、管理されなくなったりするのを防ぎます。 AlbConfig によって作成または更新されたリスナーは ACK によって管理され、その名前はデフォルトで ingress-auto-listener-{port} 形式になります。 他の形式の名前を持つリスナーは、ALB コンソールで管理されます。

forceOverride

インスタンスを再利用するときに ALB インスタンスのプロパティを強制的に上書きするかどうかを指定します。

  • true: プロパティを強制的に上書きします。

  • false: プロパティを上書きしません。 このパラメーターを false に設定して AlbConfig を編集しても、ALB インスタンスのプロパティは変更されません。

listenerForceOverride

インスタンスを再利用するときにリスナーのプロパティを強制的に上書きするかどうかを指定します。

  • true: プロパティを強制的に上書きします。

  • false: プロパティを上書きしません。

インターネット共有帯域幅インスタンスの設定

この機能を有効にすると、AlbConfig を使用してインターネット共有帯域幅インスタンスを ALB インスタンスに関連付けることができます。

説明

この機能は、ALB インスタンスのネットワークタイプがインターネットの場合にのみ有効になります。 インターネット共有帯域幅インスタンスの購入方法の詳細については、「インターネット共有帯域幅インスタンスの作成と管理」をご参照ください。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    name: alb
    addressType: Internet
    edition: Standard
    zoneMappings:
    - vSwitchId: vsw-2vcqeyvwsnd***
    - vSwitchId: vsw-2vcbhjlqu7y***
    billingConfig:
      bandWidthPackageId: cbwp-2vcjucp49otd8qolhm***  # インターネット共有帯域幅インスタンスの ID。

AlbConfig の更新

AlbConfig を使用して作成された ALB インスタンスの場合、kubectl edit コマンドを使用してインスタンス設定を更新できます。 次の手順では、AlbConfig を更新する方法について説明します。

  1. 次のコマンドを実行して、AlbConfig の名前を表示します。

    kubectl get AlbConfig

    予想される出力:

    NAME       ALBID        DNSNAME                                  PORT&PROTOCOL   CERTID   AGE
    alb        alb-******   alb-******.<regionID>.alb.aliyuncs.com                            28m
  2. 次のコマンドを実行して AlbConfig を変更します。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。

    AlbConfig 設定ファイルで、関連するコンテンツを更新します。 たとえば、spec.config.name フィールドを変更して、ALB インスタンスの名前を new_alb に変更できます。

    ...
     spec:
       config:
         name: new_alb # 更新された名前。
    ...

IngressClass を使用して AlbConfig を Ingress に関連付ける

ALB Ingress は、ネイティブの Kubernetes IngressClass リソースを使用して、AlbConfig を Ingress に関連付けます。 この関連付けは、IngressClass リソースに特定のパラメーターを設定することで実現されます。

  1. `ingress_class.yaml` という名前のファイルを作成し、次の内容をファイルにコピーしてから、そのファイルを使用して IngressClass を作成します。

    v1.19 以降のクラスター

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb # IngressClass に関連付けられている AlbConfig の名前。

    v1.19 より前のクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb
  2. 次のコマンドを実行して IngressClass を作成します。

    kubectl apply -f ingress_class.yaml

    予想される出力:

    ingressclass.networking.k8s.io/alb created
  3. `ingress.yaml` という名前のファイルを作成し、次の内容をファイルにコピーします。 ingressClassName パラメーターを使用して、AlbConfig に関連付ける `alb` という名前の IngressClass を指定します。

    v1.19 以降のクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cafe-ingress 
    spec:
      ingressClassName: alb # Ingress に関連付けられている IngressClass の名前。
      rules:
      - http:
          paths:
          # コンテキストパスを設定します。
          - path: /tea
            pathType: ImplementationSpecific
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
          # コンテキストパスを設定します。
          - path: /coffee
            pathType: ImplementationSpecific
            backend:
              service:
                name: coffee-svc
                port: 
                  number: 80

    v1.19 より前のクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: cafe-ingress
    spec:
      ingressClassName: alb
      rules:
      - http:
          paths:
          # コンテキストパスを設定します。
          - path: /tea
            backend:
              serviceName: tea-svc
              servicePort: 80
          # コンテキストパスを設定します。
          - path: /coffee
            backend:
              serviceName: coffee-svc
              servicePort: 80
  4. 次のコマンドを実行して Ingress を作成します。

    kubectl apply -f ingress.yaml

    予想される出力:

    ingress.networking.k8s.io/cafe-ingress created

これらの手順を完了すると、IngressClass を使用して AlbConfig が Ingress に関連付けられます。

複数の ALB インスタンスの作成と使用

複数の ALB インスタンスを同時に使用する場合は、Ingress リソースの spec.ingressClassName フィールドに異なる IngressClass を指定して、Ingress を異なる ALB インスタンスに関連付けます。

  1. `alb-2.yaml` という名前のファイルを作成し、次の内容をファイルにコピーしてから、そのファイルを使用して AlbConfig を作成します。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb-2
    spec:
      config:
        name: alb-2        # ALB インスタンスの名前。
        addressType: Internet  # ALB インスタンスにはパブリック IP アドレスがあります。
        zoneMappings:
        - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # vSwitch の ID。
        - vSwitchId: vsw-uf6nun9tql5t8nh15****
  2. 次のコマンドを実行して AlbConfig を作成します。

    kubectl apply -f alb-2.yaml

    予想される出力:

    AlbConfig.alibabacloud.com/alb-2 created
  3. `ingress_class2.yaml` という名前のファイルを作成し、次の内容をファイルにコピーしてから、そのファイルを使用して IngressClass を作成します。

    v1.19 以降のクラスター

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb-2
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-2 # IngressClass に関連付けられている AlbConfig の名前。

    v1.19 より前のクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: IngressClass
    metadata:
      name: alb-2
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-2 # IngressClass に関連付けられている AlbConfig の名前。
  4. 次のコマンドを実行して IngressClass を作成します。

    kubectl apply -f ingress_class2.yaml

    予想される出力:

    ingressclass.networking.k8s.io/alb-2 created
  5. `ingress2.yaml` という名前のファイルを作成し、次の内容をファイルにコピーします。ingressClassName パラメーターを使用して、別の ALB インスタンスを指定します。次の例では、Ingress を `alb-2` という名前の IngressClass およびその IngressClass に関連付けられている `alb-2` という名前の ALB インスタンスに関連付けるために、ingressClassName フィールドに alb-2 が指定されています。

    v1.19 以降のクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cafe-ingress2
    spec:
      ingressClassName: alb-2
      rules:
      - http:
          paths:
          # コンテキストパスを設定します。
          - path: /tea
            pathType: ImplementationSpecific
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
          # コンテキストパスを設定します。
          - path: /coffee
            pathType: ImplementationSpecific
            backend:
              service:
                name: coffee-svc
                port: 
                  number: 80

    v1.19 より前のクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: cafe-ingress2
    spec:
      ingressClassName: alb-2
      rules:
      - http:
          paths:
          # コンテキストパスを設定します。
          - path: /tea
            backend:
              serviceName: tea-svc
              servicePort: 80
          # コンテキストパスを設定します。
          - path: /coffee
            backend:
              serviceName: coffee-svc
              servicePort: 80
  6. 次のコマンドを実行して Ingress を作成します。

    kubectl apply -f ingress2.yaml

    予想される出力:

    ingress.networking.k8s.io/cafe-ingress2 created

IPv6 アドレスの使用

ALB インスタンスを作成するときに、addressIpVersion フィールドを DualStack に設定することでデュアルスタックを有効にできます。 これにより、IPv4 と IPv6 の両方がサポートされます。

重要

addressIpVersion パラメーターは、AlbConfig を作成するときにのみ解析されます。 このパラメーターを更新しても有効になりません。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    addressIpVersion: DualStack # デュアルスタックを有効にします。
    ...

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

AlbConfig で HTTPS リスナーを設定するときに、TLS セキュリティポリシーを指定できます。 TLS セキュリティポリシーには、カスタムポリシーとシステムデフォルトポリシーが含まれます。 詳細については、「TLS セキュリティポリシー」をご参照ください。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    #...
  listeners:
  - port: 443
    protocol: HTTPS
    securityPolicyId: tls_cipher_policy_1_1 # 指定されたセキュリティポリシーの ID。
  #...

Simple Log Service でのアクセスログの有効化

ALB Ingress がアクセスログを収集するようにする場合は、AlbConfig で logProjectlogStore を指定できます。

説明
  • クラスターを作成したときに、Simple Log Service プロジェクトを自動的に作成するか、既存のプロジェクトを使用するかを選択しました。 Container Service for Kubernetes (ACK) コンソールにログインし、左側のナビゲーションウィンドウで [クラスター] を選択します。[クラスター] ページで、対象のクラスターの名前をクリックし、左側のナビゲーションウィンドウで [クラスター情報] を選択します。 [基本情報] タブで、クラスターに関連付けられている [Simple Log Service プロジェクト] を表示できます。

  • logStore の名前は alb_ で始まる必要があります。 指定した logStore が存在しない場合は、自動的に作成されます。

  • 既存の ALB インスタンスを再利用し、AlbConfig を介して Simple Log Service を有効にする場合は、forceOverride フィールドを true に設定して、ALB インスタンスのプロパティを強制的に上書きする必要があります。 詳細については、「既存の ALB インスタンスの再利用」をご参照ください。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    accessLogConfig:
      logProject: "k8s-log-xz92lvykqj1siwvif****"
      logStore: "alb_****"
    #...

[基本情報] タブで、[Simple Log Service プロジェクト] の右側にある名前をクリックして、収集されたアクセスログを表示します。

AlbConfig の削除

各 AlbConfig は 1 つの ALB インスタンスに対応します。 したがって、ALB インスタンスが AlbConfig を使用して作成された場合、AlbConfig を削除することで ALB インスタンスを削除できます。

重要

AlbConfig を削除する前に、関連付けられているすべての Ingress リソースを削除する必要があります。

次のコマンドを実行して AlbConfig を削除します。

kubectl delete AlbConfig <AlbConfig_NAME> # <AlbConfig_NAME> を AlbConfig の名前に置き換えます。

再利用された ALB インスタンスの AlbConfig の削除

AlbConfig を作成するときに既存の ALB インスタンスを再利用することを選択した場合、インスタンスは AlbConfig によって作成されません。 したがって、AlbConfig を削除しても ALB インスタンスは削除されません。 再利用された ALB インスタンスの AlbConfig を削除するには、次の手順を実行します。

  1. kubectl edit コマンドを実行して AlbConfig を変更し、すべてのリスナーを削除します。 これを行うには、spec.listeners フィールドの下のすべてのエントリを削除します。

    重要

    この操作は、クラスターにインストールされている ALB Ingress Controller コンポーネントのバージョンが v2.10.0-aliyun.1 以前の場合に実行します。 それ以外の場合は、この手順をスキップしてください。

  2. 次のコマンドを実行して AlbConfig を削除します。

    重要

    AlbConfig を削除する前に、関連付けられているすべての Ingress リソースを削除する必要があります。

    kubectl delete AlbConfig <AlbConfig_NAME> # <AlbConfig_NAME> を AlbConfig の名前に置き換えます。

Listeners フィールドの更新

用語

  • オブジェクト設定ファイル: Kubernetes オブジェクトを定義および記述するために使用されるファイル。 オブジェクトの仕様と設定情報が含まれています。

  • 既存のオブジェクト設定ファイル: Kubernetes クラスターに適用されたオブジェクト設定ファイル。

  • last-applied-configuration フィールド: オブジェクトの最後に適用された設定を記録する Kubernetes オブジェクトのアノテーションフィールド。 オブジェクト設定が変更されてもリアルタイムでは更新されません。

Listeners フィールドの更新方法

Listeners フィールドは配列タイプの構成であり、通常は置換によって更新されます。 Listeners フィールドを更新すると、新しい構成が既存の構成を完全に置き換えます。 詳細については、次の表をご参照ください。

序数

条件

結果

オブジェクトはオブジェクト設定ファイルにありますか?

オブジェクトは既存のオブジェクト設定ファイルにありますか?

オブジェクトは last-applied-configuration フィールドにありますか?

はい

はい

- (該当なし)

オブジェクト設定ファイルの値が既存の設定ファイルに適用され、既存のオブジェクトの特定のフィールドが更新されます。

はい

いいえ

- (該当なし)

オブジェクト設定ファイルの値は、既存のオブジェクトの設定を更新するのではなく、新しいオブジェクトを作成するために使用されます。

いいえ

該当なし

はい

フィールドが既存のオブジェクト設定ファイルから削除されます。 これは、フィールドが既存のオブジェクト設定から削除されることを意味します。 フィールドはデフォルト値にリセットされる場合があります。

いいえ

はい

いいえ

フィールドが既存のオブジェクト設定ファイルから削除されます。

次のコードは、オブジェクト設定ファイル、既存のオブジェクト設定ファイル、および last-applied-configuration フィールドの Listeners フィールドのサンプル設定を示しています。

# オブジェクト設定ファイルは、次の期待される設定値を提供します。
  listeners:
  - port: 8001
    protocol: HTTP
  - port: 8003
    protocol: HTTP
  - port: 8005 # 8005 を追加します。
    protocol: HTTP

# 既存のオブジェクト設定ファイルは、既存のオブジェクトの設定を示します。
  listeners:
  - port: 8001
    protocol: HTTP
  - port: 8002  # 8002 を削除します。
    protocol: HTTP
  - port: 8003
    protocol: HTTP
  - port: 8004  # 8004 を削除します。
    protocol: HTTP
    
# last-applied-configuration は、オブジェクトの最後に適用された設定を記録します。
  listeners:
  - port: 8001 
    protocol: HTTP
  - port: 8002  # 8002 を削除します。
    protocol: HTTP
  - port: 8003
    protocol: HTTP

AlbConfig の Listeners フィールドは、次の結果に更新されます。

# Listeners 設定ファイルの結果。
  listeners:
  - port: 8001
    protocol: HTTP
  - port: 8003
    protocol: HTTP
  - port: 8005
    protocol: HTTP
  • ポート 8001 と 8003 は条件 ① を満たし、保持されます。

  • ポート 8005 は条件 ② を満たし、追加されます。

  • ポート 8002 は条件 ③ を満たし、削除されます。

  • ポート 8004 は条件 ④ を満たし、削除されます。

リスナーの作成

リスナーは、ALB インスタンスがトラフィックを処理するために使用する最上位のエントリポイントです。 ALB インスタンスは、リスナーを作成した後にのみ、ポートを開いてクライアントリクエストを受け入れることができます。

AlbConfig で portprotocol を設定して、対応するリスナーを作成できます。 portprotocol、またはその他のリスナープロパティを変更すると、システムは元のリスナーを削除し、新しいリスナーを作成して置き換えます。

リスナーは、HTTP、HTTPS、QUIC の 3 つのアプリケーション層プロトコルを使用できます。

重要

異なるプロトコルを持つ複数のリスナーを同時に使用できます。 ただし、Ingress が複数のリスナーに同時に適用されるようにするには、Ingress リソースにアノテーションを設定する必要があります。 詳細については、「カスタムリスナーポートの設定」をご参照ください。

HTTP リスナーの作成

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
  ...
  listeners:
    - port: 80
      protocol: HTTP # protocol の有効な値は HTTP、HTTPS、QUIC です。
  ...
説明

HTTP プロトコルは WebSocket と自動的に互換性があります。 特別な設定は必要ありません。

HTTPS リスナーの作成

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
  ...
  listeners:
    - port: 443
      protocol: HTTPS
  ...
重要

HTTPS リスナーを使用する場合は、証明書を設定する必要があります。 詳細については、「暗号化通信を実現するための HTTPS 証明書の設定」をご参照ください。

QUIC リスナーの作成

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
  ...
  listeners:
    - port: 443
      protocol: QUIC
  ...
重要

QUIC リスナーを使用すると、クライアントは HTTP/3 プロトコルを使用してサービスにアクセスできます。 QUIC リスナーの使用の詳細については、「QUIC リスナーを使用して HTTP/3 プロトコルをサポートする」をご参照ください。

証明書の指定

ALB を設定するときに、kubectl edit albconfig <Albconfig_Name> コマンドを実行して、HTTPS プロトコルの暗号化と ID 検証を有効にします。 AlbConfig で、certificates パラメーターをリスナーが使用する証明書の ID に設定します。 この証明書は、HTTPS トラフィックの暗号化と復号化に使用されます。

設定で証明書を指定しない場合、リスナーは ALB の作成時に作成されません。 代わりに、リスナーは Ingress が関連付けられ、ドメイン名に基づいて証明書が自動的に検出された後にのみ作成されます。

証明書の設定の詳細については、「暗号化通信のための HTTPS 証明書の設定」をご参照ください。

重要

ALB は最初の証明書をデフォルトの証明書として設定します。 ALB は、デフォルトの証明書の有効期限が切れたり、使用されなくなったりした場合にのみ、リクエストの暗号化に他の証明書を使用します。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
  ...
  listeners:
  - caEnabled: false
    certificates:
    - CertificateId: 756****-cn-hangzhou # 証明書 ID。
      IsDefault: true
    port: 443
    protocol: HTTPS
  ...

リスナーリクエストのタイムアウト期間の設定

AlbConfig でリスナーのリクエストタイムアウト期間を設定できます。 値は秒単位で指定され、1 から 600 の範囲で指定できます。 バックエンドサーバーがタイムアウト期間内に応答しない場合、Application Load Balancer (ALB) インスタンスは待機を停止し、HTTP 504 エラーコードをクライアントに返します。 タイムアウト期間を指定しない場合、デフォルト値の 60 秒が使用されます。 以下はサンプル YAML ファイルです。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    requestTimeout: 40 # 値を入力しない場合、デフォルトのタイムアウト期間は 60 秒です。
  ...

データ圧縮機能の使用

この機能を有効にすると、Application Load Balancer (ALB) インスタンスは特定のファイルタイプを圧縮します。 gzipEnabled の有効な値:

  • true: 特定のファイルタイプを圧縮します。

  • false: どのファイルタイプも圧縮しません。

説明
  • 圧縮アルゴリズム: クライアントが Brotli と Gzip の両方の圧縮アルゴリズムをサポートしている場合、ALB はより効率的な Brotli アルゴリズムを優先します。 Brotli アルゴリズムはすべてのファイルタイプを圧縮できます。 Gzip アルゴリズムは、text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、application/atom+xml、application/xml、application/json などのファイルタイプを圧縮できます。

  • 圧縮条件: 応答ヘッダーの Content-Length が 1024 バイトを超え、クライアントリクエストヘッダーの Accept-Encoding にサポートされているアルゴリズムが含まれている場合に圧縮が実行されます。

以下は、データ圧縮を有効にするためのサンプル YAML ファイルです。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    gzipEnabled: true
  ...

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

この機能を有効にすると、ALB インスタンスは、リクエストをバックエンドサービスに転送するときに、クライアントの送信元 IP アドレスを含むフィールドを HTTP リクエストヘッダーに追加します。 XForwardedForEnabled の有効な値:

  • true: クライアントの送信元 IP アドレスを取得します。

  • false: クライアントの送信元 IP アドレスを取得しません。

重要

このパラメーターは、HTTP および HTTPS リスナーに対してのみ設定できます。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    #...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForEnabled: true # XForwardedForEnabled は無効にできません。
  #...

クライアントポートの取得

この機能を有効にすると、Application Load Balancer (ALB) インスタンスは、リクエストをバックエンドサービスに転送するときに、クライアントポートを含むフィールドを HTTP リクエストヘッダーに追加します。 XForwardedForClientSrcPortEnabled の有効な値は次のとおりです。

  • true: クライアントポートを取得します。

  • false: クライアントポートを取得しません。

重要

このパラメーターは、HTTP および HTTPS リスナーに対してのみ設定できます。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForClientSrcPortEnabled: true
  ...

ALB インスタンスのリスナープロトコルの取得

この機能を有効にすると、ALB インスタンスは、リクエストをバックエンドサービスに転送するときに、リスナープロトコルを含むフィールドを HTTP リクエストヘッダーに追加します。 XForwardedForProtoEnabled の有効な値:

  • true: インスタンスのリスナープロトコルを取得します。

  • false: インスタンスのリスナープロトコルを取得しません。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForProtoEnabled: true
  ...

ALB インスタンスの ID の取得

この機能を有効にすると、ALB インスタンスは、リクエストをバックエンドサービスに転送するときに、その ID を含むフィールドを HTTP リクエストヘッダーに追加します。 XForwardedForSLBIdEnabled の有効な値は次のとおりです。

  • true: SLB インスタンスの ID を取得します。

  • false: インスタンス ID をリクエストヘッダーに追加しません。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForSLBIdEnabled: true
  ...

ALB インスタンスのリスナーポートの取得

この機能を有効にすると、ALB インスタンスは、リクエストをバックエンドサービスに転送するときに、リスナーポートを含むフィールドを HTTP リクエストヘッダーに追加します。 XForwardedForSLBPortEnabled の有効な値:

  • true: インスタンスのリスナーポートを取得します。

  • false: インスタンスのリスナーポートを取得しません。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForSLBPortEnabled: true
  ...

信頼できるプロキシサーバーの IP アドレスの指定

AlbConfig で、XForwardedForClientSourceIpsEnabled 設定項目を使用して、ALB インスタンスが X-Forwarded-For ヘッダーフィールドからクライアントの送信元 IP アドレスを取得できるようにします。 XForwardedForClientSourceIpsTrusted 設定項目を使用して、信頼できるプロキシサーバーの IP アドレスのセットを指定します。 ALB インスタンスは、X-Forwarded-For フィールドの IP アドレスリストを逆の順序で走査し、信頼できる IP アドレスリストにない最初の IP アドレスをクライアントの実際の IP アドレスとして選択します。

たとえば、X-Forwarded-For フィールドの値が <送信元クライアント IP アドレス, プロキシ IP-1, プロキシ IP-2> の場合、XForwardedForClientSourceIpsTrustedプロキシ IP-1プロキシ IP-2 を入力して、送信元クライアント IP アドレスを取得できます。

重要

このパラメーターは、HTTP および HTTPS リスナーに対してのみ設定できます。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata: 
  name: alb
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForClientSourceIpsEnabled: true # true は、ALB が X-Forwarded-For ヘッダーフィールドから送信元クライアント IP アドレスを見つけることを許可することを示します。 この場合、XForwardedForClientSourceIpsTrusted を正しい形式のコンテンツで設定する必要があります。 false は、ALB が X-Forwarded-For ヘッダーフィールドから送信元クライアント IP アドレスを見つけることを許可しないことを示します。
      XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16  # 有効な形式で IP アドレスまたは CIDR ブロックを入力し、セミコロン (;) で区切ります。 IP アドレスまたは CIDR ブロックの間にスペースを追加しないでください。 このパラメーターは、XForwardedForClientSourceIpsEnabled が true に設定されている場合にのみ有効になります。
  ...

ACL ベースのアクセスの制御の設定

AlbConfig を使用して、ALB リスナーのアクセスの制御機能を有効にできます。 これにより、インバウンドの許可または拒否ルールを設定することで、クライアントリクエストを正確に制御し、リクエスト転送を管理できます。 アクセス制御リスト (ACL) の詳細については、「ACL を設定してアクセスの制御を実装する」をご参照ください。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
   #...
  listeners:
  - port: 80
    protocol: HTTP
    aclConfig:
      aclEntries:
      - 127.0.0.1/32
      aclType: White
  #...

次の表にフィールドを示します。

  • aclType: リスナーの ACL のタイプを指定します。 有効な値は、ブラックリストの場合は Black、ホワイトリストの場合は White です。

  • aclEntries: アクセス制御エントリの CIDR ブロック (127.0.0.1/32 など)。

リスナーの削除

インスタンスには複数のリスナーを設定できます。 リスナーを削除するには、kubectl edit albconfig <Albconfig_Name> コマンドを実行し、AlbConfig の albconfig.spec.listeners フィールドからリスナーを削除します。

重要

リスナーを削除する前に、関連付けられているすべての Ingress を削除する必要があります。 そうしないと、リスナーを削除できず、エラーが報告されます。

# リスナーを削除する前の設定。
  listeners:
  - port: 8001
    protocol: HTTP
  - port: 8002  # 8002 リスナーを削除します。
    protocol: HTTP

# リスナーを削除した後の設定。
  listeners:
  - port: 8001
    protocol: HTTP

よくある質問

AlbConfig YAML ファイルの保存時にエラーが報告される: alb: listener port number must between [1:65535], or you should set listen port explicitly in listener config.

原因

AlbConfig YAML ファイルの spec.listener セクションでは、- 記号がリスナー設定の開始を示します。 左側の不正な例では、3 つの - 記号が使用されており、3 つの別々のリスナーを定義しています。 エラーは、最後の - 記号に関連付けられている certificatesport 設定が欠落しているために発生します。

解決策

各リスナー設定は、単一の - で始まる必要があります。 右側の修正された例では、certificates の前の - が削除されています。 これには、HTTPS: 443 リスナー設定内の証明書設定が含まれます。

エラーの原因となる不正な例:

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
  ...
  listeners:
  - port: 80
    protocol: HTTP
  - port: 443
    protocol: HTTPS
  - certificates:  # 不正な例: 余分な「-」が設定されています。
    - CertificateId: 756****-cn-hangzhou
      IsDefault: true
  ...

修正された例:

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
  ...
  listeners:
  - port: 80
    protocol: HTTP
  - port: 443
    protocol: HTTPS
    certificates:  # 余分な「-」が削除され、証明書設定が HTTPS: 443 リスナーに含まれるようになりました。
    - CertificateId: 756****-cn-hangzhou
      IsDefault: true
  ...