ALB マルチクラスターゲートウェイは ALB イングレス を拡張したもので、Distributed Cloud Container Platform for Kubernetes (ACK One) によって管理される複数のクラスターにまたがって機能します。単一の Application Load Balancer (ALB) インスタンスが統一されたエントリポイントとして機能し、関連付けられたすべてのクラスターにわたってバックエンドの Service にトラフィックを分散します。いくつかの相違点を除き、ほとんどの場合、ALB マルチクラスターゲートウェイは ALB イングレスのシングルクラスターモードと同様の方法で使用できます。
マルチクラスターゲートウェイを使用する理由
複数のクラスターで単一の ALB インスタンスを実行することで、シングルクラスターの ALB イングレスのデプロイメントにはない、以下の機能が提供されます。
障害隔離:トラフィックが複数のクラスターに分散されるため、単一のクラスターで障害が発生した場合、その影響はそのクラスター内に限定されます。
統一されたトラフィック管理:クラスターごとに個別の Ingress 構成を維持するのではなく、ルーティングルール、リスナー、負荷分散を 1 か所で集中管理します。
一貫性のあるイングレス:自動スケーリング、フルホスト型運用、O&M フリーの管理といった ALB の共通機能を、フリートインスタンス内のすべてのクラスターに適用します。
仕組み
このアーキテクチャは、コントロールプレーンとデータプレーンの責務を分離します。
コントロールプレーン — ALB Ingress コントローラー:API サーバーを監視して Ingress リソースの変更を検出し、ルーティングルールに基づいて ALB インスタンスの構成を更新します。コントローラーは ALB インスタンスを管理しますが、トラフィックの分散は行いません。
データプレーン — ALB インスタンス:コントローラーによって設定されたルールに基づき、着信トラフィックを受信し、関連付けられたすべてのクラスターのバックエンド Service に分散します。
以下のコンポーネントが連携して、トラフィックの定義とルーティングを行います。
AlbConfig:ALB Ingress コントローラーによって作成されるカスタムリソース定義 (CRD) で、ALB インスタンスの構成を定義します。各 AlbConfig は、正確に 1 つの ALB インスタンスにマッピングされます。マルチクラスターモードでは、AlbConfig の
alb.ingress.kubernetes.io/remote-clustersアノテーションで、ALB インスタンスがサービスを提供するクラスターを指定します。IngressClass:特定の Ingress リソースを処理する Ingress コントローラーを識別し、複数のコントローラーが同じクラスター内に共存できるようにします。
Ingress:外部トラフィックのルーティングルールとアクセスの制御ルールを定義します。ALB Ingress コントローラーは Ingress の変更をモニターし、それに応じて ALB インスタンスを更新します。
Service:Pod のグループに安定した仮想 IP アドレスとポートを提供します。ALB インスタンスは、個々の Pod の変更を意識することなく、トラフィックを Service にルーティングします。
制限事項
マルチクラスターモードは、ほとんどの ALB イングレスの機能をサポートしますが、1 つの例外があります。マルチクラスターモードでは、重み付けによるトラフィック分割とカナリアリリースを同時に使用することはできません。
| 特徴 | シングルクラスターモード | マルチクラスターモード |
|---|---|---|
| 重み付けによるトラフィック分割 + カナリアリリースの同時使用 | サポート済み | サポート対象外 |
サポートされているアノテーションの完全なリストについては、「ALB イングレスでサポートされているアノテーション」をご参照ください。
AlbConfig の設定
alb.ingress.kubernetes.io/remote-clusters アノテーションを指定した AlbConfig を作成し、クラスターを ALB インスタンスに関連付けます。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: ackone-gateway-demo
annotations:
# この ALB マルチクラスターゲートウェイに関連付けられているクラスター ID を指定します。
alb.ingress.kubernetes.io/remote-clusters: ${cluster1},${cluster2}
spec:
config:
name: one-alb-demo
addressType: Internet
addressAllocatedMode: Fixed
zoneMappings:
- vSwitchId: ${vsw-id1}
- vSwitchId: ${vsw-id2}
listeners:
- port: 8001
protocol: HTTP次のプレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 |
|---|---|
${cluster1},${cluster2} | フリートインスタンスに関連付けられているクラスター ID |
${vsw-id1}、 ${vsw-id2} | ALB インスタンスがデプロイされているゾーンの vSwitch ID |
次の表に、主要なパラメーターを示します。
| パラメーター | 必須 | 説明 |
|---|---|---|
metadata.name | はい | AlbConfig の名前。 |
metadata.annotations: alb.ingress.kubernetes.io/remote-clusters | はい | ALB マルチクラスターゲートウェイに追加するクラスター ID のカンマ区切りリスト。クラスターは、フリートインスタンスに既に関連付けられている必要があります。 |
spec.config.name | いいえ | ALB インスタンスの名前。 |
spec.config.addressType | いいえ | ALB インスタンスのネットワークタイプ。有効な値は次のとおりです。Internet (デフォルト):ALB インスタンスはインターネット経由でアクセス可能で、関連付けられた Elastic IP アドレス (EIP) が必要です。Intranet:ALB インスタンスは VPC 内でのみアクセス可能です。Internet従量課金 を使用する場合、関連付けられた EIP のインスタンス料金と、帯域幅またはデータ転送料金が課金されます。料金の詳細については、「」をご参照ください。 |
spec.config.zoneMappings | はい | ALB インスタンスがデプロイされているゾーンの vSwitch ID。vSwitch は、ALB でサポートされているゾーンにあり、クラスターと同じ VPC 内にある必要があります。リージョンが 2 つ以上のゾーンをサポートしている場合は、高可用性を実現するために、少なくとも 2 つのゾーンで vSwitch を指定します。サポートされているリージョンとゾーンについては、「リージョンとゾーン」をご参照ください。vSwitch の作成手順については、「vSwitch の作成と管理」をご参照ください。 |
spec.listeners | いいえ | リスナーのポートとプロトコル。上記の例では、ポート 8001 で HTTP リスナーを設定しています。リスナーは、ALB インスタンスがトラフィックを受信する方法を定義します。ALB イングレスを使用する前に、AlbConfig にリスナーを含めるか、手動でリスナーを作成する必要があります。 |
AlbConfig フィールドの完全なリストについては、「ALB Ingress GlobalConfiguration ディクショナリ」をご参照ください。設定例については、「ALB インスタンスとリスナーの設定」をご参照ください。
次のステップ
マルチクラスターゲートウェイの Ingress ルーティングルールを設定する:Ingress の設定
ACK での Service 管理について学ぶ:Service 管理