AMQP InterconnectベースでKubernetesのマルチクラスタ間のネットワークを構成するSkupperのご紹介

みなさん、こんにちは。 Red Hatでソリューションアーキテクトをしている小野です。

ハイブリッドクラウドやマルチクラウドの環境下へKubernetesクラスタをインストールしたときに、 Kubernetesクラスタ同士を接続するネットワークをどのように構成するのか要検討ポイントとなります。

クラスタ間のネットワークを構成する方法として、以下の記事にて紹介されているSubmarinerを用いてクラスタ間でIPsecを張る方法や、OpenShift Service MeshのFederation機能を使用してmTLSでマルチクラスタ間を連携する方法などがありますが、2つ以上の多くのクラスタを接続することを考えると、ネットワークトポロジがフルメッシュとなり、NATやファイアウォール越えの対応や、クラスタ数の増加に伴う管理の煩雑化、などの懸念が出てきます。

rheb.hatenablog.com

cloud.redhat.com

そこで、本稿ではAMQP Interconnectベースでクラスタ間ネットワークを実現するSkupperについて紹介します。

詳細や簡単な使い方は以下のQiitaの記事にてまとめてみましたのでぜひご参照ください。

qiita.com

また、公式ドキュメントは以下となります。

skupper.io

Skupperとは

Skupperは、KubernetesのマルチクラスタをAMQP Interconnectベースで接続するソフトウェアです。 Red Hat AMQのAMQP Interconnect 2.0にてテクノロジープレビューとして使えます。

access.redhat.com

Skupperは、非特権でnamespace単位にdeployされたQpid Dispatch Router(以降、QDR)を介してPod間通信を可能にします。 対象のServiceリソースのバックエンドがQDRとなり、QDRが宛先のクラスタへルーティングするイメージです。

QDRはステートレスなアプリケーションですので、スケールアウトできます。 また、フルメッシュはもちろん、Hub&SpokeでQDRのネットワークを構成することもできます。

QDR同士を接続して構成したネットワークは、OSPFとIS-ISに似たリンクステートルーティングプロトコルのアルゴリズムを使用して、送信元から宛先すべてにコストベースで最適なパスを計算してルーティング、障害時は迅速に復元するように動作します。

アプリケーション構成

Skupperのアプリケーション構成はとてもシンプルで、Control Planeのskupper-service-controllerとData Planeのskupper-routerの2コンポーネントが提供されます。

  • skupper-service-controller Pod(Deployment)

consolenやAPIを提供(APIへはskupperCLIでアクセス)し、skupper routerの設定(qdrのqdrouterd.jsonの一部箇所)をconfig-syncと連携して変更したりします。

  • skupper-router Pod(Deployment)

routerコンテナとconfig-syncコンテナが含まれ、routerコンテナはQDR、config-syncコンテナは、skupper-service-controllerと連携してAPIやGUI上で設定されたconfigをrouterと同期します。

f:id:yudaiono:20220207170952p:plain
Skupperの全体イメージ

ユースケースイメージ

Skupperは、VPNやファイアウォールのルール、アクセスポリシーなどの複雑なL3処理を介さず、場所を問わずどこからどこへでもアプリケーション間通信を可能にするネットワークとして、Virtual Application Network(VAN)を構成できる、というコンセプトを掲げています。

VANのユースケースとして、下記の様な例が考えられるかと思います。 特にネットワークエッジにQDRを分散配置し、カスタマーエッジやパブリッククラウドからVANへ接続する、と言うことを実現できたら、容易にエッジとクラウド上のアプリケーション間を連携できるな、と夢想しました。

  • プライベートクラウド上のKubernetesクラスタとパブリッククラウド上のKubernetesクラスタをP2Pで接続し、ハイブリッドクラウドを構成する。

  • 本社をHubとして、支社 to 支社の通信を本社経由で管理。支社からのデータは本社で一元化。また、本社にいるデータ分析者が、支社データを支社内に閉じた状態で活用するHubとなるクラスタを通信キャリアのネットワーク上に分散配置して、エッジとクラウドを中継するネットワークを構成する、など

  • Hubとなるクラスタを通信キャリアのネットワーク上に分散配置して、エッジとクラウドを中継するネットワークを構成する、など

f:id:yudaiono:20220207162526p:plain
VAN構成イメージ

GettingStarted

Skupperを使うには、公式ドキュメントに記載されているskupper CLIツールを用いるか、OperatorHubにて公開されているSkupper site operatorを使います。 Skupper site operatorをインストールし、Skupperのコンポーネントの設定情報をまとめたskupper-siteと言う名前のConfigMapを作成すれば、コンポーネントのPodが自動deployされます。

f:id:yudaiono:20220207163643p:plain
Skupper Operator

以下は、ConfigMapの例です。

apiVersion: v1
data:
  cluster-local: "false"
  console: "true"
  console-authentication: internal
  console-password: "changeme"
  console-user: "admin"
  edge: "true"
  name: east-site
  router-console: "true"
  service-controller: "true"
  service-sync: "true"
kind: ConfigMap
metadata:
  name: skupper-site

詳細は、前述のQiitaの記事や公式ドキュメントを参考にしてください。

とても簡単に使えますので、Kubernetesのマルチクラスタのネットワークソリューションの一つとしてぜひお試しください!

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。