AlbConfig は、ALB Ingress Controller が提供するカスタムリソース定義 (CRD) です。ALB Ingress Controller は、AlbConfig を使用して ALB インスタンスとリスナーを設定します。本トピックでは、AlbConfig の作成、変更、更新、および Log Service の有効化方法について説明します。
前提条件
-
ご利用のクラスターの VPC 内に、異なる可用性ゾーンに 2 つの vSwitch を作成済みである必要があります。vSwitch の作成と管理をご参照ください。
注意事項
リソース設定の変更や更新には、
kubectl editコマンドを直接使用することを推奨します。kubectl applyコマンドを使用してリソースを変更または更新する必要がある場合は、kubectl diffコマンドを実行して変更内容をプレビューしてから、kubectl applyコマンドを実行してください。変更内容が期待通りであることを確認した上で、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 に関連付けることができます。複数の ALB インスタンスを使用するには、複数の AlbConfig を作成します。以下の手順では、AlbConfig の作成方法について説明します。
alb-test.yaml という名前のファイルを作成し、以下の内容をコピーします。
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、ゾーン 1 とは異なる必要があります)。 listeners: - port: 80 protocol: HTTPパラメータ
説明
spec.config.name
(オプション) ALB インスタンスの名前。
spec.config.addressType
(必須) ロードバランサーのアドレスタイプ。有効な値:
Internet (デフォルト):ロードバランサーはパブリック IP アドレスを持ちます。DNS レコードはパブリック IP アドレスに解決され、ロードバランサーはインターネット経由でアクセス可能になります。
Intranet:ロードバランサーはプライベート IP アドレスのみを持ちます。DNS レコードはプライベート IP アドレスに解決され、ロードバランサーはデプロイされている VPC 内からのみアクセス可能になります。
spec.config.zoneMappings
(必須) ALB Ingress の vSwitch ID を指定します。マルチゾーンリージョンでは、少なくとも 2 つの 異なるゾーン の vSwitch ID を指定する必要があります。シングルゾーンリージョンでは、1 つの vSwitch ID で十分です。vSwitch は、クラスターと同じ VPC 内にあり、ALB をサポートするゾーンに存在する必要があります。ALB Ingress がサポートするリージョンとゾーンの詳細については、「ALB がサポートするリージョンとゾーン」をご参照ください。
重要ALB インスタンスのアドレスタイプまたはゾーンを更新することはできません。
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 を介してすでに作成された 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コマンドを実行してください。変更内容が期待通りであることを確認した上で、kubectl applyコマンドを使用して、Kubernetes クラスターに変更を適用してください。kubectl applyコマンドを使用して AlbConfig を上書きする場合、動作は YAML ファイルにlistenersフィールドが含まれているかどうかによって異なります。フィールドが含まれていない場合、既存のリスナーは影響を受けません。フィールドが含まれている場合、リスナーは現在の設定に一致するように調整されます。そのため、ポート 80 および 443 の一般的なリスナーなど、必要なリスナーの完全なリストを指定する必要があります。
kubectl -n kube-system edit AlbConfig alb-demoAlbConfig 設定ファイルで、内容を更新します。たとえば、AlbConfig の名前を
testに更新します。... spec: config: name: test # 更新後の名前を入力します。 ...
AlbConfig と Ingress の関連付け
標準の Kubernetes IngressClass を使用して、Ingress を AlbConfig に関連付けることができます。まず、AlbConfig を参照する IngressClass を作成し、次に Ingress リソースでその IngressClass を指定します。
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 アドレスの使用
ALB インスタンスの作成時に IPv6 サポートを有効にするには、AlbConfig で addressIpVersion フィールドを DualStack に設定します。
addressIpVersion フィールドは、インスタンスの作成時にのみ有効であり、後から変更することはできません。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
addressIpVersion: DualStack
...TLS セキュリティポリシーの指定
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
#...アクセスログの有効化
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_****"
#...設定を保存した後、Log Service コンソールに移動し、宛先 LogStore を選択して、収集されたアクセスログを表示できます。
既存の ALB インスタンスの再利用
既存の ALB インスタンスを再利用するには、AlbConfig の作成時に ALB インスタンス ID を指定します。既存の ALB インスタンスは、Application Load Balancer (ALB) コンソールで作成された Standard または WAF 対応エディションのインスタンスである必要があります。ベーシックエディションの ALB インスタンスは再利用できません。ALB インスタンスは、同じクラスター内の単一の AlbConfig によってのみ再利用できます。複数のクラスター間で 1 つの ALB インスタンスを再利用すること、または同じクラスター内の複数の AlbConfig で 1 つの ALB インスタンスを再利用することはサポートされていません。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: reuse-alb
spec:
config:
id: **** # ALB コンソールで作成された Standard または WAF 対応エディションの 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、ゾーン 1 とは異なる必要があります)。次のコマンドを実行して、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 秒です。
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 アドレスの取得
リスナーを設定して 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 の取得
リスナーを設定して 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
...リスナーポートの取得
リスナーを設定して X-Forwarded-Port ヘッダーを含めることができます。これにより、バックエンドサーバーはインスタンスのリスナーポートを取得できます。XForwardedForSLBPortEnabled の有効な値は次のとおりです。
true:インスタンスのリスナーポートを取得します。
false:インスタンスのリスナーポートを取得しません。
このパラメータは、HTTP および HTTPS リスナーに対してのみ設定できます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBPortEnabled: true
...クライアントポートの取得
リスナーを設定して 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 アドレス範囲を指定します (例:127.0.0.1/32)。
ALB インスタンスの削除
ALB インスタンスは AlbConfig に対応しています。したがって、AlbConfig を削除することで、対応する ALB インスタンスを削除できます。AlbConfig を削除する前に、それに関連付けられているすべての Ingress を削除する必要があります。
kubectl delete -n kube-system AlbConfig alb-demoalb-demo を、削除したい AlbConfig の名前に置き換えてください。
再利用されたインスタンスの 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 の名前に置き換えてください。