BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Rancher Labs,Kubernetesクラスタ間のネットワークを可能にするSubmarinerをリリース

Rancher Labs,Kubernetesクラスタ間のネットワークを可能にするSubmarinerをリリース

原文(投稿日:2019/03/15)へのリンク

Rancher Labsは、Kubernetesクラスタ間のネットワーク接続を可能にするオープンソースプロジェクトのSubmarinerを新たにリリースした。このプロジェクトは,Kubernetesクラスタ個々のオーバーレイネットワークを接続して,"マルチクラスタ"を形成するものだ。これにより,クラスタ間の通信や,アプリケーションと分散データストア間の同期が簡単にできるようになる。

現在のKubernetesデプロイメントでは,すべてにネットワーク仮想化が実装されており,同一クラスタ内の複数ノードで実行されているアプリケーションが,クラスタの内部ネットワーク空間を介して互いに通信できるようになっている。Kubernetesで実行されているアプリケーションは,コンテナにパッケージされ,Podの内部にデプロイされる。Pod内のコンテナはすべて,ローカルネットワークの名前空間を共有している。Pod内にデプロイされたアプリケーションは,サービスを通じて,クラスタ内部でグローバルにアクセスできるように設定することができる。 サービスはClusterIP,NodePort,あるいはロードバランサ経由でアプリケーションを公開する。異なるKubernetesクラスタ内にあるアプリケーションやサービスへのネットワークアクセスが必要なPodは、 Ingress Controller,外部ロードバランサ,あるいはNodePortを経由して相互に通信しなければならない。

Rancher LabsのマーケティングマネージャであるMatthew Laufe Scheer氏の先日のブログ記事によると,Submarinerは,"複数のKubernetesクラスタにデプロイされ,相互通信を必要とするマイクロサービス"のために,ネットワーク接続を提供する目的でローンチされたもので,"地理的領域を越えたKubernetes内のデータベースレプリケーションや,クラスタをまたぐサービスメッシュのデプロイのような,新たなマルチクラスタ実装のホスティング"を可能にする。Submarinerでは、ゲートウェイやネットワークトンネルを管理して、異なるKubernetesクラスタ内のコンテナを直接接続するために必要なルーティングを行う,集中型の"Submarinerブローカ"が提供されている。

Submarinerの基本的なアーキテクチャは次図のようなものだ。

Submariner Kubernetes multicluster architecture
Rancher Labs Submarinerのアーキテクチャ (Submariner GitHub repoより引用)

リリース発表のブログ記事によると、Submarinerの主な機能は次のとおりだ。

  • 既存クラスタとの互換性および接続性: 既存のKubernetesクラスタにSubmarinerを展開することができる。これにより,異なるクラスタ内にあるPodを結ぶレイヤ3ネットワーク接続が新たに追加される。
  • 安全なパス: IPSecトンネルを使用した暗号化ネットワーク接続が,デフォルトとして実装されている(将来的なロードマップでは,プラグイン可能な接続メカニズムが導入される予定)。
  • 柔軟なサービスディスカバリ: 複数のKubernetesクラスタを対象としたサービスディスカバリを提供する。
  • Container Networking Interface(CNI)との互換性: FlannelCalicoといった,一般的なCNIドライバとの連携が可能である。

接続するクラスタ内には,Submarinerの主要な2つのコンポーネントである"submariner"(Deploymentとしてデプロイ)と,"submariner-route-agent"(DaemonSetとしてデプロイ)をデプロイする必要がある。submariner podは"ゲートウェイノード"上で動作し、ノード間でリーダ選出(leader election)を実行することで,リーダを選び出す。submariner-route-agentはすべてのノードで動作し、現在のゲートウェイノードリーダを認識する。起動時には、リーダに選出されたsubmariner podが、このクラスタの唯一のエンドポイントであることを保証するための調停プロセス(reconciliation process)を実行する。障害発生時には,(別のゲートウェイホスト上にある)他のsubmariner podがリーダシップを獲得し,アクティブなリーダとなるための調停を行う。

Submarinerは、Kubernetesのカスタムリソース定義(CRD)を使用あるいは統合する,いくつかのコンポーネントで構成されている。CRDは、Kubernetes自体の提供する機能を容易に拡張できるように設計されたエンティティである。Submarinerでは,中央のブローカを使って情報交換を行うことで、クラスタ間のCRDを同期させている。リーダに選出されたsubmariner pod上では"satastoresyncer"がコントローラとして動作し,データストアとSumbariner CRDのローカルクラスタ間の双方向の同期の実行を担当する。

現在のSubmarinerには,デプロイメントにいくつかの前提条件がある。

  • 最低でも3つのKubernetesクラスタを運用すること。それぞれのクラスタがユニークなクラスタIDを持ち,その中のひとつは,すべての接続されているクラスタからアクセス可能な,セントラルブローカとして動作するように設計する必要がある。
  • クラスタ間で異なるクラスタ/サービスCIDRブロック(および異なるkubernetes DNSサフィックス)を使用すること。これは,トラフィックのセレクタ/ポリシ/ルーティングの干渉を回避するために必要である。
  • インターネットを経由した,インスタンス間の直接的なIP接続(Submarinerをインターネット上で運用しない場合は,同じネットワーク上にあること)。Submarinerは1.1 NATセットアップをサポートするが,構成上いくつかの注意事項と,プロバイダ特有の構成手順がある。
  • 各クラスタのネットワーク構成に関する知識。
  • crd-install hookをサポートするバージョン(v2.12.1以降)のHelm(Kubernetesパッケージマネージャ)をインストールすること。
  • AWS内で実行する場合は,ゲートウェイホストであるインスタンスのソース/デスティネーションチェックを無効にして,インスタンスがリモートクラスタへのトラフィックを渡すことができるようにする必要がある。

Submarinerの発表は,先日リリースされたRancher 2.2プラットフォームのプレビュー版に含まれていた"multi-cluster applications"を補完する意味もある。これは任意の数のKubernetesクラスタにデプロイされた同一アプリケーションのコピーを,一度にデプロイおよびアップグレードする新機能である。用途としては,クラウドの各アベイラビリティゾーンのKubernetesクラスタで運用することで冗長性を確保しているアプリケーションのリプレース,各クラスタ上で同じアプリケーションを運用しているエッジあるいはIoTデプロイメントなどが考えられる。

InfoQは先日,Rancher Labsの共同創業者でCEOのSheng Liang氏と席を共にして,Submariner開発の動機について聞くことができた。

InfoQ: 今回のSubmarinerのリリースと,先日発表された"Multi-Cluster Kubernetes Applications"との関連性について,説明をお願いします。

Sheng Liang: Submarinerは,従来の"Multi-Cluster Kubernetes Applications"テクノロジに対する自然な拡張です。ユーザがアプリケーションを複数のKubernetesクラスタにデプロイする場合,異なるクラスタ内のPod同士で通信を行う必要性が生じます。Submarinerがなければ,クラスタ内のPodが別のクラスタ内のPodと通信するには,Ingress ControllerやノードPodを経由しなければなりません。SubmarinerはPod対Podのコネクションを簡易にするので,異なるKubernetesクラスタをまたいで,Podから別のPodへの直接的な接続が可能になります。

InfoQ: Istio,Linkerd,Consul Connectなどのサービスメッシュと比較した場合はどうでしょうか?

Liang: Submarinerはメッシュではありません。提供するのはレイヤ3のネットワーク接続のみです。ですが,Istioのようなサービスメッシュと統合することは可能です。例えば,Submarinerを使用することで,Istioを複数のKubernetesクラスタにデプロイすることができます。Istioのマルチクラスタサポートではクラスタ間のPod対Pod接続が必要なのですが,これはSubmarinerが提供する機能そのものです。詳細は,https://istio.io/docs/setup/kubernetes/multicluster-install/の"前提条件"に関する章を参照してください。

InfoQ: 一般的な企業組織において,クロスクラスタ/クロスDC接続は,どの程度重要なのでしょうか?

Liang: 企業では,複数のデータセンタやクラウドに別々のKubernetesをデプロイすることがよくあります。アプリケーションやサービスはこれらのクラスタに展開されるので,クロスクラスタ・ネットワーク接続は,アプリケーションのデプロイメントにおける基本的な要件になります。クロスクラスタ・ネットワーク接続があれば,アプリケーションコンポーネント間の複雑なネットワークルーティングや,ロードバランサのルールを設定する必要がなくなるので,アプリケーションのデプロイが簡単になるのです。例えば,あるクラスタにMySQLのマスタを,別のクラスタにMySQLのスレーブをセットアップするものとしましょう。Submarinerは,これら2つのPodを互いに直接通信できるようにします。これは,MySQL HAのセットアップに必要なものです。

さらにLiang氏は,"エッジ"あるいはIoTでのKubernetesデプロイメントのユースケースで,Submarinerをマルチクラスタネットワークの提供に使用することも可能だ,とも述べている。エッジでのKubernetesクラスタ展開は一般的なものになりつつあり,今回のQCon New Yorkの"Milking the Most out of 1000's of K8s Clusters"で話題になったChick-fil-A(訳注: 米国の鶏肉料理レストランチェーン)や,先日のCNCF Technical Oversight Committee (TOC)で行われたKubeEdgeプロジェクトをCNCFサンドボックスに含めることを提案するプレゼンテーションなどでも取り上げられていた。

SubmarinerのGitHubリポジトリになるREADMEには,Submarinerはまだ運用ベースで使用するべきではないとされており,フルリリースのスケジュールも公開されていない。Rancher Labsのチームは,"[Submarinerの]使用や評価は歓迎するが,重大なバグに突き当たる可能性は少なくない"。フィードバックはGitHubイシュー,RancherフォーラムSlack上で送ることができる。

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT