AlbConfig は、ALB Ingress Controller が Application Load Balancer (ALB) インスタンスとリスナーを構成するために使用するカスタムリソース定義 (CRD) です。このトピックでは、AlbConfig の作成、変更、更新方法、および Simple Log Service を有効にする方法について説明します。
前提条件
異なるゾーンに 2 つの vSwitch を作成していること。vSwitch はクラスターと同じ VPC 内にある必要があります。詳細については、「vSwitch の作成と管理」をご参照ください。
注意事項
リソース構成を直接変更および更新するには、
kubectl editコマンドを使用することを推奨します。kubectl applyコマンドを使用してリソースを変更および更新する必要がある場合は、kubectl applyコマンドを実行する前に、まずkubectl diffコマンドを実行して変更をプレビューしてください。変更が期待どおりであることを確認してから、kubectl applyコマンドを実行して変更を Kubernetes クラスターに適用します。以前のバージョンの Nginx Ingress Controller は、Ingress リソースの
spec.ingressClassNameフィールドを認識できません。クラスター内に Nginx Ingress と ALB Ingress の両方が存在する場合、以前のバージョンの Nginx Ingress Controller が ALB Ingress と競合したり、その構成を上書きしたりする可能性があります。この問題を回避するには、Nginx Ingress Controller を最新バージョンにアップグレードするか、アノテーションを使用して ALB Ingress の ingressClass を指定します。詳細については、「ALB Ingress の高度な機能」をご参照ください。
AlbConfig の作成
AlbConfig は単一の ALB インスタンスに対応しますが、複数の Ingress に関連付けることができ、1 対多の関係を作成します。複数の ALB インスタンスを使用するには、複数の AlbConfig を作成する必要があります。AlbConfig を作成するには、次のステップに従います。
alb-test.yaml という名前のファイルを作成し、次の内容をコピーして貼り付けます。このファイルは AlbConfig を作成するために使用されます。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test addressAllocatedMode: Dynamic # 値は Dynamic または Fixed です。このパラメーターは ALB インスタンスの IP モードを指定します。 addressType: Internet zoneMappings: # 高可用性を確保するために、異なるゾーンにある少なくとも 2 つの vSwitch を選択してください。 - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # 実際の vSwitch ID (ゾーン 1) に置き換えてください。 - vSwitchId: vsw-uf6nun9tql5t8nh15**** # 実際の vSwitch ID (ゾーン 2、最初のゾーンとは異なる必要があります) に置き換えてください。 listeners: - port: 80 protocol: HTTPパラメーター
説明
spec.config.name
(任意) ALB インスタンスの名前。
spec.config.addressType
(必須) ロードバランサーのアドレスタイプ。有効な値:
Internet (デフォルト): ロードバランサーはパブリック IP アドレスを持ちます。ドメイン名はパブリック IP アドレスに解決されます。ロードバランサーはインターネット経由でアクセスできます。
Intranet: ロードバランサーはプライベート IP アドレスのみを持ちます。ドメイン名はプライベート IP アドレスに解決されます。ロードバランサーは、それが存在する VPC 内でのみアクセスできます。
spec.config.zoneMappings
(必須) ALB Ingress の vSwitch ID。複数のゾーンがあるリージョンでは、異なるゾーンにある少なくとも 2 つの vSwitch の ID を指定します。単一ゾーンのリージョンでは、1 つの vSwitch ID を指定します。指定された vSwitch は、ALB をサポートするゾーンにあり、クラスターと同じ VPC 内にある必要があります。ALB をサポートするリージョンとゾーンの詳細については、「ALB をサポートするリージョンとゾーン」をご参照ください。
重要ALB インスタンスのアドレスタイプとゾーンは更新できません。AlbConfig の
addressTypeおよびzoneMappingsパラメーターは、AlbConfig を作成するときにのみ有効になります。これらは更新できません。spec.config.addressAllocatedMode(任意) AlbConfig では、addressAllocatedMode パラメーターを使用して ALB インスタンスの IP モードを指定できます。有効な値:
Dynamic: 動的 IP モード。
Fixed: 静的 IP モード。
クラスターに ALB Ingress Controller コンポーネントをインストールすると、デフォルトで AlbConfig が作成されます。vSwitchId を除き、他のパラメーターは以下に示すデフォルト構成を使用します。
次のコマンドを実行して AlbConfig を作成します。
kubectl apply -f alb-test.yaml期待される出力:
albconfig.alibabacloud.com/alb-demo created次のコマンドを実行して AlbConfig 名を取得します。
kubectl -n kube-system get AlbConfig期待される出力:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb-demo alb-****** alb-******.<regionID>.alb.aliyuncs.com 443/HTTPS 11055487-cn-<regionID> 2d
AlbConfig の更新
Kubernetes では、kubectl apply コマンドは上書き更新を実行し、kubectl edit コマンドは既存のオブジェクトに対して増分更新を実行します。AlbConfig から作成された Application Load Balancer (ALB) インスタンスの構成を変更するには、kubectl edit コマンドを使用して増分更新を実行します。AlbConfig を更新するには、次のステップに従います。
次のコマンドを実行して AlbConfig 名を表示します。
kubectl -n kube-system get AlbConfig期待される出力:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb-demo alb-****** alb-******.<regionID>.alb.aliyuncs.com 443/HTTPS 11055487-cn-<regionID> 2d次のコマンドを実行して AlbConfig を更新します。
重要リソース構成を直接更新するには、
kubectl editコマンドを使用することを推奨します。kubectl applyコマンドを使用してリソースを更新する必要がある場合は、まずkubectl diffコマンドを実行して変更をプレビューしてください。変更が期待どおりであることを確認します。次に、kubectl applyコマンドを使用して変更を Kubernetes クラスターに適用します。kubectl applyコマンドを使用して AlbConfig を上書きする場合、AlbConfig YAML ファイルにlisteners構成が含まれていなければ、既存のリスナーは影響を受けません。この構成が存在する場合、リスナーは新しい構成に基づいて調整されます。したがって、ポート 80 および 443 の共通リスナーなど、すべての必要なリスナーを指定する必要があります。
kubectl -n kube-system edit AlbConfig alb-demoAlbConfig 構成ファイルで、必要に応じて内容を更新します。たとえば、AlbConfig の名前を
testに変更します。... spec: config: name: test # 更新後の名前を入力します。 ...
IngressClass を使用して AlbConfig を Ingress に関連付ける
標準の Kubernetes IngressClass リソースを使用して、AlbConfig を Ingress に関連付けることができます。まず、IngressClass を作成し、それを使用して AlbConfig を関連付けます。
alb.yaml という名前のファイルを作成し、次の内容をコピーして IngressClass を作成します。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-demo次のコマンドを実行して IngressClass を作成します。
kubectl apply -f alb.yaml期待される出力:
ingressclass.networking.k8s.io/alb createdingress.yaml という名前のファイルを作成し、次の内容をコピーします。
ingressClassNameパラメーターは、AlbConfig を alb という名前の IngressClass に関連付けるために使用されます。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cafe-ingress spec: ingressClassName: alb 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次のコマンドを実行して Ingress を作成します。
kubectl apply -f ingress.yaml期待される出力:
ingress.networking.k8s.io/cafe-ingress created
これらのステップを完了すると、AlbConfig は IngressClass によって Ingress に関連付けられます。
ALB インスタンスの名前の変更
次のコマンドを実行して ALB インスタンス名を変更します。
kubectl -n kube-system edit AlbConfig alb-demo構成ファイルで、config.name の値を変更します。ファイルを保存すると、新しい名前が自動的に有効になります。
...
spec:
config:
name: test # 変更後の名前を入力します。
...IPv6 アドレスの使用
Application Load Balancer (ALB) インスタンスを作成するときに、AlbConfig で addressIpVersion フィールドを DualStack に設定することで IPv6 サポートを有効にできます。
addressIpVersion フィールドはインスタンス作成時に設定され、後で変更することはできません。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
addressIpVersion: DualStack
...TLS セキュリティポリシーの指定
AlbConfig で HTTPS リスナーを構成するときに、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
#...Simple Log Service でのアクセスログの有効化
ALB Ingress がアクセスログを収集できるようにするには、AlbConfig で logProject と logStore を指定します。
logProjectは自動的に作成できないため、手動で作成する必要があります。logProjectの作成方法の詳細については、「プロジェクトの管理」をご参照ください。logStoreの名前はalb_で始まる必要があります。指定したlogStoreが存在しない場合は、自動的に作成されます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
accessLogConfig:
logProject: "k8s-log-xz92lvykqj1siwvif****"
logStore: "alb_****"
#...構成を保存した後、Simple Log Service コンソールに移動し、指定した LogStore をクリックして収集されたアクセスログを表示できます。
既存の ALB インスタンスの再利用
既存の ALB インスタンスを再利用する場合は、AlbConfig の作成時に ALB インスタンス ID を指定する必要があります。インスタンスは、Application Load Balancer (ALB) コンソールで作成された Standard Edition または WAF-enabled Edition のインスタンスである必要があります。Basic Edition の ALB インスタンスは再利用できません。ALB インスタンスは 1 つのクラスターでのみ使用できます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: reuse-alb
spec:
config:
id: **** # ALB コンソールで作成された Standard Edition または WAF-enabled Edition の ALB インスタンスの ID。
forceOverride: false
listenerForceOverride: false次の表にパラメーターを説明します。
パラメーター | 説明 |
id |
重要 再利用モードでは、リスナー名を変更しないでください。これにより、リスナーが ACS によって誤って管理されたり、管理されなくなったりするのを防ぎます。AlbConfig によって作成または更新されたリスナーは ACS によって管理され、その名前はデフォルトで |
forceOverride | 再利用モードで ALB インスタンスのプロパティを強制的に上書きするかどうかを指定します。
|
listenerForceOverride | 再利用モードでリスナーのプロパティを強制的に上書きするかどうかを指定します。
|
リスナーの作成
再利用シナリオでは、AlbConfig を変更することで、リスナーを追加したり、既存のリスナーの設定を編集したりできます。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 # protocol の有効な値は HTTP、HTTPS、QUIC です。
...複数の ALB インスタンスの作成と使用
複数の ALB インスタンスを使用するには、spec.ingressClassName パラメーターを使用して Ingress で異なる IngressClass を指定します。
alb-demo2.yaml という名前のファイルを作成し、次の内容をコピーして AlbConfig を作成します。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: demo spec: config: name: alb-demo2 # ALB インスタンスの名前。 addressType: Internet # ロードバランサーはパブリック IP アドレスを持ちます。 zoneMappings: # 高可用性を確保するために、異なるゾーンにある少なくとも 2 つの vSwitch を選択してください。 - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # 実際の vSwitch ID (ゾーン 1) に置き換えてください。 - vSwitchId: vsw-uf6nun9tql5t8nh15**** # 実際の vSwitch ID (ゾーン 2、最初のゾーンとは異なる必要があります) に置き換えてください。次のコマンドを実行して AlbConfig を作成します。
kubectl apply -f alb-demo2.yaml期待される出力:
AlbConfig.alibabacloud.com/demo createdalb.yaml という名前のファイルを作成し、次の内容をコピーして IngressClass を作成します。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb-demo2 spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: demo次のコマンドを実行して IngressClass を作成します。
kubectl apply -f alb.yaml期待される出力:
ingressclass.networking.k8s.io/alb-demo2 createdingress.yamlという名前のファイルを作成し、次の内容をコピーします。このファイルはingressClassNameパラメーターを使用して異なる ALB インスタンスを指定します。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo namespace: default spec: ingressClassName: alb-demo2 rules: - host: "" http: paths: - backend: service: name: demo-service port: number: 80 path: /hello pathType: ImplementationSpecific
リスナー接続リクエストのタイムアウト期間の設定
AlbConfig では、リスナーの接続リクエストタイムアウトを設定できます。タイムアウトは 1 から 180 秒まで設定できます。バックエンドサーバーがタイムアウト期間内に応答しない場合、ロードバランサーは待機を停止し、クライアントに HTTP 504 エラーコードを返します。タイムアウトを指定しない場合、デフォルト値の 60 秒が使用されます。次の YAML ファイルは例です。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
requestTimeout: 60
...データ圧縮機能の使用
AlbConfig では、リスナーを指定してデータ圧縮を有効または無効にできます。gzipEnabled の有効な値は次のとおりです:
true: 特定のファイルタイプを圧縮します。
false: どのファイルタイプも圧縮しません。
Brotli はすべてのファイルタイプの圧縮をサポートします。Gzip は、text/xml、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
...クライアントの送信元 IP アドレスの取得
AlbConfig では、X-Forwarded-For ヘッダーフィールドを使用してクライアントの送信元 IP アドレスを取得できます。XForwardedForEnabled パラメーターの有効な値は次のとおりです:
true: クライアントの送信元 IP アドレスが取得されます。
false: クライアントの送信元 IP アドレスは取得されません。
このパラメーターは HTTP および HTTPS リスナーでのみサポートされます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
#...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true
#...インスタンスのリスナープロトコルの取得
AlbConfig では、XForwardedForProtoEnabled フィールドを使用してインスタンスのリスナープロトコルを取得できます。有効な値は次のとおりです:
true: インスタンスのリスナープロトコルを取得します。
false: インスタンスのリスナープロトコルを取得しません。
HTTP および HTTPS リスナーのみがこのパラメーターをサポートします。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForProtoEnabled: true
...ロードバランサーインスタンスの ID の取得
AlbConfig では、SLB-ID ヘッダーフィールドからロードバランサーインスタンスの ID を取得できます。XForwardedForSLBIdEnabled パラメーターの有効な値は次のとおりです:
true: ロードバランサーインスタンスの ID が取得されます。
false: ロードバランサーインスタンスの ID は取得されません。
HTTP および HTTPS リスナーのみがこのパラメーターをサポートします。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBIdEnabled: true
...インスタンスのリスナーポートの取得
AlbConfig では、XForwardedForSLBPortEnabled パラメーターを構成して、X-Forwarded-Port ヘッダーフィールドを使用してインスタンスのリスナーポートを取得するかどうかを指定できます。有効な値は次のとおりです:
true: インスタンスのリスナーポートが取得されます。
false: インスタンスのリスナーポートは取得されません。
HTTP および HTTPS リスナーのみがこのパラメーターをサポートします。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBPortEnabled: true
...ロードバランサーインスタンスのクライアントポートの取得
AlbConfig では、X-Forwarded-Client-srcport ヘッダーフィールドを使用してロードバランサーインスタンスのクライアントポートを取得できます。XForwardedForClientSrcPortEnabled の有効な値は次のとおりです:
true: ロードバランサーインスタンスのクライアントポートが取得されます。
false: ロードバランサーインスタンスのクライアントポートは取得されません。
HTTP および HTTPS リスナーのみがこのパラメーターをサポートします。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSrcPortEnabled: true
...ACL ベースのアクセス制御の構成
AlbConfig を使用して、ALB リスナーのアクセス制御を有効にできます。インバウンドトラフィックに対して許可または拒否ルールを設定することで、クライアントリクエストを正確に制御し、リクエストの転送を管理できます。アクセス制御リスト (ACL) の詳細については、「アクセス制御」をご参照ください。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
#...
listeners:
- port: 80
protocol: HTTPS
aclConfig:
aclEntries:
- 127.0.0.1/32
aclType: White
#...以下にいくつかのパラメーターを説明します:
aclType: ACL タイプを指定します。有効な値は、ブラックリストの場合は Black、ホワイトリストの場合は White です。
aclEntries: アクセス制御エントリの IP アドレスまたは CIDR ブロックを指定します。例: 127.0.0.1/32。
ALB インスタンスの削除
ALB インスタンスは AlbConfig に対応します。したがって、AlbConfig を削除することで ALB インスタンスを削除できます。AlbConfig を削除する前に、まずそれに関連付けられているすべての Ingress を削除する必要があります。
kubectl delete -n kube-system AlbConfig alb-demo削除したい AlbConfig の名前に alb-demo を置き換えてください。
再利用された ALB インスタンスの AlbConfig の削除
再利用された ALB インスタンスの AlbConfig を削除するには、次のステップに従います。
AlbConfig に関連付けられているすべての Ingress を削除します。
kubectl delete -n <NAMESPACE> ingress <INGRESS_NAME> # <INGRESS_NAME> と <NAMESPACE> を、削除する Ingress の名前と名前空間に置き換えてください。kubectl editコマンドを実行して AlbConfig を変更し、そのすべてのリスナーを削除します。これは、spec.listenersフィールドの下のすべてのエントリを削除することを意味します。重要このステップは、クラスターにインストールされている ALB Ingress Controller コンポーネントのバージョンが v2.10.0-aliyun.1 以前の場合にのみ実行してください。それ以外の場合は、このステップをスキップしてください。
AlbConfig を削除します。
kubectl -n kube-system delete AlbConfig alb-demo # alb-demo を削除したい AlbConfig の名前に置き換えてください。