Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
From network namespace to fabric overlay
Search
Eugene Yakubovich
August 19, 2015
Technology
0
42
From network namespace to fabric overlay
My talk from ContainerCon 2015
Eugene Yakubovich
August 19, 2015
Tweet
Share
More Decks by Eugene Yakubovich
See All by Eugene Yakubovich
Container Network Interface: Network plugins for Kubernetes and beyond
eyakubovich
0
280
CoreOS NYC Meetup
eyakubovich
2
260
Other Decks in Technology
See All in Technology
Lambda management with ecspresso and Terraform
ijin
2
170
AIに目を奪われすぎて、周りの困っている人間が見えなくなっていませんか?
cap120
1
650
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
6.3k
「AIと一緒にやる」が当たり前になるまでの奮闘記
kakehashi
PRO
3
150
専門分化が進む分業下でもユーザーが本当に欲しかったものを追求するプロダクトマネジメント/Focus on real user needs despite deep specialization and division of labor
moriyuya
1
1.3k
マルチプロダクト×マルチテナントを支えるモジュラモノリスを中心としたアソビューのアーキテクチャ
disc99
1
580
UDDのススメ - 拡張版 -
maguroalternative
1
580
Bet "Bet AI" - Accelerating Our AI Journey #BetAIDay
layerx
PRO
4
1.8k
Amazon S3 Vectorsは大規模ベクトル検索を低コスト化するサーバーレスなベクトルデータベースだ #jawsugsaga / S3 Vectors As A Serverless Vector Database
quiver
2
710
2025新卒研修・HTML/CSS #弁護士ドットコム
bengo4com
3
13k
Intro to Software Startups: Spring 2025
arnabdotorg
0
260
Claude Codeは仕様駆動の夢を見ない
gotalab555
23
6.7k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
The Invisible Side of Design
smashingmag
301
51k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Why Our Code Smells
bkeepers
PRO
337
57k
Docker and Python
trallard
45
3.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
RailsConf 2023
tenderlove
30
1.2k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Building Applications with DynamoDB
mza
96
6.5k
Transcript
From network namespace to fabric overlays Eugene Yakubovich @eyakubovich
Containers are awesome - Containers provide isolation - For networking
- its own port space - its own IP
Network Namespace - Can every container have a "real" IP?
- How should network be virtualized? - Is network virtualization part of "container runtime"?
$ sudo unshare -n /bin/bash $ ip addr 1: lo:
<LOOPBACK> mtu 65536 ... link/loopback 00:00:00:00:00:00 brd ... New net ns
$ ip link set lo up $ ip addr 1:
lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 ... link/loopback 00:00:00:00:00:00 brd ... inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever New net ns
$ ping 8.8.8.8 connect: Network is unreachable $ ip route
show $ New net ns
veth 10.0.1.5/31 10.0.1.4 10.0.1.7/31 10.0.1.6
veth 10.0.1.5/24 10.0.1.7/24 10.0.1.1/24
Virtualizing the NIC and Network - veth pair (plus linux-bridge)
- macvlan - ipvlan - OVS - vlan - vxlan
IP Address Management - Host - Cluster - Global
Which one? No right answer!
Need pluggable network strategy
Container Runtime (e.g. rkt) veth macvlan ipvlan OVS
Container Runtime (e.g. rkt) veth macvlan ipvlan OVS
Container Runtime (e.g. rkt) veth macvlan ipvlan OVS Container Networking
Interface (CNI)
CNI - Container can join multiple networks - Network described
by JSON config - Plugin supports two commands - Add container to the network - Remove container from the network
User configures a network $ cat /etc/rkt/net.d/10-mynet.conf { "name": "mynet",
"type": "bridge", "ipam": { "type": "host-local", "subnet": "10.10.0.0/16" } }
CNI: Step 1 Container runtime creates network namespace and gives
it a named handle $ cd /run $ touch myns $ unshare -n mount --bind /proc/self/ns/net myns
CNI: Step 2 Container runtime invokes the CNI plugin $
export CNI_COMMAND=ADD $ export CNI_NETNS=/run/myns $ export CNI_CONTAINERID=5248e9f8-3c91-11e5-... $ export CNI_IFNAME=eth0 $ $CNI_PATH/bridge </etc/rkt/net.d/10-mynet.conf
CNI: Step 3 Inside the bridge plugin (1): $ brctl
addbr mynet $ ip link add veth123 type veth peer name $CNI_IFNAME $ brctl addif mynet veth123 $ ip link set $CNI_IFNAME netns $CNI_IFNAME $ ip link set veth123 up
CNI: Step 3 Inside the bridge plugin (2): $ IPAM_PLUGIN=host-local
# from network conf $ echo $IPAM_PLUGIN { "ip4": { "ip": "10.10.5.9/16", "gateway": "10.10.0.1" } }
CNI: Step 3 Inside the bridge plugin (3): # switch
to container namespace $ ip addr add 10.0.5.9/16 dev $CNI_IFNAME # Finally, print IPAM result JSON to stdout
Current plugins Top level ptp bridge macvlan ipvlan IPAM host-local
dhcp
Q: How do we give each container a routable IP
in "restricted" env? A: Overlay network: flannel, weave
None
None
{ "network": "10.1.0.0/16" }
10.1.16.0/24 10.1.24.0/24 10.1.71.0/24
10.1.16.0/24 # /run/flannel/subnet.env FLANNEL_NETWORK=10.1.0.0/16 FLANNEL_SUBNET=10.1.16.0/24 FLANNEL_MTU=1472
10.0.16.0/24 10.1.24.0/24 10.1.71.0/24 10.1.16.2 10.1.24.3
Putting it all together CNI
flannel CNI plugin - "meta" plugin - reads in /run/flannel/subnet.env
- writes out "bridge" + "host-local" conf - calls out to "bridge"
{ "name": "mynet", "type": "flannel" } # /run/flannel/subnet.env FLANNEL_NETWORK=10.1.0.0/16 FLANNEL_SUBNET=10.1.16.0/24
FLANNEL_MTU=1472 { "name": "mynet", "type": "bridge", "mtu": 1472, "ipam": { "type": "host-local", "subnet": "10.1.16.0/24" } }
$ sudo rkt run --private-net=mynet --interactive debian.aci (debian) $ ip
addr … 10.1.16.2 … (debian) $ ping 10.1.71.3 PING 10.1.71.3 (10.1.71.3) 56(84) bytes of data. 64 bytes from 10.1.71.3: icmp_seq=1 ttl=55 time=1.6 ms
Questions github.com/appc/cni github.com/coreos/rkt github.com/coreos/flannel