AlbConfig の Listeners パラメーターを設定して、Application Load Balancer (ALB) インスタンスのリスナーを構成できます。このトピックでは、Listeners パラメーターと、AlbConfig を使用してリスナーを作成、変更、更新する方法について説明します。
前提条件
ACS クラスタが作成されていること。詳細については、ACS クラスタの作成を参照してください。
異なるゾーンにある 2 つの vSwitch が作成され、ACK クラスタと同じ仮想プライベートクラウド (VPC) にデプロイされていること。詳細については、vSwitch の作成と管理を参照してください。
ALB Ingress コントローラーが ACS クラスタにインストールされていること。詳細については、ALB Ingress コントローラーの管理を参照してください。
AlbConfig と IngressClass が作成されていること。詳細については、AlbConfig の作成とIngressClass の作成を参照してください。
kubectl クライアントがクラスタに接続されていること。詳細については、クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続するを参照してください。
Listeners パラメーターの説明
用語
オブジェクト構成ファイル: Kubernetes オブジェクトの構成を定義するファイル。
ライブオブジェクト構成ファイル: Kubernetes クラスタに適用されているオブジェクト構成ファイル。
last-applied-configuration: Kubernetes オブジェクトのアノテーション。このアノテーションは、オブジェクトの最新の構成の内容を記録します。オブジェクトの構成が更新されたときに、アノテーションはリアルタイムで更新されません。
Listeners パラメーターの更新方法
Listeners パラメーターは配列型です。ほとんどの場合、配列内のフィールドを置き換えることで Listeners パラメーターを更新できます。 Listeners パラメーターを更新すると、フィールドは指定した新しいフィールドに置き換えられます。次の表にルールを示します。
番号 | 条件 | 結果 | ||
リスナーがオブジェクト構成ファイルにある | リスナーがライブオブジェクト構成ファイルにある | リスナーが last-applied-configuration アノテーションにある | ||
1 | はい | はい | - (無関係) | リスナーはライブオブジェクト構成ファイルに保持されます。 |
2 | はい | いいえ | - (無関係) | リスナーはライブオブジェクト構成ファイルに追加されます。 |
3 | いいえ | - (無関係) | はい | リスナーはライブオブジェクト構成ファイルから削除されます。ただし、リスナーのフィールドはデフォルト設定にリセットされる場合があります。 |
4 | いいえ | はい | いいえ | リスナーはライブオブジェクト構成ファイルから削除されます。 |
例
次の例は、オブジェクト構成ファイル、ライブオブジェクト構成ファイル、および last-applied-configuration
アノテーションの内容を示しています。
オブジェクト構成ファイルの内容。
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
次のコードブロックは、更新後の Listeners パラメーターの構成を示しています。
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005
protocol: HTTP
次の表にパラメーターを示します。
ポート | ルール | 結果 |
8001 | ポート 8001 とポート 8003 はルール 1 に一致します。これは、次の条件が満たされていることを意味します。
| 保持 |
8003 | ||
8005 | ポート 8005 はルール 2 に一致します。これは、次の条件が満たされていることを意味します。
| 追加 |
8002 | ポート 8002 はルール 3 に一致します。これは、次の条件が満たされていることを意味します。
| 削除 |
8004 | ポート 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 # 有効な値: HTTP、HTTPS、および 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 # 証明書 ID。
IsDefault: true
port: 443
protocol: HTTPS
...
カスタム TLS セキュリティポリシーの構成
カスタム TLS セキュリティポリシーを構成する場合は、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して AlbConfig を変更します。次に、securityPolicyId
パラメーターを構成して、セキュリティポリシー ID を指定します。AlbConfig で HTTPS リスナーを構成するときに、TLS セキュリティポリシーを指定できます。カスタム 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
パラメーターを構成します。これにより、クライアントが長時間レスポンスを待機することを防ぎます。
クライアントがサーバーにリクエストを送信した後、バックエンドサーバーがタイムアウト期間内に応答しない場合、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 # リスナーの接続タイムアウト期間。有効な値: 1 ~ 180。パラメーターを空のままにすると、デフォルト値が使用されます。
...
データ圧縮の構成
データ圧縮は、ファイルサイズを縮小して、伝送効率とネットワークパフォーマンスを向上させることができます。データ圧縮を構成する場合は、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 # true に設定すると、特定のタイプのファイルのデータ圧縮が有効になります。false に設定すると、データ圧縮が無効になります。
...
クライアント 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 # true に設定すると、クライアント IP の保持が有効になります。false に設定すると、クライアント IP の保持が無効になります。
...
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 # true に設定すると、ALB インスタンスで使用されるリスニングプロトコルが取得されます。false に設定すると、ALB インスタンスで使用されるリスニングプロトコルは取得されません。
...
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 # true に設定すると、ALB インスタンスの ID が取得されます。false に設定すると、ALB インスタンスの ID は取得されません。
...
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 # true に設定すると、ALB インスタンスのリスニングポートが取得されます。false に設定すると、ALB インスタンスのリスニングポートは取得されません。
...
信頼できるプロキシ IP アドレスの指定
ALB インスタンスの信頼できるプロキシ IP アドレスを指定する場合は、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、ALB インスタンスの構成に使用する AlbConfig を変更します。XForwardedForClientSourceIpsEnabled
パラメーターを構成して、ALB インスタンスが X-Forwarded-For
ヘッダーからクライアント IP アドレスを取得できるようにします。次に、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 # true に設定すると、ALB インスタンスは X-Forwarded-For ヘッダーからクライアント IP アドレスを取得できます。値を true に設定する場合は、XForwardedForClientSourceIpsTrusted パラメーターを有効な形式で構成する必要があります。false に設定すると、ALB インスタンスは X-Forwarded-For ヘッダーからクライアント IP アドレスを取得できなくなります。
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16 # 有効な IP アドレスまたは CIDR ブロックを入力します。このパラメーターは、XForwardedForClientSourceIpsEnabled が true に設定されている場合にのみ有効になります。
...
ネットワーク ACL の構成
ALB インスタンスのリスナーのネットワークアクセス制御リスト (ACL) を構成する場合は、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、ALB インスタンスの構成に使用する AlbConfig を変更します。次に、aclConfig
パラメーターを構成して、ネットワーク ACL を有効にします。これにより、クライアントリクエストに対してきめ細かいアクセス制御を実装できます。ネットワーク ACL を構成して、指定した IP アドレスまたは CIDR ブロックからのアクセスを許可または拒否できます。詳細については、ACL を構成してアクセス制御を有効にするを参照してください。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTPS
aclConfig: # リスナーのネットワーク ACL を有効にします。
aclEntries:
- 127.0.0.1/32 # アクセス制御のために ACL ルールに追加する CIDR ブロック。
aclType: White # ネットワーク ACL のタイプ。有効な値: Black (ブラックリスト) と White (ホワイトリスト)。
...
リスナーの削除
ALB インスタンスには複数のリスナーが存在する場合があります。ALB インスタンスのリスナーを削除するには、kubectl edit albconfig <Albconfig_Name>
コマンドを実行して、ALB インスタンスの構成に使用する AlbConfig を変更します。次に、albconfig.spec.listeners
パラメーターからリスナーを削除します。
リスナーを削除する前に、すべての Ingress をリスナーから関連付けを解除する必要があります。そうしないと、リスナーを削除できず、システムはエラーをプロンプトします。
# 削除前。
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # リスニングポート 8002 を削除します。
protocol: HTTP
# 削除後。
listeners:
- port: 8001
protocol: HTTP