namespace简介
1.1.什么是namespace?Namespace是Linux内核用来隔离内核资源的方式,这些资源包括Mount、Process ID、Network、InterProcess Communication、UTS、User Id等。命名空间中的进程,只能看到属于自己的资源,无法感知其他namespace的资源,从而认为自己拥有全部的资源。1.2.namespace的用处?当前流行的docker技术,其实现基础即namespace技术。为了实现docker容器的隔离性,通过指定容器运行目录,实现隔离文件系统;网络资源隔离,每个容器拥有独立的ip,端口和路由;进程间通信资源隔离,使得只有通一个namespce中的进程可以互相通信;UserId隔离,容器拥有自己的的nodename和domainname;ProcessID隔离,每个容器内拥有独立的PID。openstack Neutron也使用Linux的namespace实现网络资源的隔离,实现虚拟网络。1.3.network namespace间通信每个独立的netns包含virtual network devices、IP address、IP routing tables、/proc/net direcotry、ports等。1.3.1. 两个netns使用veth pair通信https://bbs-img.huaweicloud.com/blogs/img/1577705352855154.png创建veth pair# tunctl -t tap1Set 'tap1' persistent and owned by uid 0# tunctl -t tap2Set 'tap2' persistent and owned by uid 0# ip link add tap1 type veth peer name tap2创建namespace1
# ip netns add ns_test# ip netns exec ns_test ifconfig -alo: flags=8<LOOPBACK>mtu 65536 looptxqueuelen 1(Local Loopback) RX packets 0bytes 0 (0.0 B) RX errors 0dropped 0overruns 0frame 0 TX packets 0bytes 0 (0.0 B) TX errors 0dropped 0 overruns 0carrier 0collisions 0创建tap
# ip link set tap1 netns ns_test# ip netns exec ns_test ifconfig -alo: flags=8<LOOPBACK>mtu 65536 looptxqueuelen 1(Local Loopback) RX packets 0bytes 0 (0.0 B) RX errors 0dropped 0overruns 0frame 0 TX packets 0bytes 0 (0.0 B) TX errors 0dropped 0 overruns 0carrier 0collisions 0
tap1: flags=4098<BROADCAST,MULTICAST>mtu 1500 ether 7a:2c:02:d9:1e:4dtxqueuelen 1000(Ethernet) RX packets 0bytes 0 (0.0 B) RX errors 0dropped 0overruns 0frame 0 TX packets 0bytes 0 (0.0 B) TX errors 0dropped 0 overruns 0carrier 0collisions 0配置ip地址
# ip netns exec ns_test ip addr add local 10.10.10.10/24 dev tap1# ip netns exec ns_test ifconfig tap1 up# ip netns exec ns_test ifconfig –alo: flags=8<LOOPBACK>mtu 65536 looptxqueuelen 1(Local Loopback) RX packets 0bytes 0 (0.0 B) RX errors 0dropped 0overruns 0frame 0 TX packets 0bytes 0 (0.0 B) TX errors 0dropped 0 overruns 0carrier 0collisions 0
tap1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500 inet 10.10.10.10netmask 255.255.255.0broadcast 0.0.0.0 inet6 fe80::a8fc:76ff:fee6:ddb0prefixlen 64scopeid 0x20<link> ether aa:fc:76:e6:dd:b0txqueuelen 1000(Ethernet) RX packets 13bytes 970 (970.0 B) RX errors 0dropped 0overruns 0frame 0 TX packets 12bytes 928 (928.0 B) TX errors 0dropped 0 overruns 0carrier 0collisions 0创建namespace2
# ip netns add ns_test2# ip link set tap2 netns ns_test2# ip netns exec ns_test2 ip addr add local 10.10.10.11/24 dev tap2# ip netns exec ns_test2 ifconfig tap2 up# ip netns exec ns_test2 ifconfig –alo: flags=8<LOOPBACK>mtu 65536 looptxqueuelen 1(Local Loopback) RX packets 0bytes 0 (0.0 B) RX errors 0dropped 0overruns 0frame 0 TX packets 0bytes 0 (0.0 B) TX errors 0dropped 0 overruns 0carrier 0collisions 0
tap2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500 inet 10.10.10.11netmask 255.255.255.0broadcast 0.0.0.0 inet6 fe80::2092:3eff:fe19:1d48prefixlen 64scopeid 0x20<link> ether 22:92:3e:19:1d:48txqueuelen 1000(Ethernet) RX packets 12bytes 928 (928.0 B) RX errors 0dropped 0overruns 0frame 0 TX packets 13bytes 970 (970.0 B) TX errors 0dropped 0 overruns 0carrier 0collisions 0两个命名空间tap口互ping
# ip netns exec ns_test ping 10.10.10.11PING 10.10.10.11 (10.10.10.11) 56(84) bytes of data.64 bytes from 10.10.10.11: icmp_seq=1 ttl=64 time=0.074 ms64 bytes from 10.10.10.11: icmp_seq=2 ttl=64 time=0.061 ms 666 我来看看,哈哈哈 感谢楼主分享!:handshake 谢谢楼主分享 纨绔不饿死,儒冠多误身。
丈人试静听,贱子请具陈。
甫昔少年日,早充观国宾。
读书破万卷,下笔如有神。
页:
[1]