狠狠撸

狠狠撸Share a Scribd company logo
近顷の顿辞肠办别谤ネットワーク	
2015	
 ?8/8	
 ?
NTT	
 ?ソフトウェアイノベーションセンタ	
 ?
大嶋悠司
自己紹介	
?? 大嶋 悠司	
 ?
?? 所属 NTT	
 ?SIC	
 ?
?? 元々機械学習畑	
 ?
?? OSSやホワイトボックススイッチを触る	
 ?
–?	
 ?GoBGP:Go言語BGP実装	
 ?
	
 ?(h9p://osrg.github.io/gobgp/)	
 ?
–?Docker	
 ?
今日の	
 ?
メイン
Docker	
?? コンテナ仮想化技術を利用したアプリケー
ション基盤ソフトウェア	
 ?
?? イメージ管理機能があり,容易にアプリを動
作する環境を持ち運べる	
 ?
?? 最近ネットワーク周りに力を入れている
Linuxコンテナ	
物理マシン	
ホストOS	
ハイパーバイザ	
ゲストOS	
物理マシン	
ホストOS	
アプリ	
ア
プ
リ	
ア
プ
リ	
ア
プ
リ	
ゲストOS	
アプリ	
 コンテナ	
起動が早い?オーバーヘッドが少ない	
 ?
イメージが軽量	
 ?:	
 ?	
 ?
	
 ?最低限のイメージ(busybox)なら2.4MB	
 ?Ubuntu14.042でも188MB	
 ?
Docker周辺	
Flannel	
CoreOS	
 Ubuntu	
 ?Core	
Consul	
Weave	
Kubernetes	
いっぱいある!!
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	
 ?
SoYware	
 ?Infrastructure	
 ?Plumbing	
libnetwork	
 ?
コンテナのネットワーク管理	
RunC	
 ?
コンテナ起動ツール	
 ?
今回はこの2つ!
コンテナネットワークモデル	
SandBox→コンテナ	
Endpoint→veth	
Network	
EndpointをSandboxにつけたり外したり
Dockerのネットワーク	
linux	
 ?kernel	
 ?	
libnetwork	
 ?driver	
docker0作成	
 ?
NAT設定書き込み
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を変える	
 ?
Overlay	
 ?Driver	
Docker	
 ?1.8-?‐experimentalから利用可能	
 ?
Docker	
 ?netowrkコマンドが追加	
 ?
service	
 ?という概念が追加	
 ?
マルチホストをサポート	
service:あるホスト名がどのendpointを向くか	
 ?
a9ach/detachで別のコンテナに向けることが可能	
 ?
Overlay	
 ?Driver	
linux	
 ?kernel	
 ?	
overlay	
 ?driver	
libkv	
network名	
 ?
ip	
 ?ホスト名	
 ?
VNI	
 ?
を共有
Docker	
 ?overlay	
 ?NW(デモ)	
Swarmもlibkvを使うみたいだからいずれswarmとも連携するはず
実際に中身があるDriverは	
 ?
Bridge	
 ??	
 ?overlay	
 ?ぐらい...	
 ?
新しいものが追加されるの待ち	
 ?
	
 ?
	
 ?
なんか自分で作りたい!	
 ?
で	
VLANドライバを作ってみた
libnetwork	
 ?ドライバ中身	
???Con?g	
 ?
???CreateNetwork	
 ?
???DeleteNetwork	
 ?
???CreateEndpoint	
 ?
???DeleteEndpoint	
 ?
???Join	
 ?
???Leave	
がインターフェースとして定義	
 ?
ネットワークの情報を格納する構造体はドライバごとにちょっとづつ違う	
 ?
例えばBridgeドライバはnetworkCon?guraXon
痴尝础狈拡张...
何をやりたかったか	
コンテナ1	
 コンテナ2	
 コンテナ3	
 コンテナ4	
VLAN10	
 VLAN20	
ホストの外のVLANネットワークにコンテナを繋ぎたい
こんな実装にしたい	
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拡張しよう	
 ?
変更しなきゃいけないところ	
?? 1つのホスト内で複数のVLANを設定したい	
 ?
?? コマンドからVlanIDなどを指定したい	
 ?
?? 接続される物理インターフェースを指定して
VLAN設定したい	
 ?
?? VLAN毎にIPアドレスを管理したい	
 ?
1つのホスト内で複数のVLANを設定	
ネットワーク毎にVLANに紐付いたブリッジを作成	
 ?
networkCon?guraXon	
 ?
networkコマンドのオプションの値を格納	
 ?
ネットワークごとにVLAN	
 ?IDを持つ
コマンドからVlanIDなどを指定したい	
 ?
network	
 ?createの時にVLAN	
 ?IDを設定されたnetworkを作成	
func	
 ?parseNetworkOpXons:でコマンドからVLANIDなどを取ってきて...	
func	
 ?CmdNetworkCreate:ネットワーク作成時にVLAN	
 ?IDを設定
拡張したコマンド(デモ)	
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
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
Dockerネットワークまとめ	
?? DockerのNWは今後libnetworkを中心に発展してい
きそう	
 ?
?? Weaveもremote	
 ?driverとして取り込まれる予定	
 ?
?? 今はNATとコンテナ同士のVXLAN.他にどんなNWが
あればいいか	
 ?
?? 今回は省略したがオーケストレーションツール
(swarm	
 ?compose)とNWが発展してきた	
 ?
?? Webアプリ以外のユースケースを広げるには?
ここから	
 ?
コンテナ 「の」 ネットワーク	
 ?
の話から	
 ?
コンテナ 「を」 ネットワーク	
 ?
の話に
ホワイトボックススイッチ	
?? ソフト?OS?ハードは統合されて販売	
 ?
?? 大半のソフトウェアはクローズド	
 ?
アプリケーション	
ハードウェア	
OS	
アプリケーション	
ハードウェア	
(ユーザの選択した)OS	
?? OS?アプリケーションはユーザが選択	
 ?
?? 自由にアプリの開発が可能	
 ?
OSとして例えばCumulus	
 ?LinuxはLinuxベースのスイッチOS	
 ?
Linuxでアプリを作る間隔でスイッチ上のアプリを開発可能	
 ?
アプリのデプロイをコンテナでできれば楽だなぁ...
Docker	
 ?on	
 ?Cumulus	
 ?Linux	
?? CumulusはDebian7ベースの独自カーネル	
 ?
?? HW(quanta)のストレージが極端に少ない	
 ?
ü?? BackPortsなしにDebian7にDockerを入れるのは結構面倒	
 ?
ü?? バイナリを持っていけば動くが,iptablesを書き換えられない(NATを切
る必要)	
 ?
ü?? aufs,	
 ?devicemapperどちらも使えない(vfs利用)	
 ?
ü?? そもそもdockerのイメージですら更新が増えると容量を圧迫	
そこでRunCですよ!
RunC	
 ??	
RunC	
 ?とは	
 ?
 Open	
 ?Container	
 ?Projectに準拠させたコンテナ管理ツール	
 ?
 libcontainerベース	
 ?
 常駐デーモンがいない	
 ?
 イメージ管理などはない	
 ?
 go言語で簡単コンパイル	
 ?
使い方は簡単(デモ)	
?? go	
 ?get	
 ?github.com/opencontainers/runcでとってきて	
 ?
?? make	
 ?→ make	
 ?install	
 ?
?? 別の場所でdocker	
 ?export コンテナ名 >	
 ?container.tar
でtarに固めたコンテナを	
 ?
?? tar	
 ?xvf	
 ?container.tar	
 ?-?‐C	
 ?rooks	
 ?でrooksに展開	
 ?
?? runc	
 ?spec	
 ?>	
 ?con?g.jsonでspecファイル作って	
 ?
?? sudo	
 ?runc	
 ?
でコンテナが動く!	
 ?
RunC	
 ?on	
 ?White	
 ?Box	
 ?Switch	
?? ホワイトボックススイッチでもコンテナは動く!	
 ?
?? まだ制限は多いがスイッチ上でコンテナを使
えば容易にアプリがデプロイできる	
 ?
?? 今後NW機器でもコンテナが動いていく!(か
も)	
 ?

More Related Content

近顷の顿辞肠办别谤ネットワーク