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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Eugene Yakubovich
August 19, 2015
Technology
48
0
Share
From network namespace to fabric overlay
My talk from ContainerCon 2015
Eugene Yakubovich
August 19, 2015
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
FlutterでPiP再生を実装した話
s9a17
0
250
OpenClaw初心者向けセミナー / OpenClaw Beginner Seminar
cmhiranofumio
0
260
Zephyr(RTOS)でARMとRISC-Vのコア間通信をしてみた
iotengineer22
0
120
【AWS】CloudTrail LakeとCloudWatch Logs Insightsの使い分け方針
tsurunosd
0
130
Kubernetesの「隠れメモリ消費」によるNode共倒れと、Request適正化という処方箋
g0xu
0
170
やさしいとこから始めるGitHubリポジトリのセキュリティ
tsubakimoto_s
3
2.1k
Podcast配信で広がったアウトプットの輪~70人と音声発信してきた7年間~/outputconf_01
fortegp05
0
210
「決め方」の渡し方 / How to hand over the "decision-making process"
pauli
4
270
トイルを超えたCREは何屋になるのか
bengo4com
0
120
生成AIで支える自動E2Eテストの継続運用
sansantech
PRO
0
110
Microsoft Fabricで考える非構造データのAI活用
ryomaru0825
0
630
昔話で振り返るAWSの歩み ~S3誕生から20年、クラウドはどう進化したのか~
nrinetcom
PRO
0
140
Featured
See All Featured
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
350
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
230
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Done Done
chrislema
186
16k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
210
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
Building an army of robots
kneath
306
46k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
340
Designing Experiences People Love
moore
143
24k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
260
Game over? The fight for quality and originality in the time of robots
wayneb77
1
150
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