AlbConfigのListenersパラメーターを設定して、Application Load Balancer (ALB) インスタンスのリスナーを設定できます。 このトピックでは、Listenersパラメーターと、AlbConfigを使用してリスナーを作成、変更、および更新する方法について説明します。
前提条件
異なるゾーンに存在する2つのvSwitchが作成され、ACKクラスターと同じ仮想プライベートクラウド (VPC) にデプロイされます。 詳細については、「vSwitchの作成と管理」をご参照ください。
ALB Ingressコントローラーがクラスターにインストールされています。 詳細については、「ALB Ingressコントローラーの管理」をご参照ください。
説明ALB Ingressを使用してACK専用クラスターにデプロイされたサービスにアクセスするには、まずALB Ingressコントローラーが必要とする権限をクラスターに付与する必要があります。 詳細については、「ACK専用クラスターにALB Ingressコントローラーへのアクセスを許可する」をご参照ください。
AlbConfigが作成されます。 詳細については、「AlbConfigの作成」をご参照ください。
kubectlクライアントがACKクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
Listenersパラメーターの説明
用語
オブジェクト設定ファイル: Kubernetesオブジェクトの設定を定義するファイル。
ライブオブジェクト設定ファイル: Kubernetesクラスターに適用されているオブジェクト設定ファイル。
last-applied-configuration: Kubernetesオブジェクトのアノテーション。 注釈は、オブジェクトの最新の構成の内容を記録する。 注釈は、オブジェクトの構成が更新されるときにリアルタイムで更新されない。
Listenersパラメーターの更新方法
Listenersパラメーターは配列型です。 ほとんどの場合、配列内のフィールドを置き換えることでListenersパラメーターを更新できます。 Listenersパラメーターを更新すると、フィールドは指定した新しいフィールドに置き換えられます。 次の表にルールを示します。
いいえ | 条件 | 結果 | ||
リスナーがオブジェクト構成ファイルにある | リスナーがライブオブジェクト構成ファイルにあります | リスナーは最後に適用された構成アノテーションにあります | ||
1 | 必須 | 必須 | -(無関係) | リスナーはライブオブジェクト構成ファイルに保持されます。 |
2 | 必須 | 選択可能 | -(無関係) | リスナーがライブオブジェクト構成ファイルに追加されます。 |
3 | 選択可能 | -(無関係) | 必須 | リスナーがライブオブジェクト構成ファイルから削除されます。 ただし、リスナーのフィールドをデフォルト設定にリセットすることもできます。 |
4 | 継続しない | 継続する | 選択可能 | リスナーがライブオブジェクト構成ファイルから削除されます。 |
例
次の例は、オブジェクト構成ファイル、ライブオブジェクト構成ファイル、およびlast-applied-configuration
アノテーションの内容を示しています。
# The content of the object configuration file.
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005 # Add port 8005.
protocol: HTTP
# The content of the live object configuration file.
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Delete port 8002.
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8004 # Delete port 8004.
protocol: HTTP
# The content of the last-applied-configuration annotation.
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Delete port 8002.
protocol: HTTP
- port: 8003
protocol: HTTP
次のコードブロックは、更新後のListenersパラメーターの設定を示しています。
# The configuration of the Listeners parameter.
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005
protocol: HTTP
ポート8001とポート8003はルール1に一致します。 したがって、それらは保持されます。
ポート8005はルール2に一致します。 したがって、それは追加されます。
ポート8002はルール3に一致します。 したがって、削除されます。
ポート8004はルール4に一致します。 したがって、削除されます。
リスナーの作成
ALBインスタンスは、リスナーを使用して、リクエストのアプリケーション層情報に基づいて外部リクエストを受信および転送します。
kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、AlbConfigを変更します。port
およびprotocol
パラメーターを設定して、リスナーを作成できます。 port
およびprotocol
パラメーターは、リスナーの唯一の識別子です。 port
またはprotocol
パラメーターを変更すると、元のリスナーが削除され、新しい構成に基づいてリスナーが作成されます。
HTTPはWebSocketと互換性があります。 追加の設定は必要ありません。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
...
listeners:
- port: 80
protocol: HTTP # Valid values: HTTP, HTTPS, and QUIC.
...
証明書の指定
ALBインスタンスの作成時にHTTPSリスナーの暗号化と認証を有効にする場合は、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、ALBインスタンスの設定に使用されるAlbConfigを変更します。 次に、AlbConfigのcertificates
パラメーターに証明書IDを指定します。
パラメーターに証明書を指定しない場合、システムがALBインスタンスを作成するときにHTTPSリスナーは作成されません。 Ingressがリスナーに関連付けられ、IngressがIngress構成で指定されたドメイン名に基づいて証明書を自動的に検出するまで、システムは待機します。 これは、ドメイン名に基づく証明書の自動検出により、リスナーの作成が遅れることを意味します。
証明書の設定方法の詳細については、「暗号化通信用のHTTPS証明書の設定」をご参照ください。
ALBは、デフォルトの証明書として指定した最初の証明書を使用します。 ALBは、証明書の有効期限が切れるか、要件を満たさなくなるまで、デフォルトの証明書を使用してリクエストを暗号化します。 この場合、ALBは他の証明書を使用して要求を暗号化します。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
...
listeners:
- caEnabled: false
certificates:
- CertificateId: 756****-cn-hangzhou # The certificate ID.
IsDefault: true
port: 443
protocol: HTTPS
...
カスタムTLSセキュリティポリシーの設定
カスタム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 # The security policy ID.
...
リスナーの接続タイムアウト期間の設定
リスナーの接続タイムアウト時間を設定する場合は、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、AlbConfigを変更します。次に、requestTimeout
パラメーターを設定します。
クライアントがサーバーにリクエストを送信してからタイムアウト期間内にバックエンドサーバーが応答しない場合、ALBはクライアントにHTTP 504エラーコードを返します。
requestTimeoutの有効な値: 1〜180。 単位は秒です。
requestTimeoutのデフォルト値: 60。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
requestTimeout: 60 # The connection timeout period for the listener. Valid values: 1 to 180. If you leave the parameter empty, the default value is used.
...
データ圧縮の設定
データ圧縮により、ファイルのサイズを縮小して、伝送効率とネットワークパフォーマンスを向上させることができます。 データ圧縮を設定する場合は、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をサポートしています。
次のコードブロックは、データ圧縮を無効にするサンプルAlbConfig設定を提供します。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
gzipEnabled: false # A value of true enables data compression for specific types of files. A value of false disables data compression.
...
クライアントIPアドレスの保存
クライアントのIPアドレスを保持するには、kubectl edit albconfig <Albconfig_Name>
コマンドを実行してAlbConfigを変更します。次に、X-Forwarded-For
パラメーターを設定して、クライアントIPの保存を有効にします。
このパラメーターは、HTTPリスナーとHTTPSリスナーで使用できます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true # This parameter cannot be set to false.
...
ALBインスタンスで使用されるリスニングプロトコルの取得
ALBインスタンスで使用されるリスニングプロトコルを取得する場合は、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、ALBインスタンスの設定に使用されるAlbConfigを変更します。 次に、X-Forwarded-For
パラメーターを設定して、ALBインスタンスで使用されるリスニングプロトコルを取得します。
このパラメーターは、HTTPリスナーとHTTPSリスナーで使用できます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForProtoEnabled: true # A value of true retrieves the listening protocol used by the ALB instance. A value of true does not retrieve the listening protocol used by the ALB instance.
...
ALBインスタンスのIDの取得
ALBインスタンスのIDを取得する場合は、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、ALBインスタンスの設定に使用するAlbConfigを変更します。 次に、XForwardedForSLBIdEnabled
パラメーターを設定して、ALBインスタンスのIDを取得します。
このパラメーターは、HTTPリスナーとHTTPSリスナーで使用できます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBIdEnabled: true # A value of true retrieves the ID of the ALB instance. A value of true does not retrieve the ID of the ALB instance.
...
ALBインスタンスのリスニングポートの取得
ALBインスタンスのリスニングポートを取得する場合は、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、ALBインスタンスの設定に使用するAlbConfigを変更します。 次に、XForwardedForSLBPortEnabled
パラメーターを設定して、ALBインスタンスのリスニングポートを取得します。
このパラメーターは、HTTPリスナーとHTTPSリスナーで使用できます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBPortEnabled: true # A value of true retrieves the listening ports of the ALB instance. A value of false does not retrieve the listening ports of the ALB instance.
...
信頼できるプロキシIPアドレスの指定
ALBインスタンスに信頼できるプロキシIPアドレスを指定する場合は、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、ALBインスタンスの設定に使用するAlbConfigを変更します。 ALBインスタンスがX-Forwarded-For
ヘッダーからクライアントIPアドレスを取得できるように、XForwardedForClientSourceIpsEnabled
パラメーターを設定します。 次に、XForwardedForClientSourceIpsTrusted
パラメーターを設定して、信頼できるプロキシIPアドレスのリストを指定します。 このようにして、ALBインスタンスは、X-Forwarded-For
ヘッダー内のIPアドレスを右端の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 # A value of true allows the ALB instance to retrieve client IP addresses from the X-Forwarded-For header. If you set the value to true, you must configure the XForwardedForClientSourceIpsTrusted parameter in a valid format. A value of false forbids the ALB instance from retrieving client IP addresses from the X-Forwarded-For header.
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16 # Enter a valid IP address or CIDR block. This parameter takes effect only when XForwardedForClientSourceIpsEnabled is set to true.
...
ネットワークACLの設定
ALBインスタンスのリスナーのネットワークアクセス制御リスト (ACL) を設定する場合は、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、ALBインスタンスの設定に使用するAlbConfigを変更します。 次に、aclConfig
パラメーターを設定してネットワークACLを有効にします。 これにより、クライアント要求に対して詳細なアクセス制御を実装できます。 指定したIPアドレスまたはCIDRブロックからのアクセスを許可または拒否するようにネットワークACLを設定できます。 詳細については、「アクセス制御を有効にするACLの設定」をご参照ください。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
aclConfig: # Enable network ACLs for the listener.
aclEntries:
- 127.0.0.1/32 # The CIDR block that you want to add to the ACL rule for access control.
aclType: White # The type of network ACL. Valid values: Black (blacklist) and White (whitelist).
...
リスナーの削除
ALBインスタンスには複数のリスナーがある場合があります。 ALBインスタンスのリスナーを削除するには、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、ALBインスタンスの設定に使用するAlbConfigを変更します。 次に、albconfig.spec.listeners
パラメーターからリスナーを削除します。
リスナーを削除する前に、リスナーからすべてのIngressの関連付けを解除する必要があります。 そうしないと、リスナーの削除に失敗し、エラーが表示されます。
# Before deletion.
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Delete listening port 8002.
protocol: HTTP
# After deletion.
listeners:
- port: 8001
protocol: HTTP