みなさん、こんにちは。 Red Hatでソリューションアーキテクトをしている小野です。
ハイブリッドクラウドやマルチクラウドの環境下へKubernetesクラスタをインストールしたときに、 Kubernetesクラスタ同士を接続するネットワークをどのように構成するのか要検討ポイントとなります。
クラスタ間のネットワークを構成する方法として、以下の記事にて紹介されているSubmarinerを用いてクラスタ間でIPsecを張る方法や、OpenShift Service MeshのFederation機能を使用してmTLSでマルチクラスタ間を連携する方法などがありますが、2つ以上の多くのクラスタを接続することを考えると、ネットワークトポロジがフルメッシュとなり、NATやファイアウォール越えの対応や、クラスタ数の増加に伴う管理の煩雑化、などの懸念が出てきます。
そこで、本稿ではAMQP Interconnectベースでクラスタ間ネットワークを実現するSkupper
について紹介します。
詳細や簡単な使い方は以下のQiitaの記事にてまとめてみましたのでぜひご参照ください。
また、公式ドキュメントは以下となります。
Skupperとは
Skupperは、KubernetesのマルチクラスタをAMQP Interconnectベースで接続するソフトウェアです。 Red Hat AMQのAMQP Interconnect 2.0にてテクノロジープレビューとして使えます。
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と同期します。
ユースケースイメージ
Skupperは、VPNやファイアウォールのルール、アクセスポリシーなどの複雑なL3処理を介さず、場所を問わずどこからどこへでもアプリケーション間通信を可能にするネットワークとして、Virtual Application Network(VAN)を構成できる、というコンセプトを掲げています。
VANのユースケースとして、下記の様な例が考えられるかと思います。 特にネットワークエッジにQDRを分散配置し、カスタマーエッジやパブリッククラウドからVANへ接続する、と言うことを実現できたら、容易にエッジとクラウド上のアプリケーション間を連携できるな、と夢想しました。
プライベートクラウド上のKubernetesクラスタとパブリッククラウド上のKubernetesクラスタをP2Pで接続し、ハイブリッドクラウドを構成する。
本社をHubとして、支社 to 支社の通信を本社経由で管理。支社からのデータは本社で一元化。また、本社にいるデータ分析者が、支社データを支社内に閉じた状態で活用するHubとなるクラスタを通信キャリアのネットワーク上に分散配置して、エッジとクラウドを中継するネットワークを構成する、など
Hubとなるクラスタを通信キャリアのネットワーク上に分散配置して、エッジとクラウドを中継するネットワークを構成する、など
GettingStarted
Skupperを使うには、公式ドキュメントに記載されているskupper
CLIツールを用いるか、OperatorHubにて公開されているSkupper site operator
を使います。
Skupper site operator
をインストールし、Skupperのコンポーネントの設定情報をまとめたskupper-site
と言う名前のConfigMapを作成すれば、コンポーネントのPodが自動deployされます。
以下は、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のマルチクラスタのネットワークソリューションの一つとしてぜひお試しください!