Rancherのオーバーレイネットワークを使用する #docker #rancher
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
はじめに
前回は複数のパブリッククラウドのAPIと連携したコンテナ実行用ホストの起動についてご紹介いたしました。第3回となる今回はRancherの機能の中でも目玉といえる、コンテナ実行ホスト間のオーバーレイネットワークについて解説致します。
オーバーレイネットワークとは
通常Dockerを使用した場合、起動されたコンテナはホストの中に自動的に生成されるDocker用ネットワーク(docker0, 172.17.0.0/16)に自動的に接続されますが、このネットワークはあくまでホストの中だけで完結するネットワークであり、外部からアクセスしたり、別のDocker実行用ホスト内のDocker用ネットワークと相互に疎通することができません。
この制限はDockerを共通基盤とする際に大きな障壁となっており、現在さまざまなソリューションが発表されています。(TIS株式会社の松井様が非常にわかりやすく整理された資料を公開しております( http://www.slideshare.net/nbykmatsui/cloudmix-11th-containerstudydockernetworking )。こちらもぜひご参照ください。)
またDocker社でもこの課題を解決するために、先日Socketplane社を買収しました。(こちらも詳細な解説をPublickeyの新野様が記事にされております( http://www.publickey1.jp/blog/15/dockersoftware-defined_networkingsocketplanedocker.html )。こちらもぜひご参照ください。)
今後Docker社自身を含め、オーバーレイネットワークを含めたDockerオーケストレーションをめぐる動きはより活発になっていくと思われます。
Rancherの提供するオーバーレイネットワーク
Rancherも機能のひとつとしてオーバーレイネットワークを提供しています。IPSecを使用して実装されており、各コンテナ実行用ホストのパブリックネットワークを経由するオーバーレイネットワークを形成することができます。Rancherの形成するオーバーレイネットワークの概念図は以下の通りです。
Rancherのオーバーレイネットワークは特にユーザが事前に設定する必要なく、自動的に形成されるため非常に簡便に利用することができますが、以下のような制約があります。
- コンテナ実行用ホストはIPSec通信のために、お互いに500/udp および 4500/udpを送受信可能であること
- 各ホストの状態を共有するため、コンテナ実行用ホストは9345/tcpおよび9346/tcpを受信可能であること
- オーバーレイネットワークのネットワークアドレスは10.42.0.0/16から変更することができない
- 各Dockerコンテナに割り当てるIPアドレスはRancherが自動的に割り当てる。手動で制御することはできない
また上記の制約事項から、プライベートクラウド内に構築したRancherクラスタとパブリッククラウド上に構築したRancherクラスタの間でオーバーレイネットワークを形成することはできません。(正確に言うとできないわけではありませんが、VPNを作ったりルーティングを作り込む必要があります)
Rancherのオーバーレイネットワークを使用する
これから実際に、Rancherが作成したオーバーレイネットワークを使用します。現状、Rancherクラスタには2台のコンテナ実行用ホストが登録されています。1台はSoftLayer(San Jose)上に作成された仮想インスタンス(ホスト名:yarai-rancher-agent01)、もう1台はAWS(US-East)上に作成された仮想インスタンス(ホスト名: rancher-aws-01)です。
最初にAWS上のrancher-aws-01上にコンテナを作成します。CentOSのコンテナを作成します(作成画面は割愛)。作成後の画面を見ると、ホスト"yarai-rancher-agent01"上にコンテナ"RCContainer-SL-01"、ホスト"rancher-aws-01"上にコンテナ"RCContainer-AWS-01"がそれぞれ起動している事がわかります。
上記の画面を見ると作成したコンテナの他に、"Network Agent"というコンテナがそれぞれのホスト上で起動している事がわかります。これがホスト内のLANのゲートウェイとなり、IPSecトンネリングを行うソフトウェアルータです。つまりAWS上のコンテナ"RCContainer-AWS-01"から、SoftLayer上の"RCContainer-SL-01"へのパケットは以下のような経路でネットワーク上を流れていくことになります。
では実際にpingを打ってみます。管理GUIから、コンテナ"RCContainer-AWS-01"のコンソールを開き、pingを実行します。
無事にpingが疎通し、オーバーレイネットワークが機能していることがわかりました。
おわりに
Rancherを利用することで簡単にオーバーレイネットワークが構築することができ、パブリッククラウドまたぎのインフラ構築がより簡便になりました。記事内でご不明なところがありましたら遠慮なくコメント頂ければ幸いです。