Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Dockerのネットワークについて

14,340 views

Published on

OSSコンソーシアム クラウド部会 第11回部会で発表した資料です

Published in: Technology
  • Be the first to comment

Dockerのネットワークについて

  1. 1. Dockerのネットワークについて 2015年10月02日 TIS株式会社 松井 暢之 OSSコンソーシアム クラウド部会 第11回部会
  2. 2. 2 松井 暢之(まつい のぶゆき) TIS株式会社 戦略技術センター ~2003 2003~2008 2009 2010~2012 2013~ 2015~ 現場PJでアーキテクト兼モデラー兼プログラマ兼…を歴任 基盤技術センター(現戦略技術センター)で不芳PJの火消しに奔走 全社生産性向上の企画策定に従事 オープンでエッジな技術を活用した事業企画に従事 OSSクラウドオーケストレータ “CloudConductor®” の開発に着手 IoTプラットフォーム関連の研究開発に着手 nbyk.matsui nmatsui nbyk.matsui@n_matsui
  3. 3. Dockerが生まれた背景  Dockerはもともと、パブリックなPaaSを実現するために開発された  2011年 米dotCloud社(現Docker社)がPaaS提供開始  2013年 dotCloudのコア技術を「Docker」としてOSS公開  2014年 PaaS事業を売却して「Docker」事業に専念  「Docker=コンテナ型仮想化エンジン」では無い  Dockerとは、アプリケーション実行環境をイメージとして標準化し そのイメージから実際の実行環境を素早く提供するための仕組み  “Docker allows you to package an application with all of its dependencies into a standardized unit for software development.”  コンテナ型仮想化技術は、Dockerが求める世界を実現するための 手段であって、目的では無い 3 出展:https://www.docker.com/whatisdocker
  4. 4. Dockerを構成するプロダクト  Dockerは以下のようなプロダクトで構成される  Docker Engine  アプリケーションの実行環境を効率よくイメージ化  イメージから実際の実行環境(コンテナ)を素早く提供  Linuxカーネルに実装された様々な隔離技術を用いて Linux上にコンテナを構築する(libcontainer)  libcontainerは現在、コンテナ技術の標準化団体 Open Container Initiative(OCI)が定める標準 仕様のリファレンス実装としてOCIに寄贈済み  Docker Registry  イメージを集約・共有  Docker社が提供するパブリックなRegistryがDocker Hub 4
  5. 5. Dockerを構成するプロダクト  Dockerは以下のようなプロダクトで構成される  Docker Machine  Docker Engineが動作する環境をサーバやクラウド上へ 自動構築  Docker Swarm  複数ホスト上のDocker Engineをクラスタリングし、 単一のDocker Engineのように操作  Docker Compose  依存関係(link)を持つ複数のコンテナをYAMLの 定義ファイルから生成 5
  6. 6. IaaS/PaaS基盤として見た場合のDockerの課題  隔離されたアプリケーション実行環境を単一サーバ上に構築するので あれば、Docker EngineとDocker Registryで必要十分  複数ホストをクラスタリングし、Dockerを用いたIaaS/PaaS的な環境 を構成したい場合、Docker Engineだけでは不足する部分がある  コンテナのスケジューリングやルーティング、ヘルスチェック等  Docker Swarm、kubernetes、rancher、apache/mesos等  コンテナ間の仮想ネットワーキング  etcd/flannel、weaveworks/weave、rancher等 Docker native Overlay network(experimental)  サーバをまたがって利用できるコンテナ用ストレージ  ClusterHQ/flocker ?  ホストの管理、認証認可とマルチテナンシー、テレメトリー等 6
  7. 7. eth0 docker0 伝統的なDocker Networking(bridgeモード) 1. Dockerを起動 i. docker0という仮想ブリッジを作成 ii. docker0から外部に接続できるように、iptablesにルールを追加 2. Dockerコンテナ立ち上げ i. vethペアをコンテナのNW namespaceとdocker0に接続 ii. 指定されていれば、ポート変換ルールをiptablesに追加 7 veth コンテナ1 veth veth コンテナ2 veth veth ペア iptablesでIPマスカレード(とポート変換)
  8. 8. 伝統的なDocker Networking(bridgeモード)の面倒な点  コンテナに与えられるIPアドレスを制御できない  docker0に与えるIPアドレスは指定できるが、コンテナのIPアド レスはdocker0が所属するアドレス空間から昇順で自動採番  同一ホスト上の他のコンテナにアクセスする際には、link機能を 用いて接続先コンテナのネットワークやサービスポートの情報を 環境変数として埋め込んでもらう必要がある  ホストOSの外部からコンテナにアクセスするのが面倒  コンテナに与えられたIPアドレスは、ホストOSの外部からは アクセスできない  コンテナ内のデーモンにアクセスするためには、ホストOSへ ポートフォワードしておく必要がある 8
  9. 9. Dockerの仮想ネットワーキングツールの例(1)  GRE + jpetazzo/pipework  シェルスクリプト一つだけで実現されており、至極シンプル  ただし複数ホストで動作させる場合、GREやVXLAN等を用いて ホスト間に自力で仮想ネットワークを敷設する必要がある 9
  10. 10. Dockerの仮想ネットワーキングツールの例(2)  coreos/flannel  Kubernetesと共に利用される(ことが多い)  goをインストールした後にflannel自身のビルドが必要で、かつ etcdにも依存するため、インストールと設定が面倒 10
  11. 11. Dockerの仮想ネットワーキングツールの例(3)  rancher/rancher  WebUIからホストの登録やコンテナ起動を実施できる  rancherのサーバやエージェントはdockerコンテナとして提供され るため、インストールが簡単 11
  12. 12. Dockerの仮想ネットワーキングツールの例(3)  rancher/rancher 12
  13. 13. Dockerの仮想ネットワーキングツールの例(4)  weaveworks/weave  rancherと同様、weaveの仮想ネットワークエージェントはDocker コンテナとして提供されるため、インストールが簡単  Dockerの仮想ネットワーキングツールだけでなく、最近はコンテナ の可視化やコンテナのクラスタリング・ルーティング等も提供する 13
  14. 14. Dockerの仮想ネットワーキングツールの例(4)  weaveworks/weave 14
  15. 15. Dockerネイティブの仮想ネットワーキング  Dockerは1.7からネットワーク機能がlibcontainerから切り離され、 libnetworkへの移行が進められている  libnetworkのコンセプト  Sandbox  コンテナのネットワーク設定(インタフェース、ルーティング等)を Network Namespace等の技術で隔離するもの  Endpoint  SandboxをNetworkに接続するインタフェース veth pairやOVS internal port等で実装される  Network  お互いが直接通信できるEndpointの集合体 Linux bridgeやVLAN、あるいはその他のoverlay技術で実装される  一つのSandboxが複数のNetworkのEndpointを持っても良い 15出展:https://github.com/docker/libnetwork/blob/master/docs/design.md
  16. 16. Dockerネイティブの仮想ネットワーキング  The Container Network Model  現在libnetworkに実装されているNetwork Driver  Null Driver APIの空実装  Bridge docker0とiptablesを用いる(従来の--net=bridgeと同様)  Host ホストのネットワークをそのまま使う(従来の--net=hostと同様)  Overlay 複数ホスト間をVXLANを用いてトンネリング  Remote pluginとして動的登録される3rd partyのnetworkを利用 16 出展:DOCKER NETWORKING TAKES A STEP IN THE RIGHT DIRECTION, https://blog.docker.com/2015/04/docker-networking-takes-a-step-in-the-right-direction-2/ windows.goも ファイルは存在するが、 中身はreturn nil・・・
  17. 17. Dockerネイティブの仮想ネットワーキング  libnetworkのOverlay driverの動作要件  Linux Kernel >= 3.16  Ubuntu 14.04は3.13のため動作しない  Experimental Docker Client  リリース版Docker(1.8.2)では動作しない  分散KVS  libnetworkは、メタデータを保持するためにlibkvを利用する  libkvは現在、以下の分散KVSをサポートする  consul >= 0.5.1  etcd >= 2.0  zookeeper >= 3.4.5 17 出展:https://github.com/docker/libnetwork/blob/master/docs/overlay.md https://github.com/docker/libkv/blob/master/README.md
  18. 18. Dockerネイティブの仮想ネットワーキング  libnetworkのOverlay driver(libkv backendがconsulの場合)  docker daemonが自動で作成するdocker0は利用せず、Network Namespaceでホストから隔離されたLinux bridgeを利用する  Endpointはveth pair、NetworkはVXLANでトンネリングされるが、 やはりNetwork Namespaceで隠蔽される 18
  19. 19. デモ  SoftLayerの複数DC(Dallas6とDallas9)を用い、サブネットを またいだ3つのホストを仮想ネットワークで接続する  Docker overlay network 1.9.0-dev  rancher 0.39.0  weave 1.1.0 19

×