kubernetes network namespace 是如何创建和工作的01

微信扫一扫,分享到朋友圈

kubernetes network namespace 是如何创建和工作的01

首先,我们需要先搞清楚一个概念:network namespace , network namespace是一个类似process namespace的东西, process namespace 让我们的容器认为自己就是唯一, network namespace的作用也是一样,作用就是隔离

如果我们在一台机器上创建两个network namespace , 那么默认情况下两个network namespace 是无法相互访问的:

我们可以通过如下命令创建两个namespace ,一个是red, 一个是blue

$ ip netns add red
 
$ ip netns add blue

我们可以通过如下命令查看当前机器上的network namespace

ip netns

如何查看我们某个namespace下东西呢?例如IP, interfaces?

非常简单,只需要在我们平时的命令显示的指定namcspace的名称,例如:

$ ip netns exec red ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 
$ ip netns exec blue ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

或者:

$ ip -n red link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

每个独立的namespace下的所有东西都是隔离的,例如路由表,arp表

本机:

$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
172.17.0.21              ether   02:42:ac:11:00:15   C                     ens3
172.17.0.55              ether   02:42:ac:11:00:37   C                     ens3

两个namespace:

$ ip netns exec red arp
Address                  HWtype  HWaddress           Flags Mask            Iface
 
$ ip netns exec blue arp
Address                  HWtype  HWaddress           Flags Mask            Iface

既然是两个namespace,那么我们如何让这两个隔离的namespace 变得可以相互沟通,这个时候我们需要一个额外的设备virtual Cabe

这个东西其实类似我们的网线:我们先创建网线

$ ip link add veth-red type veth peer name veth-blue

然后我们把网线插到不通的namespace下:

$ ip link set veth-red netns red
 
$ ip link set veth-blue netns blue

然后我们需要设置IP地址:

$ ip -n red addr add 192.168.15.1/24 dev veth-red
 
$ ip -n blue addr add 192.168.15.2/24 dev veth-blue

因为默认两个ns是关闭的,我们要启用一下

$ ip -n red link set veth-red up
 
$ ip -n blue link set veth-blue up

这个时候我们两个namespace就是通的了

$ ip netns exec red ping 192.168.15.2
PING 192.168.15.2 (192.168.15.2) 56(84) bytes of data.
64 bytes from 192.168.15.2: icmp_seq=1 ttl=64 time=0.035 ms
64 bytes from 192.168.15.2: icmp_seq=2 ttl=64 time=0.046 ms
 
$ ip netns exec red arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.15.2             ether   da:a7:29:c4:5a:45   C                     veth-red
 
$ ip netns exec blue arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.15.1             ether   92:d1:52:38:c8:bc   C                     veth-blue

因为篇幅有限,下一遍继续说如何实现多个networks space之间的相互联系

微信扫一扫,分享到朋友圈

kubernetes network namespace 是如何创建和工作的01

年仅5岁的拼多多,靠什么抓住“后浪”95后?

上一篇

BERT and it's family

下一篇

你也可能喜欢

kubernetes network namespace 是如何创建和工作的01

长按储存图像,分享给朋友