Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

14 421 vues

Publié le

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

Publié dans : Technologie
  • Soyez le premier à commenter

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

×