AlbConfig は、ALB イングレスコントローラーが Application Load Balancer (ALB) インスタンスおよびリスナーを管理するために使用するカスタムリソース定義 (CRD) です。各 AlbConfig は、1 つの ALB インスタンスにのみ対応します。複数の ALB インスタンスを実行するには、複数の AlbConfig を作成します。
本トピックでは、AlbConfig の作成、更新、削除、リスナーの設定、Ingress リソースへの ALB インスタンスの関連付け、およびアクセスログの収集有効化について説明します。
前提条件
開始する前に、以下の点を確認してください。
ALB イングレスコントローラーは、お客様のクラスターにインストールされています。詳細については、「ALB イングレスコントローラーの管理」をご参照ください。
少なくとも 2 つの異なるゾーンの vSwitch を、ACK クラスターと同じ VPC 内に作成する必要があります。これらのゾーンは、ALB でサポートされている必要があります。詳細については、「vSwitch の作成と管理」をご参照ください。
ACK 専用クラスターのサービスで ALB イングレスを使用するには、まず、ALB Ingress Controller に必要な権限をクラスターに付与します。 詳細については、「ACK 専用クラスターに ALB Ingress controller へのアクセス権を付与する」をご参照ください。
注意事項
AlbConfig リソースを直接編集するには、
kubectl editを使用します。必要に応じてkubectl applyを使用する場合は、適用前にkubectl diffを実行して変更内容をプレビューしてください。クラスターで Flannel ネットワークプラグインを使用している場合、ALB イングレスのバックエンド Services は NodePort 型および LoadBalancer 型のみをサポートします。
AlbConfig の作成
ALB イングレスコントローラーをインストールし、新規作成 または 既存のものを使用 を ALB クラウドネイティブゲートウェイインスタンスのソース に対して選択すると、コントローラーは自動的に alb という名前の AlbConfig および alb という名前の IngressClass を作成します。
以下の内容で
alb.yamlというファイルを作成します。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: name: alb addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # ゾーン A の vSwitch allocationId: eip-asdfas**** # (任意)EIP ID - vSwitchId: vsw-uf6nun9tql5t8nh15**** # ゾーン B の vSwitch allocationId: eip-dpfmss**** # (任意)EIP ID listeners: - port: 80 protocol: HTTP以下のコマンドを実行して AlbConfig を作成します。予想される出力:
kubectl apply -f alb.yamlalbconfig.alibabacloud.com/alb createdAlbConfig が正しく作成されたことを確認します。予想される出力:
kubectl get AlbConfigNAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncsslb.com 28m
PORT&PROTOCOL列およびCERTID列は、HTTPS リスナーを作成して証明書を設定するまで空欄のままになります。
AlbConfig のパラメーター
パラメーター | 説明 | 不変 |
| ALB インスタンスの名前です。 | いいえ |
| ネットワークタイプです。 | はい |
| vSwitch とゾーンのマッピングです。クラスターと同じ VPC 内で、異なるゾーンに少なくとも 2 つの vSwitch を指定します。シングルゾーンリージョンの場合は、1 つの vSwitch で十分です。 | はい |
| vSwitch ID。vSwitch は、ALB がサポートするゾーン に存在している必要があります。 | はい |
| ALB インスタンスに関連付ける EIP(Elastic IP Address)の ID です。省略した場合、基本的なセキュリティ保護を備えた従量課金の BGP(マルチライン)EIP が自動的に作成されます。詳細については、「ALB の課金概要」をご参照ください。Internet Shared Bandwidth インスタンスに追加されていないトラフィック課金の EIP のみがサポートされています。同じ ALB インスタンスに対して複数のゾーンにまたがる EIP は、同じタイプである必要があります。 | はい |
| IP 割り当てモードです。 | はい |
| IP バージョンです。 | はい |
| ALB エディションです。デフォルト値: | いいえ |
| 課金方法です。デフォルト値: | はい |
| 削除保護の有効化設定です。デフォルト値: | はい |
不変 とマークされたパラメーターは、ALB インスタンスの初回作成時のみ適用されます。その後の変更は無視されます。
デフォルトの AlbConfig 構成
デフォルトの AlbConfig を使用して ALB イングレスコントローラーをインストールすると、以下の設定が適用されます(vSwitchId はユーザーが指定する必要があります)。
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.aliyuncsslb.com
id: alb-s2em8fr9debkg5****既存 ALB インスタンスの再利用
ALB コンソールで作成された ALB インスタンスを再利用するには、AlbConfig でその ID を指定します。標準インスタンスまたは WAF が有効なインスタンスのみが再利用できます。Basic インスタンスはサポートされていません。ALB インスタンスは、1 つのクラスターでのみ再利用できます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: reuse-alb
spec:
config:
id: **** # ALB インスタンス ID(Standard または WAF 対応)
forceOverride: false
listenerForceOverride: false上書き動作
パラメーター | 説明 |
| ALB インスタンス ID です。空または未指定の場合、インスタンスは再利用されず、 |
|
|
|
|
再利用する ALB インスタンス上のリスナーを手動で名前変更しないでください。AlbConfig によって作成または更新されたリスナーは、ingress-auto-listener-{port} という命名規則に従います。名前を変更すると、リスナーが管理対象外になる可能性があります。
Ingress リソースへの AlbConfig の関連付け
ALB イングレスは、Kubernetes IngressClass を使用して AlbConfig を Ingress リソースにリンクします。
ステップ 1:IngressClass の作成
以下の内容で ingress_class.yaml というファイルを作成します。
Kubernetes 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 # 関連付ける AlbConfig の名前Kubernetes 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以下のコマンドを実行して IngressClass を作成します。
kubectl apply -f ingress_class.yaml予想される出力:
ingressclass.networking.k8s.io/alb createdステップ 2:IngressClass を参照する Ingress の作成
以下の内容で ingress.yaml というファイルを作成します。ingressClassName フィールドにより、この Ingress が IngressClass を介して AlbConfig と関連付けられます。
Kubernetes 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: 80Kubernetes 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以下のコマンドを実行して Ingress を作成します。
kubectl apply -f ingress.yaml予想される出力:
ingress.networking.k8s.io/cafe-ingress created複数 ALB インスタンスの使用
複数の ALB インスタンスを経由してトラフィックをルーティングするには、各 ALB インスタンスごとに個別の AlbConfig、IngressClass、および Ingress リソースを作成します。ingressClassName の値をそれぞれ別々に指定することで、各 Ingress を対応する ALB インスタンスに関連付けます。
2 番目の AlbConfig を作成します。
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新しい AlbConfig を参照する 2 番目の IngressClass を作成します。
Kubernetes 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-2Kubernetes v1.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-2kubectl apply -f ingress_class2.yaml2 番目の IngressClass を使用する Ingress を作成します。
Kubernetes 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: 80Kubernetes v1.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: 80kubectl apply -f ingress2.yaml
ネットワーク設定の構成
IPv6 デュアルスタックの有効化
IPv4 および IPv6 の両方を有効にするには、addressIpVersion を DualStack に設定します。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
addressIpVersion: DualStack
...addressIpVersion パラメーターは、AlbConfig の初回作成時のみ適用されます。作成後の変更は無視されます。
インターネット共有帯域幅インスタンスの関連付け
ALB インスタンス間で帯域幅を共有するには、bandWidthPackageId を billingConfig セクションで指定します。この設定は、インターネット向け ALB インスタンス(addressType: Internet)にのみ適用されます。
Internet Shared Bandwidth の詳細については、「Internet Shared Bandwidth インスタンスを作成および管理する」をご参照ください。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
name: alb
addressType: Internet
edition: Standard
zoneMappings:
- vSwitchId: vsw-2vcqeyvwsnd***
- vSwitchId: vsw-2vcbhjlqu7y***
billingConfig:
bandWidthPackageId: cbwp-2vcjucp49otd8qolhm***リスナーの構成
リスナーは、ALB インスタンスがクライアントトラフィックを受け付けるポートおよびプロトコルを定義します。ALB インスタンスは、少なくとも 1 つのリスナーが構成されて初めてトラフィックを処理できます。リスナーの port、protocol、またはその他のプロパティを変更すると、元のリスナーが削除され、新しいリスナーが作成されます。
ALB は、HTTP、HTTPS、QUIC の 3 つのアプリケーション層プロトコルをサポートしています。
異なるプロトコルの複数のリスナーを同時に使用するには、Ingress リソースにアノテーションを追加します。詳細については、「カスタムリスニングポートの設定」をご参照ください。
HTTP リスナー
listeners:
- port: 80
protocol: HTTPHTTP リスナーは WebSocket と自動互換です。追加の構成は不要です。
HTTPS リスナー
listeners:
- port: 443
protocol: HTTPSHTTPS リスナーには証明書が必要です。詳細については、「暗号化された通信のための HTTPS 証明書の設定」をご参照ください。
QUIC リスナー
listeners:
- port: 443
protocol: QUICQUIC リスナーを使用すると、クライアントが HTTP/3 を使用してサービスにアクセスできるようになります。詳細については、「QUIC リスナーを使用して HTTP/3 プロトコルをサポートする」をご参照ください。
証明書の指定
HTTPS リスナーに証明書をバインドするには、リスナー構成の certificates フィールドを設定します。最初の証明書がデフォルト証明書となります。
証明書が指定されていない場合、ALB の作成時にはリスナーは作成されません。代わりに、Ingress が関連付けられ、ドメイン名に基づいて証明書が自動検出された後にリスナーが作成されます。
詳細については、「暗号化通信用に HTTPS 証明書を設定する」をご参照ください。
ALB は最初の証明書をデフォルトとして扱います。他の証明書は、デフォルト証明書が有効期限切れになったり、利用中でなくなったりした場合にのみ使用されます。
listeners:
- caEnabled: false
certificates:
- CertificateId: 756****-cn-hangzhou
IsDefault: true
port: 443
protocol: HTTPSTLS セキュリティポリシーの指定
HTTPS リスナーの場合、securityPolicyId フィールドを使用して TLS セキュリティポリシーを指定します。カスタムポリシーおよびシステムデフォルトポリシーの両方がサポートされています。詳細については、「TLS セキュリティポリシー」をご参照ください。
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1リクエストタイムアウトの設定
requestTimeout フィールドは、ALB インスタンスがバックエンドからの応答を待機する時間を(秒単位で)指定します。有効な値は 1~600 です。デフォルト値は 60 秒です。バックエンドがタイムアウト期間内に応答しない場合、ALB はクライアントに HTTP 504 エラーを返します。
listeners:
- port: 80
protocol: HTTP
requestTimeout: 40データ圧縮の有効化
応答の圧縮を有効にするには、gzipEnabled を true に設定します。クライアントが Brotli および Gzip の両方をサポートしている場合、ALB は圧縮率の高い Brotli を優先します。
以下の 2 つの条件が満たされた場合にのみ、圧縮が適用されます。
Content-Length応答ヘッダーの値が 1024 バイトを超える。Accept-Encodingリクエストヘッダーにサポートされている圧縮アルゴリズムが含まれている。
Brotli はすべてのファイルタイプを圧縮します。Gzip は以下のタイプを圧縮します:text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、application/atom+xml、application/xml、および application/json。
listeners:
- port: 80
protocol: HTTP
gzipEnabled: trueX-Forwarded-For ヘッダーの構成
バックエンドサービスに転送される HTTP リクエストヘッダーに、クライアントおよび ALB のメタデータを追加します。
フィールド | 説明 |
| クライアントの送信元 IP アドレスを |
| クライアントのポート番号を追加します。HTTP/HTTPS のみ対応。 |
| リスナーのプロトコルを追加します。 |
| ALB インスタンス ID を追加します。 |
| リスナーのポート番号を追加します。 |
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true
XForwardedForClientSrcPortEnabled: true
XForwardedForProtoEnabled: true
XForwardedForSLBIdEnabled: true
XForwardedForSLBPortEnabled: true信頼済みプロキシ IP アドレスの指定
既知のプロキシを経由するリクエストにおいて、XForwardedForClientSourceIpsEnabled および XForwardedForClientSourceIpsTrusted を使用して、X-Forwarded-For ヘッダーからクライアントの実際の IP アドレスを抽出します。ALB は、X-Forwarded-For の IP リストを逆順に走査し、信頼リストに含まれていない最初の IP を選択します。
たとえば、X-Forwarded-For が <client IP, proxy-1, proxy-2> の場合、クライアント IP を抽出するために XForwardedForClientSourceIpsTrusted を proxy-1;proxy-2 に設定します。
この設定は、HTTP および HTTPS リスナーのみに適用されます。
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSourceIpsEnabled: true
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16 # IP アドレスまたは CIDR をセミコロンで区切り、スペースを含めないでください。ACL によるアクセス制御の構成
アクセス制御リスト (ACL) を設定して、ALB リスナーにアクセスできるクライアントを制御します。詳細については、「ACL を設定してアクセスの制御を実装する」をご参照ください。
フィールド | 説明 |
|
|
| アクセス制御エントリの CIDR ブロック(例: |
listeners:
- port: 80
protocol: HTTP
aclConfig:
aclEntries:
- 127.0.0.1/32
aclType: WhiteSimple Log Service を使用したアクセスログの有効化
AlbConfig 内で logProject および logStore を指定することで、ALB アクセスログの収集を有効化します。
クラスターには関連付けられた Simple Log Service プロジェクトが必要です。プロジェクト名を確認するには、ACK コンソールに移動し、クラスター > ご利用のクラスター名 > クラスター情報 > 基本情報 の順に進み、Log Service プロジェクト フィールドを確認します。
logStoreの名前はalb_で始める必要があります。logStoreが存在しない場合、自動的に作成されます。
再利用する ALB インスタンスでアクセスログを有効化するには、forceOverrideをtrueに設定します。詳細については、「既存 ALB インスタンスの再利用」をご参照ください。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
accessLogConfig:
logProject: "k8s-log-xz92lvykqj1siwvif****"
logStore: "alb_****"
#...収集されたアクセスログを表示するには、基本情報 タブを開き、Log Service プロジェクト の横にあるリンクをクリックします。
AlbConfig の更新
既存の AlbConfig の構成を更新するには、kubectl edit を使用します。
AlbConfig の名前を確認します。予想される出力:
kubectl get AlbConfigNAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncsslb.com 28mAlbConfig を編集します。
<ALBCONFIG_NAME>をご利用の AlbConfig 名に置き換えます。たとえば、ALB インスタンス名を変更する場合:kubectl edit albconfig <ALBCONFIG_NAME>... spec: config: name: new_alb # 更新後の名前 ...
リスナー フィールドの更新方法
listeners フィールドは、置き換えによって更新される配列です。新しい構成を適用すると、システムは 3 つの状態を比較して結果を決定します。
# | 新規構成 | 既存構成 | 直近適用構成 | 結果 |
1 | はい | はい | — | 新規構成の値で更新されます。 |
2 | はい | なし | — | 新規リスナーとして作成されます。 |
3 | なし | — | はい | 既存構成から削除されます。デフォルト値にリセットされる可能性があります。 |
4 | なし | あり | なし | 既存構成から削除されます。 |
例:
以下の 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
# 直近適用構成
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # 削除対象
protocol: HTTP
- port: 8003
protocol: HTTP結果として得られるリスナー構成:
listeners:
- port: 8001 # 保持(ルール 1)
protocol: HTTP
- port: 8003 # 保持(ルール 1)
protocol: HTTP
- port: 8005 # 追加(ルール 2)
protocol: HTTPポート 8001 および 8003:保持(ルール 1)。
ポート 8005:追加(ルール 2)。
ポート 8002:削除(ルール 3 — 直近適用構成に存在)。
ポート 8004:削除(ルール 4 — 直近適用構成に存在せず、新規構成にも存在しない)。
AlbConfig の削除
AlbConfig を削除する前に、それに関連付けられたすべての Ingress リソースを削除してください。
ALB インスタンスを作成した AlbConfig の削除
AlbConfig を削除すると、関連付けられた ALB インスタンスも削除されます。
kubectl delete AlbConfig <AlbConfig_NAME><AlbConfig_NAME> を AlbConfig の名前に置き換えます。
再利用 ALB インスタンス用 AlbConfig の削除
AlbConfig を削除しても、ALB インスタンス自体は削除されません。これは、インスタンスが AlbConfig によって作成されていないためです。
(ALB イングレスコントローラー v2.10.0-aliyun.1 以前のみ) AlbConfig を編集し、
spec.listenersの下にあるすべてのエントリを削除します。ALB イングレスコントローラーのバージョンが v2.10.0-aliyun.1 より新しい場合は、このステップをスキップしてください。kubectl edit albconfig <AlbConfig_NAME>AlbConfig を削除します。
重要このコマンドを実行する前に、関連付けられたすべての Ingress リソースを削除してください。
kubectl delete AlbConfig <AlbConfig_NAME>
リスナーの削除
spec.listeners からリスナーのエントリを kubectl edit を使用して削除します。ALB インスタンスには複数のリスナーを設定できます。不要になったリスナーのみを削除してください。
リスナーを削除する前に、そのリスナーに関連付けられたすべての Ingress を削除してください。そうしないと、削除操作は失敗します。
# 削除前:2 つのリスナー
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # このリスナーを削除
protocol: HTTP
# 削除後:1 つのリスナー
listeners:
- port: 8001
protocol: HTTPよくある質問
エラー: alb: リスナーのポート番号は [1:65535] の範囲内にするか、リスナー設定でリッスンポートを明示的に設定する必要があります
このエラーは、YAML ファイル内で -(ダッシュ)が certificates の前に余分に配置され、ポートのない別個のリスナーが作成された場合に発生します。
誤った記述:
listeners:
- port: 80
protocol: HTTP
- port: 443
protocol: HTTPS
- certificates: # 余分な「-」により、ポートのない新規リスナーが作成される
- CertificateId: 756****-cn-hangzhou
IsDefault: true正しい記述:
listeners:
- port: 80
protocol: HTTP
- port: 443
protocol: HTTPS
certificates: # 「-」を削除 — certificates はポート 443 の HTTPS リスナーの一部
- CertificateId: 756****-cn-hangzhou
IsDefault: true- を certificates の前に削除し、証明書構成がポート 443 の HTTPS リスナーに属するようにしてください。