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
270
Other Decks in Technology
See All in Technology
スクラムガイドに載っていないスクラムのはじめかた - チームでスクラムをはじめるときに知っておきたい勘所を集めてみました! - / How to start Scrum that is not written in the Scrum Guide 2nd
takaking22
2
240
Modern Linux
oracle4engineer
PRO
0
170
KotlinConf 2025_イベントレポート
sony
1
140
共有と分離 - Compose Multiplatform "本番導入" の設計指針
error96num
2
1.2k
Snowflake Intelligenceにはこうやって立ち向かう!クラシルが考えるAI Readyなデータ基盤と活用のためのDataOps
gappy50
0
290
2つのフロントエンドと状態管理
mixi_engineers
PRO
3
170
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
400
20250913_JAWS_sysad_kobe
takuyay0ne
2
260
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
8.8k
roppongirb_20250911
igaiga
1
260
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
1
1k
LLM時代のパフォーマンスチューニング:MongoDB運用で試したコンテキスト活用の工夫
ishikawa_pro
0
180
Featured
See All Featured
Producing Creativity
orderedlist
PRO
347
40k
The Cult of Friendly URLs
andyhume
79
6.6k
Balancing Empowerment & Direction
lara
3
630
Building Flexible Design Systems
yeseniaperezcruz
329
39k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
850
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
RailsConf 2023
tenderlove
30
1.2k
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