AlbConfig は、ALB Ingress Controller によって提供されるカスタムリソース定義 (CRD) であり、Application Load Balancer (ALB) インスタンスとリスナーを設定するために使用されます。このトピックでは、AlbConfig の作成、変更、更新方法、および Simple Log Service を有効にする方法について説明します。
範囲
ALB Ingress Controller がクラスターにインストールされていること。 詳細については、「ALB Ingress Controller の管理」をご参照ください。
説明ALB Ingress を使用して 専用クラスター にデプロイされたサービスにアクセスするには、まず ALB Ingress Controller に必要な権限をクラスターに付与する必要があります。 詳細については、「専用クラスターに ALB Ingress Controller へのアクセス権を付与する」をご参照ください。
注意事項
リソース設定を直接変更または更新するには、
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 リソースを自動的に作成します。
`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.nameALB インスタンスの名前。
spec.config.addressTypeALB インスタンスのアドレスタイプ。 有効な値:
Internet(デフォルト): ALB インスタンスにはパブリック IP アドレスがあります。 ドメイン名はパブリック IP アドレスに解決されます。 インスタンスはインターネット経由でアクセスできます。Intranet: ALB インスタンスにはプライベート IP アドレスのみがあります。 ドメイン名はプライベート IP アドレスに解決されます。 インスタンスは VPC 内でのみアクセスできます。
重要addressTypeパラメーターは、ALB インスタンスを作成するときにのみ解析されます。 このパラメーターを更新しても有効になりません。spec.config.zoneMappingsvSwitchId: 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 を作成します。
kubectl apply -f alb.yaml予想される出力:
AlbConfig.alibabacloud.com/alb created次のコマンドを実行して 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次の表にパラメーターを示します。
パラメーター | 説明 |
|
重要 ALB インスタンスを再利用する場合、リスナー名を手動で変更しないでください。 これにより、リスナーが ACK によって誤って管理されたり、管理されなくなったりするのを防ぎます。 AlbConfig によって作成または更新されたリスナーは ACK によって管理され、その名前はデフォルトで |
| インスタンスを再利用するときに ALB インスタンスのプロパティを強制的に上書きするかどうかを指定します。
|
| インスタンスを再利用するときにリスナーのプロパティを強制的に上書きするかどうかを指定します。
|
インターネット共有帯域幅インスタンスの設定
この機能を有効にすると、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 を更新する方法について説明します。
次のコマンドを実行して、AlbConfig の名前を表示します。
kubectl get AlbConfig予想される出力:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncs.com 28m次のコマンドを実行して 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 リソースに特定のパラメーターを設定することで実現されます。
`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次のコマンドを実行して IngressClass を作成します。
kubectl apply -f ingress_class.yaml予想される出力:
ingressclass.networking.k8s.io/alb created`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: 80v1.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次のコマンドを実行して Ingress を作成します。
kubectl apply -f ingress.yaml予想される出力:
ingress.networking.k8s.io/cafe-ingress created
これらの手順を完了すると、IngressClass を使用して AlbConfig が Ingress に関連付けられます。
複数の ALB インスタンスの作成と使用
複数の ALB インスタンスを同時に使用する場合は、Ingress リソースの spec.ingressClassName フィールドに異なる IngressClass を指定して、Ingress を異なる ALB インスタンスに関連付けます。
`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****次のコマンドを実行して AlbConfig を作成します。
kubectl apply -f alb-2.yaml予想される出力:
AlbConfig.alibabacloud.com/alb-2 created`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 の名前。次のコマンドを実行して IngressClass を作成します。
kubectl apply -f ingress_class2.yaml予想される出力:
ingressclass.networking.k8s.io/alb-2 created`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: 80v1.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次のコマンドを実行して 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 で logProject と logStore を指定できます。
クラスターを作成したときに、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 を削除するには、次の手順を実行します。
kubectl editコマンドを実行して AlbConfig を変更し、すべてのリスナーを削除します。 これを行うには、spec.listenersフィールドの下のすべてのエントリを削除します。重要この操作は、クラスターにインストールされている ALB Ingress Controller コンポーネントのバージョンが v2.10.0-aliyun.1 以前の場合に実行します。 それ以外の場合は、この手順をスキップしてください。
次のコマンドを実行して 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: HTTPAlbConfig の Listeners フィールドは、次の結果に更新されます。
# Listeners 設定ファイルの結果。
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005
protocol: HTTPポート 8001 と 8003 は条件 ① を満たし、保持されます。
ポート 8005 は条件 ② を満たし、追加されます。
ポート 8002 は条件 ③ を満たし、削除されます。
ポート 8004 は条件 ④ を満たし、削除されます。
リスナーの作成
リスナーは、ALB インスタンスがトラフィックを処理するために使用する最上位のエントリポイントです。 ALB インスタンスは、リスナーを作成した後にのみ、ポートを開いてクライアントリクエストを受け入れることができます。
AlbConfig で port と protocol を設定して、対応するリスナーを作成できます。 port、protocol、またはその他のリスナープロパティを変更すると、システムは元のリスナーを削除し、新しいリスナーを作成して置き換えます。
リスナーは、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 つの別々のリスナーを定義しています。 エラーは、最後の - 記号に関連付けられている certificates の port 設定が欠落しているために発生します。
解決策
各リスナー設定は、単一の - で始まる必要があります。 右側の修正された例では、certificates の前の - が削除されています。 これには、HTTPS: 443 リスナー設定内の証明書設定が含まれます。
エラーの原因となる不正な例: | 修正された例: |