首先,我们需要先搞清楚一个概念:network namespace , network namespace是一个类似process namespace的东西, process namespace 让我们的容器认为自己就是唯一, network namespace的作用也是一样,作用就是隔离
如果我们在一台机器上创建两个network namespace , 那么默认情况下两个network namespace 是无法相互访问的:
我们可以通过如下命令创建两个namespace ,一个是red, 一个是blue
1 2 3 |
$ ip netns add red $ ip netns add blue |
我们可以通过如下命令查看当前机器上的network namespace
1 |
ip netns |
如何查看我们某个namespace下东西呢?例如IP, interfaces?
非常简单,只需要在我们平时的命令显示的指定namcspace的名称,例如:
1 2 3 4 5 6 7 |
$ 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 |
或者:
1 2 3 |
$ 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表
本机:
1 2 3 4 |
$ 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:
1 2 3 4 5 |
$ 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
这个东西其实类似我们的网线:我们先创建网线
1 |
$ ip link add veth-red type veth peer name veth-blue |
然后我们把网线插到不通的namespace下:
1 2 3 |
$ ip link set veth-red netns red $ ip link set veth-blue netns blue |
然后我们需要设置IP地址:
1 2 3 |
$ 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是关闭的,我们要启用一下
1 2 3 |
$ ip -n red link set veth-red up $ ip -n blue link set veth-blue up |
这个时候我们两个namespace就是通的了
1 2 3 4 5 6 7 8 9 10 11 12 |
$ 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之间的相互联系
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021