Google Cloud Platform
An Illustrated Guide to
Kubernetes Networking
Tim Hockin <[email protected]>
Senior Staff Software Engineer
@thockin
Google Cloud Platform
Layer 2: ethernet
Google Cloud Platform
node-a
node-c
node-b
node-d
192.168.1.1/16
11:22:33:44:55:01
192.168.1.2/16
01:23:45:67:89:02
192.168.1.3/16
11:22:33:44:55:03
192.168.1.4/16
01:23:45:67:89:04
L2
switch
Google Cloud Platform
node-a
node-c
node-b
node-d
L2
to: 192.168.1.3
from: 192.168.1.1
GET / 192.168.1.1/16
11:22:33:44:55:01
192.168.1.2/16
01:23:45:67:89:02
192.168.1.3/16
11:22:33:44:55:03
192.168.1.4/16
01:23:45:67:89:04
Google Cloud Platform
node-d
node-bnode-a
node-c
L2
to: <broadcast>
from: 11:22:33:44:55:01
who has 192.168.1.3?
to: 192.168.1.3
from: 192.168.1.1
GET / 192.168.1.1/16
11:22:33:44:55:01
192.168.1.2/16
01:23:45:67:89:02
192.168.1.3/16
11:22:33:44:55:03
192.168.1.4/16
01:23:45:67:89:04
“ARP request”
Google Cloud Platform
node-a
node-c
node-b
node-d
L2
to: 192.168.1.3
from: 192.168.1.1
GET / 192.168.1.1/16
11:22:33:44:55:01
192.168.1.2/16
01:23:45:67:89:02
192.168.1.3/16
11:22:33:44:55:03
192.168.1.4/16
01:23:45:67:89:04
to: 11:22:33:44:55:01
from: 11:22:33:44:55:03
I have 192.168.1.3
“ARP response”
Google Cloud Platform
node-a
node-c
node-b
node-d
L2
to: 192.168.1.3
via: 11:22:33:44:55:03
from: 192.168.1.1
GET /
192.168.1.1/16
11:22:33:44:55:01
192.168.1.2/16
01:23:45:67:89:02
192.168.1.3/16
11:22:33:44:55:03
192.168.1.4/16
01:23:45:67:89:04
Google Cloud Platform
node-a
root netns
eth0: 192.168.1.1/16
11:22:33:44:55:01
L2 with containers
cbr0: 10.0.1.1/24
ctr-1
eth0: 10.0.1.2/24
ctr-2
eth0: 10.0.1.3/24
ctr-3
eth0: 10.0.1.4/24
Google Cloud Platform
node-a
192.168.1.1/16
11:22:33:44:55:01
L2
ctr-1 10.0.1.2
aa:bb:cc:dd:e1:01
ctr-2 10.0.3.2
aa:bb:cc:dd:e3:02
to: 10.0.3.2
from: 10.0.1.2
GET /
to: <broadcast>
from: aa:bb:cc:dd:e1:01
who has 10.0.3.2?
“ARP request”
Google Cloud Platform
node-a
192.168.1.1/16
11:22:33:44:55:01
L2
ctr-1 10.0.1.2
aa:bb:cc:dd:e1:01
ctr-2 10.0.3.2
aa:bb:cc:dd:e3:02
to: 10.0.3.2
from: 10.0.1.2
GET /
to: aa:bb:cc:dd:e1:01
from: 11:22:33:44:55:03
I have 10.0.3.2
“proxy ARP
response”
Google Cloud Platform
node-a
192.168.1.1/16
11:22:33:44:55:01
ctr-1 10.0.1.2
ctr-2 10.0.3.2
to: 10.0.3.2
from: 192.168.1.2
GET /
Overlay (e.g. flannel, weave)
Google Cloud Platform
node-a
192.168.1.1/16
node-c
non-node
node-d
192.168.1.2/16
192.168.1.3/16
192.168.1.4/16
ctr-1 10.0.1.2
ctr-2 10.0.3.2
to: 10.0.3.2
from: 192.168.1.2
GET /
Overlay (e.g. flannel, weave)
Google Cloud Platform
node-a
192.168.1.1/16
node-c
non-node
node-d
192.168.1.2/16
192.168.1.3/16
192.168.1.4/16
ctr-1 10.0.1.2
ctr-2 10.0.3.2
to: 10.0.3.2
from: 192.168.1.2
GET /
?!?!
Overlay (e.g. flannel, weave)
Google Cloud Platform
We need a bridge between the
physical and overlay networks...
Google Cloud Platform
We need a bridge between the
physical and overlay networks...
•could: route to nodes
•could: route to 1 or more bridge machines
•could: run flannel on client machines
Google Cloud Platform
We need a bridge between the
physical and overlay networks...
•could: route to nodes
•could: route to 1 or more bridge machines
•could: run flannel on client machines
•see “When should I use an overlay?”