近頃のDockerネットワーク

3,061 views

Published on

Tremaday #7 で発表した資料です.

Published in: Software
0 Comments
17 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,061
On SlideShare
0
From Embeds
0
Number of Embeds
622
Actions
Shares
0
Downloads
36
Comments
0
Likes
17
Embeds 0
No embeds

No notes for slide

近頃のDockerネットワーク

  1. 1. 近頃のDockerネットワーク 2015  8/8   NTT  ソフトウェアイノベーションセンタ   大嶋悠司
  2. 2. 自己紹介 •  大嶋 悠司   •  所属 NTT  SIC   •  元々機械学習畑   •  OSSやホワイトボックススイッチを触る   –   GoBGP:Go言語BGP実装    (h9p://osrg.github.io/gobgp/)   – Docker  
  3. 3. 今日の   メイン
  4. 4. Docker •  コンテナ仮想化技術を利用したアプリケー ション基盤ソフトウェア   •  イメージ管理機能があり,容易にアプリを動 作する環境を持ち運べる   •  最近ネットワーク周りに力を入れている
  5. 5. Linuxコンテナ 物理マシン ホストOS ハイパーバイザ ゲストOS 物理マシン ホストOS アプリ ア プ リ ア プ リ ア プ リ ゲストOS アプリ コンテナ 起動が早い・オーバーヘッドが少ない   イメージが軽量  :      最低限のイメージ(busybox)なら2.4MB  Ubuntu14.042でも188MB  
  6. 6. Docker周辺 Flannel CoreOS Ubuntu  Core Consul Weave Kubernetes いっぱいある!!
  7. 7. Docker Toolbox h9ps://www.docker.com/products/overview Docker  engine   v1.7   コンテナの起動 Docker  Machine   v0.3   コンテナ実行環境構築   Docker  Compose   v1.3.3   複数コンテナの構成定義   Docker  Swarm   v0.4   コンテナクラスタ構築 Docker  Registry   v0.91   コンテナイメージの   保管管理   KitemaXc   デスクトップ向けGUI  
  8. 8. SoYware  Infrastructure  Plumbing libnetwork   コンテナのネットワーク管理 RunC   コンテナ起動ツール   今回はこの2つ!
  9. 9. コンテナネットワークモデル SandBox→コンテナ Endpoint→veth Network EndpointをSandboxにつけたり外したり
  10. 10. Dockerのネットワーク linux  kernel   libnetwork  driver docker0作成   NAT設定書き込み
  11. 11. libnetwork  ドライバ docker  network  create  -­‐d  ドライバ名   •  libnetwork  driver   –  bridge(デフォルト)  ホストでNATされるブリッジ接続   –  null         所謂-­‐-­‐net=none   –  host                                                  所謂-­‐-­‐net=host   –  overlay        VXLANでトンネルを張る   –  windows(?)    スケルトンだけ   docker/vendor/src/github.com/docker/libnetwork/drivers   libnetworkは指定するドライバによって提供されるnetworkを変える  
  12. 12. Overlay  Driver Docker  1.8-­‐experimentalから利用可能   Docker  netowrkコマンドが追加   service  という概念が追加   マルチホストをサポート service:あるホスト名がどのendpointを向くか   a9ach/detachで別のコンテナに向けることが可能  
  13. 13. Overlay  Driver linux  kernel   overlay  driver libkv network名   ip  ホスト名   VNI   を共有
  14. 14. Docker  overlay  NW(デモ) Swarmもlibkvを使うみたいだからいずれswarmとも連携するはず
  15. 15. 実際に中身があるDriverは   Bridge  ・  overlay  ぐらい...   新しいものが追加されるの待ち       なんか自分で作りたい!  
  16. 16. で VLANドライバを作ってみた
  17. 17. libnetwork  ドライバ中身 Ø Config   Ø CreateNetwork   Ø DeleteNetwork   Ø CreateEndpoint   Ø DeleteEndpoint   Ø Join   Ø Leave がインターフェースとして定義   ネットワークの情報を格納する構造体はドライバごとにちょっとづつ違う   例えばBridgeドライバはnetworkConfiguraXon
  18. 18. VLAN拡張...
  19. 19. 何をやりたかったか コンテナ1 コンテナ2 コンテナ3 コンテナ4 VLAN10 VLAN20 ホストの外のVLANネットワークにコンテナを繋ぎたい
  20. 20. こんな実装にしたい Container1 Container2 eth0 eth0 veth1 veth1 eth0 eth0.200eth0.100 br100 10.0.0.1 br200 10.0.1.1 でもこれって   ブリッジ作ってエンドポイント付けたり   ブリッジ配下のエンドポイントにIP振ったり   大部分がBridgeドライバを流用できる… VLANドライバつくろう BrigadeドライバをVLAN拡張しよう  
  21. 21. 変更しなきゃいけないところ •  1つのホスト内で複数のVLANを設定したい   •  コマンドからVlanIDなどを指定したい   •  接続される物理インターフェースを指定して VLAN設定したい   •  VLAN毎にIPアドレスを管理したい  
  22. 22. 1つのホスト内で複数のVLANを設定 ネットワーク毎にVLANに紐付いたブリッジを作成   networkConfiguraXon   networkコマンドのオプションの値を格納   ネットワークごとにVLAN  IDを持つ
  23. 23. コマンドからVlanIDなどを指定したい   network  createの時にVLAN  IDを設定されたnetworkを作成 func  parseNetworkOpXons:でコマンドからVLANIDなどを取ってきて... func  CmdNetworkCreate:ネットワーク作成時にVLAN  IDを設定
  24. 24. 拡張したコマンド(デモ) Ex: VLAN 100をeth0に紐づけて作成   Ex: コンテナをVLAN 100にアタッチされた状態で起動 # ./docker-1.8.0-dev network create -d bridge --vlanid=100 --ifname=eth0 vlan100 # ./docker-1.8.0-dev run -itd –net=vlan100 ubuntu /bin/bash
  25. 25. IP指定するときはこんな感じ Ex: VLAN 100を作成かつブリッジに特定のIP,配下のエンドポイントのIP範囲指定               Ex: コンテナをVLAN 100にアタッチされた状態かつIPを指定して起動 # ./docker-1.8.0-dev network create -d bridge --vlanid=100 --ifname=eth0 -­‐-­‐ bip=10.0.0.1/8 -­‐-­‐fixed-cidr=10.0.0.0/16 vlan100   # ./docker-1.8.0-dev run -itd -­‐-­‐net=vlan100:<container-­‐IP> ubuntu /bin/bash 内部ではipコマンド叩いてサブインタフェース作っている https://github.com/dockervlan/docker
  26. 26. Dockerネットワークまとめ •  DockerのNWは今後libnetworkを中心に発展してい きそう   •  Weaveもremote  driverとして取り込まれる予定   •  今はNATとコンテナ同士のVXLAN.他にどんなNWが あればいいか   •  今回は省略したがオーケストレーションツール (swarm  compose)とNWが発展してきた   •  Webアプリ以外のユースケースを広げるには?
  27. 27. ここから   コンテナ 「の」 ネットワーク   の話から   コンテナ 「を」 ネットワーク   の話に
  28. 28. ホワイトボックススイッチ •  ソフト・OS・ハードは統合されて販売   •  大半のソフトウェアはクローズド   アプリケーション ハードウェア OS アプリケーション ハードウェア (ユーザの選択した)OS •  OS・アプリケーションはユーザが選択   •  自由にアプリの開発が可能   OSとして例えばCumulus  LinuxはLinuxベースのスイッチOS   Linuxでアプリを作る間隔でスイッチ上のアプリを開発可能   アプリのデプロイをコンテナでできれば楽だなぁ...
  29. 29. Docker  on  Cumulus  Linux •  CumulusはDebian7ベースの独自カーネル   •  HW(quanta)のストレージが極端に少ない   ü  BackPortsなしにDebian7にDockerを入れるのは結構面倒   ü  バイナリを持っていけば動くが,iptablesを書き換えられない(NATを切 る必要)   ü  aufs,  devicemapperどちらも使えない(vfs利用)   ü  そもそもdockerのイメージですら更新が増えると容量を圧迫 そこでRunCですよ!
  30. 30. RunC  ? RunC  とは    Open  Container  Projectに準拠させたコンテナ管理ツール    libcontainerベース    常駐デーモンがいない    イメージ管理などはない    go言語で簡単コンパイル  
  31. 31. 使い方は簡単(デモ) •  go  get  github.com/opencontainers/runcでとってきて   •  make  → make  install   •  別の場所でdocker  export コンテナ名 >  container.tar でtarに固めたコンテナを   •  tar  xvf  container.tar  -­‐C  rooks  でrooksに展開   •  runc  spec  >  config.jsonでspecファイル作って   •  sudo  runc   でコンテナが動く!  
  32. 32. RunC  on  White  Box  Switch •  ホワイトボックススイッチでもコンテナは動く!   •  まだ制限は多いがスイッチ上でコンテナを使 えば容易にアプリがデプロイできる   •  今後NW機器でもコンテナが動いていく!(か も)  

×