AlbConfig CRD を使用して ALB インスタンスおよびリスナーを作成・構成・再利用できます。IPv6、Simple Log Service (SLS) アクセスログ、TLS ポリシー、ネットワーク ACL に対応しています。
前提条件
-
クラスターに ALB イングレスコントローラー がインストールされています。
-
2 つのvSwitchが、お使いの ACK クラスターと同じ VPC 内の異なるゾーンに作成されています。
ACK 専用クラスターで ALB イングレスを使用するには、まずクラスターに必要な権限を付与してください。
注意事項
-
リソース構成を変更するには、
kubectl editを使用してください。kubectl applyを使用する場合は、適用前にkubectl diffを実行して変更内容をプレビューすることを推奨します。 -
ご利用のクラスターが Flannel ネットワークプラグインを使用している場合、ALB イングレスのバックエンドサービスは NodePort または LoadBalancer タイプである必要があります。
主なパラメーター一覧
よく使用される AlbConfig パラメーター:
|
パラメーター |
タイプ |
デフォルト |
作成時のみ |
説明 |
|
|
string |
— |
いいえ |
ALB インスタンスの名前 |
|
|
string |
|
いいえ |
ALB インスタンスの IP モードを設定します。有効値: |
|
|
string |
|
はい |
|
|
|
string |
— |
はい |
|
|
|
array |
— |
はい |
vSwitch ID(異なるゾーンに少なくとも 2 つ) |
|
|
string |
|
いいえ |
ALB インスタンスエディション |
|
|
string |
— |
いいえ |
再利用する既存の ALB インスタンスの ID |
|
|
boolean |
|
いいえ |
再利用する ALB インスタンスの属性を上書きするかどうか |
|
|
boolean |
|
いいえ |
再利用するインスタンスのリスナー属性を上書きするかどうか |
|
|
string |
— |
いいえ |
SLS ログプロジェクト |
|
|
string |
— |
いいえ |
SLS Logstore( |
|
|
string |
— |
いいえ |
インターネット共有帯域幅インスタンス ID |
|
|
integer |
— |
いいえ |
リスナーポート |
|
|
string |
— |
いいえ |
|
|
|
integer |
|
いいえ |
バックエンドの応答タイムアウト(秒単位、1~600) |
|
|
boolean |
|
いいえ |
Gzip/Brotli 圧縮を有効化 |
ALB インスタンスの構成
AlbConfig の作成
各 AlbConfig は 1 つの ALB インスタンスを構成します。複数の ALB インスタンスを使用するには、インスタンスごとに 1 つの AlbConfig を作成してください。
ALB Ingress Controller をインストールする際に、Create または Select Existing を Gateway Source として選択すると、コントローラーは自動的に alb という名前の AlbConfig と alb という名前の IngressClass を作成します。
-
以下の内容で
alb.yamlを作成します。パラメーター
説明
spec.config.nameALB インスタンスの名前。
spec.config.addressTypeInternet(デフォルト):パブリック IP。Intranet:VPC 内専用。作成時のみ設定可能。後から変更できません。spec.config.zoneMappingsクラスターと同じ VPC 内にある、異なる ALB がサポートするゾーン の vSwitch を少なくとも 2 つ必要です。作成時のみ。後から変更できません。 シングルゾーンリージョンでは、vSwitch を 1 つ使用できます。
spec.config.zoneMappings[].allocationId(オプション)ALB インスタンスに関連付ける EIP ID。省略した場合、従量課金の BGP(マルチ ISP)EIP が自動的に作成されます。インターネット共有帯域幅インスタンスに含まれていないトラフィック課金の従量課金 EIP のみサポートされています。異なるゾーンの EIP は同じタイプである必要があります。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: name: alb addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # ご利用の vSwitch ID に置き換えてください。 allocationId: eip-asdfas**** # ご利用の EIP ID に置き換えてください。省略した場合、EIP が自動的に割り当てられます。 - vSwitchId: vsw-uf6nun9tql5t8nh15**** allocationId: eip-dpfmss**** listeners: - port: 80 protocol: HTTPvSwitchIdを除くデフォルトの AlbConfig 設定:apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: accessLogConfig: logProject: "" logStore: "" addressAllocatedMode: Dynamic addressType: Internet billingConfig: internetBandwidth: 0 internetChargeType: "" payType: PostPay deletionProtectionEnabled: true edition: Standard forceOverride: false zoneMappings: - vSwitchId: #... - vSwitchId: #... status: loadBalancer: dnsname: alb-s2em8fr9debkg5****.cn-shenzhen.alb.aliyuncs.com id: alb-s2em8fr9debkg5**** -
構成を適用します。
kubectl apply -f alb.yaml期待される出力:
AlbConfig.alibabacloud.com/alb created -
AlbConfig を確認します。
PORT&PROTOCOLおよびCERTIDは、HTTPS リスナーおよび証明書を構成するまで空のままです。kubectl get AlbConfig期待される出力:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncs.com 28m
AlbConfig の更新
-
AlbConfig の一覧を表示します。
kubectl get AlbConfig -
AlbConfig を編集します。
kubectl edit albconfig <ALBCONFIG_NAME>たとえば、ALB インスタンスの名前を
new_albに変更するには、次のように記述します。spec: config: name: new_alb
AlbConfig の削除
AlbConfig を削除すると、関連付けられた ALB インスタンスも削除されます。
削除する前に、AlbConfig に関連付けられているすべての Ingress を削除してください。
kubectl delete AlbConfig <AlbConfig_NAME>
インターネット共有帯域幅インスタンスのバインド
ALB インスタンスにインターネット共有帯域幅インスタンスをバインドするには、billingConfig.bandWidthPackageId を設定します。
これはインターネット向け ALB インスタンスにのみ適用されます。Internet Shared Bandwidth インスタンスを購入するには、「Internet Shared Bandwidth を作成する」をご参照ください。
spec:
config:
name: alb
addressType: Internet
edition: Standard
zoneMappings:
- vSwitchId: vsw-2vcqeyvwsnd***
- vSwitchId: vsw-2vcbhjlqu7y***
billingConfig:
bandWidthPackageId: cbwp-2vcjucp49otd8qolhm***
複数の ALB インスタンスの作成と使用
複数の ALB インスタンスを使用するには、各インスタンスに対して個別の AlbConfig および IngressClass を作成してください。
-
alb-2.yamlを作成します。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-2 spec: config: name: alb-2 addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** - vSwitchId: vsw-uf6nun9tql5t8nh15**** -
適用します。
kubectl apply -f alb-2.yaml -
ingress_class2.yamlを作成します。v1.19 以降のクラスター
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb-2 spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-2v1.19 より前のクラスター
apiVersion: networking.k8s.io/v1beta1 kind: IngressClass metadata: name: alb-2 spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-2 -
適用します。
kubectl apply -f ingress_class2.yaml -
ingress2.yamlを作成します。ingressClassNameに、対象の ALB インスタンス用の IngressClass を設定します。v1.19 以降のクラスター
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cafe-ingress2 spec: ingressClassName: alb-2 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: 80v1.19 より前のクラスター
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: cafe-ingress2 spec: ingressClassName: alb-2 rules: - http: paths: - path: /tea backend: serviceName: tea-svc servicePort: 80 - path: /coffee backend: serviceName: coffee-svc servicePort: 80 -
適用します。
kubectl apply -f ingress2.yaml
IngressClass を使用した AlbConfig と Ingress の関連付け
IngressClass を使用して、AlbConfig を ALB イングレスにバインドします。
IngressClass の作成
ingress_class.yaml を作成します。
v1.19 以降のクラスター
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: alb
spec:
controller: ingress.k8s.alibabacloud/alb
parameters:
apiGroup: alibabacloud.com
kind: AlbConfig
name: alb
v1.19 より前のクラスター
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: alb
spec:
controller: ingress.k8s.alibabacloud/alb
parameters:
apiGroup: alibabacloud.com
kind: AlbConfig
name: alb
適用します。
kubectl apply -f ingress_class.yaml
期待される出力:
ingressclass.networking.k8s.io/alb created
IngressClass を参照する Ingress の作成
ingress.yaml を作成し、ingressClassName に IngressClass 名を設定します。
v1.19 以降のクラスター
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
v1.19 より前のクラスター
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /tea
backend:
serviceName: tea-svc
servicePort: 80
- path: /coffee
backend:
serviceName: coffee-svc
servicePort: 80
適用します。
kubectl apply -f ingress.yaml
期待される出力:
ingress.networking.k8s.io/cafe-ingress created
再利用済み ALB インスタンスの管理
既存の ALB インスタンスの再利用
spec.config.id を設定して、既存の ALB インスタンスを再利用します。ALB コンソールの標準インスタンスおよび WAF 有効化インスタンスがサポートされています。ベーシックインスタンスは再利用できません。1 つの ALB インスタンスは 1 つのクラスターでのみ再利用可能です。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: reuse-alb
spec:
config:
id: ****
forceOverride: false
listenerForceOverride: false
id、forceOverride、および listenerForceOverride の相互作用:
|
|
|
|
結果 |
|
未設定 |
— |
— |
ALB インスタンスは再利用されません。 |
|
設定 |
|
— |
ALB インスタンスおよびリスナーの属性が上書きされます。 |
|
設定済み |
|
|
listenerForceOverride が false の場合、ALB Ingress Controller は AlbConfig によって自動的に作成されたリスナー(ingress-auto-listener-{port} という名前)のみを管理します。手動で作成されたリスナーは AlbConfig によって管理されません。 |
|
設定 |
|
|
ALB インスタンスの属性は上書きされません。コントローラーはすべてのリスナーを管理します。リスナーの存在および構成は AlbConfig によって決定されます。 |
再利用済み ALB インスタンス上のリスナーの名前を変更しないでください。ingress-auto-listener-{port} という名前のリスナーは ACK によって管理されます。その他の名前のリスナーは ALB コンソールで管理されます。
再利用済み ALB インスタンスの AlbConfig の削除
再利用済み ALB インスタンスの AlbConfig を削除しても、ALB インスタンス自体は削除されません。
-
ALB Ingress Controller 2.10.0-aliyun.1 以前の場合:
kubectl editを実行してspec.listenersのすべてのエントリを削除し、AlbConfig 経由で構成されたリスナーを削除します。2.10.0-aliyun.1 より後のバージョンでは、このステップをスキップしてください。 -
AlbConfig に関連付けられているすべての Ingress を削除した後、AlbConfig を削除します。
kubectl delete AlbConfig <AlbConfig_NAME>
高度な構成
SLS を有効にしてアクセスログを収集
spec.config.accessLogConfig 内で logProject および logStore を設定します。
spec:
config:
accessLogConfig:
logProject: "k8s-log-xz92lvykqj1siwvif****"
logStore: "alb_****"
logStoreの値はalb_で始まる必要があります。指定された Logstore が存在しない場合、新しい Logstore が自動的に作成されます。
ログプロジェクトは、ACK コンソールのクラスターの クラスター情報 > 基本情報 で確認できます。
再利用済み ALB インスタンスで SLS を有効にするには、forceOverride: true を設定します。
有効化後、基本情報 の Log Service プロジェクト 横のプロジェクト名をクリックして、SLS でログを表示します。
IPv6 の有効化
addressIpVersion: DualStack を設定して IPv4/IPv6 デュアルスタックを有効化します。
addressIpVersion は作成時のみ有効で、後から変更できません。
spec:
config:
addressIpVersion: DualStack
リスナーの構成
リスナーの作成
spec.listeners 内で port および protocol を設定して、ALB がトラフィックを受信する方法を定義します。サポートされるプロトコル:HTTP、HTTPS、Quick UDP Internet Connections (QUIC)。
port または protocol を変更すると、既存のリスナーが削除され、新しいリスナーが作成されます。異なるプロトコルを使用して複数のリスナーを設定するには、Ingress に必要なアノテーションを追加します。
HTTP リスナー
spec:
listeners:
- port: 80
protocol: HTTP
HTTP はネイティブで WebSocket をサポートしています。追加の構成は不要です。
HTTPS リスナー
spec:
listeners:
- port: 443
protocol: HTTPS
HTTPS リスナーは証明書を必要とします。
QUIC リスナー
spec:
listeners:
- port: 443
protocol: QUIC
QUIC リスナーは、クライアントから HTTP/3 リクエストを受信します。
証明書の指定
HTTPS リスナーに証明書を追加するには、kubectl edit albconfig <Albconfig_Name> を実行して certificates フィールドを設定します。
spec:
listeners:
- caEnabled: false
certificates:
- CertificateId: 756****-cn-hangzhou
IsDefault: true
port: 443
protocol: HTTPS
デフォルト証明書が指定されていない場合、ALB Ingress は最初の証明書をデフォルトとして使用します。
証明書が指定されていない場合、リスナーの作成は Ingress が関連付けられ、ドメイン名に基づいて証明書が自動的に検出されるまで延期されます。
詳細については、「暗号化通信向けに HTTPS 証明書を設定する」をご参照ください。
リスナーの削除
kubectl edit albconfig <Albconfig_Name> を実行して、spec.listeners からリスナーのエントリを削除します。
削除する前に、リスナーからすべての Ingress の関連付けを解除してください。そうしないと、エラーにより削除が失敗します。
たとえば、ポート 8002 のリスナーを削除するには、次のように記述します。
# 削除前
listeners:
- port: 8001
protocol: HTTP
- port: 8002
protocol: HTTP
# 削除後
listeners:
- port: 8001
protocol: HTTP
リスナーの更新動作
listeners 配列は、新しい構成とライブ状態、および last-applied-configuration アノテーションを比較して調整されます。
|
新しい構成に存在 |
ライブ構成に存在 |
|
結果 |
|
はい |
はい |
— |
リスナーは保持されます。 |
|
はい |
なし |
— |
リスナーが追加されます。 |
|
なし |
— |
あり |
リスナーが削除されます。フィールドはデフォルト値にリセットされる可能性があります。 |
|
なし |
はい |
なし |
リスナーが削除されます。 |
例:
次の 3 つの状態があるとします。
# 新しい構成
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005 # 新規
protocol: HTTP
# ライブ構成
listeners:
- port: 8001
protocol: HTTP
- port: 8002
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8004
protocol: HTTP
# last-applied-configuration
listeners:
- port: 8001
protocol: HTTP
- port: 8002
protocol: HTTP
- port: 8003
protocol: HTTP
新しい構成を適用した後:
listeners:
- port: 8001 # 保持(新しい構成およびライブ構成に存在)
protocol: HTTP
- port: 8003 # 保持(新しい構成およびライブ構成に存在)
protocol: HTTP
- port: 8005 # 追加(新しい構成に存在、ライブ構成に存在せず)
protocol: HTTP
# ポート 8002:削除(新しい構成に存在せず、last-applied-configuration に存在)
# ポート 8004:削除(新しい構成に存在せず、ライブ構成に存在、last-applied-configuration に存在せず)
接続タイムアウト期間の設定
requestTimeout を設定して、ALB がクライアントに HTTP 504 を返す前にバックエンドの応答を待機する時間を制御します。有効範囲:1~600 秒。デフォルト:60 秒。
spec:
listeners:
- port: 80
protocol: HTTP
requestTimeout: 40
高度なリスナー構成
データ圧縮の構成
gzipEnabled: true を設定して圧縮を有効化します。すべてのファイルタイプで Brotli 圧縮がサポートされています。次のファイルタイプでは Gzip 圧縮もサポートされています:text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、application/atom+xml、application/xml、および application/json。
spec:
listeners:
- port: 80
protocol: HTTP
gzipEnabled: true
クライアント IP アドレスの保持
ALB は、リクエストをバックエンドに転送する前に、クライアント IP アドレスを X-Forwarded-For ヘッダーに追加します。
HTTP および HTTPS リスナーでのみ利用可能です。
spec:
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true # このパラメーターを false に設定することはできません。
クライアント接続メタデータの取得
xForwardedForConfig を使用して、クライアントおよびリスナーのメタデータをバックエンドに転送されるリクエストヘッダーに追加します。以下のすべてのフィールドは、HTTP および HTTPS リスナーで利用可能です。
|
フィールド |
に設定すると |
|
|
クライアントが ALB インスタンスに接続するために使用したポートを追加します。 |
|
|
ALB インスタンスが使用するリスナープロトコルを追加します。 |
|
|
ALB インスタンス ID を追加します。 |
|
|
ALB インスタンスのリッスンポートを追加します。 |
例 — 4 つのヘッダーすべてを追加:
spec:
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSrcPortEnabled: true
XForwardedForProtoEnabled: true
XForwardedForSLBIdEnabled: true
XForwardedForSLBPortEnabled: true
信頼できるプロキシチェーンからのクライアント IP アドレスの取得
リクエストが複数のプロキシを経由する場合、XForwardedForClientSourceIpsEnabled: true を設定して、X-Forwarded-For から実際のクライアント IP を抽出します。XForwardedForClientSourceIpsTrusted を使用して、信頼できるプロキシ IP または CIDR ブロックの一覧を指定します。ALB は X-Forwarded-For を右から左に走査し、最初に見つかった信頼できない IP をクライアント IP として扱います。
たとえば、X-Forwarded-For が <client IP, proxy-1, proxy-2> の場合、proxy-1 および proxy-2 を信頼リストに追加します。
HTTP および HTTPS リスナーでのみ利用可能です。
spec:
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSourceIpsEnabled: true
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16
カスタム TLS セキュリティポリシーの構成
デフォルトまたはカスタムのTLS セキュリティポリシーを適用するには、HTTPS リスナーでsecurityPolicyIdを設定します。
spec:
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1
信頼できるプロキシ IP アドレスの構成
「信頼されたプロキシ IP アドレスを指定する」をご参照ください。
ネットワーク ACL の構成
aclConfig を使用して、リスナーレベルで特定の IP アドレスまたは CIDR ブロックからのトラフィックを許可または拒否します。
spec:
listeners:
- port: 80
protocol: HTTP
aclConfig:
aclEntries:
- 127.0.0.1/32
aclType: White
|
パラメーター |
説明 |
|
|
|
|
|
ACL ルールに含める IP アドレスまたは CIDR ブロック。例: |
詳細については、「ACL の設定」をご参照ください。