Kubernetes の普及に伴い、企業はサービスの分離、アプリケーションのデプロイ、および O&M の要件を満たすために、複数の Kubernetes クラスターを実行および管理する必要があります。さらに、クラスターは別のクラスターにデプロイされているサービスにアクセスする必要がある場合があります。マルチクラスターサービス (MCS) 機能を使用すると、ロードバランサーを作成することなく、Kubernetes クラスター間でサービスにアクセスできます。このトピックでは、MCS 機能のアーキテクチャ、シナリオ、およびネットワーク設計について説明します。
アーキテクチャ
マルチクラスターサービス (MCS) 機能を使用すると、クラスター間でサービスにアクセスできます。複数のクラスターにまたがるアプリケーションを作成できます。次の図は、MCS 機能のアーキテクチャを示しています。
前の図で 1 とマークされている接続は、分散クラウドコンテナプラットフォーム for Kubernetes (ACK One) Fleet インスタンスによって、関連付けられている Container Service for Kubernetes (ACK) クラスタの ServiceExport と ServiceImport を管理するために使用されます。
ServiceExport は、サービス 1 をエクスポートするために ACK クラスタ 1 に作成されます。ACK クラスタ 1 はサービスプロバイダーとして機能します。
ServiceImport は、ACK クラスタ 2 がサービスプロバイダーによってエクスポートされたサービス 1 にアクセスできるようにするために、ACK クラスタ 2 に作成されます。ACK クラスタ 2 はサービスコンシューマーとして機能します。
前の図で 2 とマークされている接続は、データ交換に使用されます。サービス 1 が ACK クラスタ 1 でエクスポートされ、ACK クラスタ 2 でインポートされると、ACK クラスタ 2 から ACK クラスタ 1 のサービス 1 にアクセスできます。このようにして、クラスター間でサービスにアクセスできます。
MCS のしくみ
次の図は、MCS のしくみを示しています。
ACK クラスタ 2 の Pod が ACK クラスタ 1 のサービス 1 にアクセスできるようにするには、ACK クラスタ 1 に ServiceExport を作成し、ACK クラスタ 2 に ServiceImport を作成します。
ACK One Fleet インスタンスは、
amc-というプレフィックスが付いたamc-Service1という名前のサービスを ACK クラスタ 2 に作成し、ACK クラスタ 1 の Pod の IP アドレスをamc-Service1サービスのバックエンドに同期します。ACK クラスタ 2 のクライアント Pod は、次のいずれかの方法で ACK クラスタ 1 のサービス 1 にアクセスできます。
amc-Service1.provider-nsなど、amc-で始まるドメイン名にアクセスします。Service1.provider-ns.svc.clusterset.localなど、clusterset.local で終わるドメイン名にアクセスします。
シナリオ
別のクラスターからサービスにアクセスする
ACK クラスタ 1 に ServiceExport を作成し、ACK クラスタ 2 に ServiceImport を作成します。ACK クラスタ 1 はサービスプロバイダーとして機能し、ACK クラスタ 2 はサービスコンシューマーとして機能します。ACK クラスタ 2 のクライアント Pod は、ACK クラスタ 1 でエクスポートされたサービス 1 にアクセスできます。サービス 1 は、ドメイン名解決に基づいてアクセスされます。トラフィックは ACK クラスタ 1 のバックエンド Pod 間で分散され、Pod の数は動的にスケーリングされます。次の図は、クラスター間でサービスにアクセスする方法を示しています。
クラスター全体にデプロイされているサービスにアクセスする
サービス 1 は、高可用性を確保するために複数のクラスターにデプロイされています。クライアント Pod がクラスター間でサービス 1 にアクセスする場合、トラフィックはクラスターの複数の Pod 間で分散できます。次の図は、クラスター全体にデプロイされているサービス 1 にアクセスする方法を示しています。
MCS のネットワーク設計
クラスター間でサービスにアクセスするには、クラスター内の Pod のネットワークが接続されていることを確認して、Pod が相互にアクセスできるようにする必要があります。次の要件を満たす必要があります。
複数の仮想プライベートクラウド (VPC) を使用する場合は、VPC CIDR ブロックが互いに重複していないことを確認します。VPC は、クラウドエンタープライズネットワーク (CEN) を使用して接続されます。
クラスター内の Pod CIDR ブロックは互いに重複してはならず、ノードプールセキュリティグループは Pod CIDR ブロック間のトラフィックを相互に許可する必要があります。
Pod CIDR ブロックは、クラスター内のサービス CIDR ブロックと重複してはなりません。
詳細については、「ACK マネージドクラスターのネットワーク計画」をご参照ください。
制限
関連付けられているクラスターの Kubernetes バージョンは 1.22 以降である必要があります。