AlbConfig の Listeners フィールドは、Application Load Balancer (ALB) のリスナーを設定するために使用されます。本トピックでは、Listeners フィールドの概要と、AlbConfig を使用したリスナーの作成、変更、および更新方法について説明します。
前提条件
クラスターに ALB Ingress コントローラーがインストール済みである必要があります。詳細については、「ALB Ingress コントローラーの管理」をご参照ください。
説明ACK 専用クラスターにデプロイされたサービスへ ALB Ingress を使用してアクセスするには、事前に ALB Ingress コントローラーに必要な権限をクラスターに付与する必要があります。詳細については、「ACK 専用クラスターへの ALB Ingress コントローラーのアクセス許可付与」をご参照ください。
AlbConfig リソースが作成済みである必要があります。詳細については、「AlbConfig の作成」をご参照ください。
Listeners フィールドの説明
用語解説
オブジェクト構成ファイル:Kubernetes オブジェクトを定義・記述するファイルです。オブジェクトの仕様および構成情報を含みます。
既存のオブジェクト構成ファイル:Kubernetes クラスターにすでに適用済みのオブジェクト構成ファイルです。
last-applied-configuration フィールド:Kubernetes オブジェクトのアノテーションフィールドであり、オブジェクトに最後に適用された構成情報を記録します。このフィールドは、オブジェクトの構成が変更された際にリアルタイムで更新されません。
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:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005
protocol: HTTP8001 および 8003 は条件①を満たしており、保持されます。
8005 は条件②を満たしており、追加されます。
8002 は条件③を満たしており、削除されます。
8004 は条件④を満たしており、削除されます。
リスナーの作成
リスナーは、ALB インスタンスがトラフィックを処理するための最上位エントリポイントです。アプリケーション層の情報をもとに、ALB インスタンスがトラフィックをスマートに分散できるようにします。
コンソール
AlbConfig の port および protocol パラメーターを設定することで、リスナーを作成できます。port および protocol パラメーターは、リスナーの固有のプロパティです。port、protocol、またはその他のリスナープロパティを変更すると、システムは元のリスナーを削除し、新しいリスナーを作成します。
HTTP プロトコルでは WebSocket が自動的にサポートされます。特別な設定は不要です。
リソースオブジェクトブラウザー タブで検索ボックスに「AlbConfig」と入力し、検索結果から AlbConfig をクリックします。
[AlbConfig] ページで、対象の AlbConfig リソース(デフォルトは alb)を見つけ、[操作] 列の [YAML の編集] をクリックします。
YAML の表示 パネルで、
spec.listeners.portおよびspec.listeners.protocolフィールドを追加し、OK をクリックします。
kubectl
AlbConfig の port および protocol パラメーターを設定することで、リスナーを作成できます。port および protocol パラメーターは、リスナーの固有のプロパティです。port、protocol、またはその他のリスナープロパティを変更すると、システムは元のリスナーを削除し、新しいリスナーを作成します。
コマンド
kubectl edit albconfig <Albconfig_Name>を実行します。説明HTTP プロトコルでは WebSocket が自動的にサポートされます。特別な設定は不要です。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: ... listeners: - port: 80 protocol: HTTP # protocol の選択肢:HTTP、HTTPS、QUIC。 ...
証明書の指定
HTTPS プロトコルの暗号化および本人確認を有効にするには、コマンド kubectl edit albconfig <AlbConfig_Name> を実行します。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
...TLS セキュリティポリシーの指定
コマンド kubectl edit albconfig <Albconfig_Name> を実行します。AlbConfig リソース内で securityPolicyId パラメーターをセキュリティポリシー ID に設定します。AlbConfig で HTTPS リスナーを設定する際には、TLS セキュリティポリシーを指定できます。TLS セキュリティポリシーには、カスタムポリシーおよびデフォルトポリシーが含まれます。詳細については、「TLS セキュリティポリシー」をご参照ください。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
...
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1 # セキュリティポリシー ID。
...リスナーのリクエストタイムアウトの設定
kubectl edit albconfig <Albconfig_Name> コマンドを実行します。AlbConfig 内で requestTimeout パラメーターを設定し、リスナーのリクエストタイムアウトを指定します。これにより、応答がないリクエストに対してクライアントが長時間待機することを防ぎます。
リクエストタイムアウトとは、Server Load Balancer (SLB) がクライアントからのリクエストを受信した後、バックエンドサーバーからの応答を待機する最大時間です。この時間内に応答が返されない場合、SLB インスタンスは待機を中止し、クライアントに HTTP 504 エラーを返します。
タイムアウト値の単位は秒です。値は 1 ~ 600 の整数である必要があります。より長いタイムアウトを必要とする場合は、クォータセンター でクォータ増加を申請できます。
リクエストタイムアウトを設定しない場合、デフォルト値の 60 秒が適用されます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
requestTimeout: 60 # リスナーの接続リクエストタイムアウトを設定します。有効範囲:1 ~ 600。省略した場合は、デフォルトのタイムアウト(60 秒)が適用されます。
...リスナーのタグ設定
kubectl edit albconfig <Albconfig_Name> コマンドを実行します。その後、AlbConfig ファイル内で tags パラメーターを使用して、リスナーにタグを追加します。以下のコードブロックに構成例を示します。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default1
spec:
config:
name: alb-test1
addressType: Internet
zoneMappings:
- vSwitchId: vsw-rj9qsvwfjcmtbyvt0xxx
- vSwitchId: vsw-rj99o3wge24iq2ehtxxx
listeners:
- port: 80
protocol: HTTP
tags:
- key: "key"
value: "value1"データ圧縮の使用
データ圧縮は、転送されるデータ量を削減することでネットワーク伝送効率およびパフォーマンスを向上させる最適化手法です。kubectl edit albconfig <Albconfig_Name> コマンドを実行します。AlbConfig 内で gzipEnabled パラメーターを設定し、リスナーのデータ圧縮を有効または無効にします。Brotli および Gzip は、広く使用されている 2 つの圧縮アルゴリズムです。
Brotli はすべてのコンテンツタイプを圧縮します。
Gzip は以下のコンテンツタイプを圧縮します:text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、application/atom+xml、application/xml、application/json。
以下の YAML 例では、データ圧縮を無効にする方法を示します。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
gzipEnabled: false # true:特定のファイルタイプを圧縮します。false:すべてのファイルタイプの圧縮を無効にします。
...オリジンクライアント IP アドレスの取得
ALB インスタンスがリクエストをバックエンドサービスに転送する際、クライアントのソース IP アドレスを HTTP リクエストヘッダーに追加します。
このパラメーターは、HTTP および HTTPS リスナーでのみサポートされます。
XForwardedForEnabled はデフォルトで有効化されており、無効化できません。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true
...リスナーのプロトコルの取得
この機能を有効化すると、ALB はリクエストをバックエンドサービスに転送する際に、HTTP リクエストヘッダーにリスナーのプロトコルを追加します。XForwardedForProtoEnabled の有効な値は以下のとおりです。
true:リスナーのプロトコルを取得します。false:リスナーのプロトコルを取得しません。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForProtoEnabled: true
...リスナー SLB インスタンス ID の取得
kubectl edit albconfig <Albconfig_Name> コマンドを実行します。AlbConfig 内で、XForwardedForSLBIdEnabled ヘッダーフィールドを使用して SLB インスタンス ID を取得できます。
このパラメーターは、HTTP および HTTPS リスナーでのみ設定可能です。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBIdEnabled: true # true:SLB インスタンス ID を取得します。false:SLB インスタンス ID を取得しません。
...リスニングポートの取得
kubectl edit albconfig <Albconfig_Name> コマンドを実行します。AlbConfig 内の XForwardedForSLBPortEnabled フィールドを使用して、インスタンスのリスニングポートを取得できます。
このパラメーターは、HTTP および HTTPS リスナーでのみサポートされます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBPortEnabled: true # true:SLB インスタンスのリスニングポートを取得します。false:ポートを取得しません。
...信頼済みプロキシ IP アドレスの指定
kubectl edit albconfig <Albconfig_Name> コマンドを実行します。AlbConfig 内で、XForwardedForClientSourceIpsEnabled 設定項目を使用して、Application Load Balancer (ALB) が X-Forwarded-For ヘッダーから実際のクライアント IP アドレスを取得できるようにします。XForwardedForClientSourceIpsTrusted 設定項目を使用して、信頼済みプロキシ IP アドレスのグループを指定します。ALB は、X-Forwarded-For フィールド内の IP アドレスリストを右から左に走査し、信頼済み IP アドレスリストに含まれていない最初の IP アドレスをクライアントのソース IP アドレスとして選択します。この IP アドレスは、ソース IP を基準としたレート制限などのシナリオで使用されます。
このパラメーターは、HTTP および HTTPS リスナーでのみ設定可能です。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
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 に設定されている場合にのみ有効です。
...アクセスの制御の設定
kubectl edit albconfig <Albconfig_Name> コマンドを実行します。AlbConfig 内で aclConfig パラメーターを使用して、ALB リスナーのアクセスの制御を有効化します。これにより、クライアントリクエストを正確に制御し、リクエストの転送を管理できます。インバウンドの許可または拒否ルールを設定することで、特定の IP アドレスを制限できます。アクセスの制御の構成オプションの詳細については、「アクセスの制御のための ACL の設定」をご参照ください。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
aclConfig: # ALB リスナーのアクセスの制御を有効化します。
aclEntries:
- 127.0.0.1/32 # アクセス制御エントリの CIDR ブロックを指定します。CIDR ブロックは完全なものである必要があります。
aclType: White # リスナーの ACL タイプを Black または White に設定します。
...リスナーの削除
インスタンスには複数のリスナーを設定できます。リスナーを削除するには、kubectl edit albconfig <Albconfig_Name> コマンドを実行し、albconfig.spec.listeners フィールドから該当リスナーを削除します。
リスナーを削除する前に、関連付けられたすべての Ingress を削除する必要があります。これを実行しないと、削除は失敗し、エラーが報告されます。
# リスナー削除前の構成。
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # ポート 8002 のリスナーを削除します。
protocol: HTTP
# リスナー削除後の構成。
listeners:
- port: 8001
protocol: HTTP