namespace简介
【摘要】 1.1.什么是namespace?Namespace是Linux内核用来隔离内核资源的方式,这些资源包括Mount、Process ID、Network、InterProcess Communication、UTS、User Id等。命名空间中的进程,只能看到属于自己的资源,无法感知其他namespace的资源,从而认为自己拥有全部的资源。1.2.namespace的用处?当前流行的dock...
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通信
创建veth pair
[root@HS ~]# tunctl -t tap1 Set 'tap1' persistent and owned by uid 0 [root@HS ~]# tunctl -t tap2 Set 'tap2' persistent and owned by uid 0 [root@HS ~]# ip link add tap1 type veth peer name tap2
创建namespace1
[root@HS~]# ip netns add ns_test [root@HS ~]# ip netns exec ns_test ifconfig -a lo: flags=8<LOOPBACK> mtu 65536 loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
创建tap
[root@HS ~]# ip link set tap1 netns ns_test [root@HS ~]# ip netns exec ns_test ifconfig -a lo: flags=8<LOOPBACK> mtu 65536 loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tap1: flags=4098<BROADCAST,MULTICAST> mtu 1500 ether 7a:2c:02:d9:1e:4d txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
配置ip地址
[root@HS ~]# ip netns exec ns_test ip addr add local 10.10.10.10/24 dev tap1 [root@HS ~]# ip netns exec ns_test ifconfig tap1 up [root@HS ~]# ip netns exec ns_test ifconfig –a lo: flags=8<LOOPBACK> mtu 65536 loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tap1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.10.10.10 netmask 255.255.255.0 broadcast 0.0.0.0 inet6 fe80::a8fc:76ff:fee6:ddb0 prefixlen 64 scopeid 0x20<link> ether aa:fc:76:e6:dd:b0 txqueuelen 1000 (Ethernet) RX packets 13 bytes 970 (970.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12 bytes 928 (928.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
创建namespace2
[root@HS ~]# ip netns add ns_test2 [root@HS ~]# ip link set tap2 netns ns_test2 [root@HS ~]# ip netns exec ns_test2 ip addr add local 10.10.10.11/24 dev tap2 [root@HS ~]# ip netns exec ns_test2 ifconfig tap2 up [root@HS ~]# ip netns exec ns_test2 ifconfig –a lo: flags=8<LOOPBACK> mtu 65536 loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tap2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.10.10.11 netmask 255.255.255.0 broadcast 0.0.0.0 inet6 fe80::2092:3eff:fe19:1d48 prefixlen 64 scopeid 0x20<link> ether 22:92:3e:19:1d:48 txqueuelen 1000 (Ethernet) RX packets 12 bytes 928 (928.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 13 bytes 970 (970.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
两个命名空间tap口互ping
[root@HS ~]# ip netns exec ns_test ping 10.10.10.11 PING 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 ms 64 bytes from 10.10.10.11: icmp_seq=2 ttl=64 time=0.061 ms
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)