namespace简介

举报
bella zh 发表于 2019/12/30 19:33:02 2019/12/30
【摘要】 1.1.什么是namespace?Namespace是Linux内核用来隔离内核资源的方式,这些资源包括Mount、Process ID、Network、InterProcess Communication、UTS、User Id等。命名空间中的进程,只能看到属于自己的资源,无法感知其他namespace的资源,从而认为自己拥有全部的资源。1.2.namespace的用处?当前流行的dock...

1.1.什么是namespace?

NamespaceLinux内核用来隔离内核资源的方式,这些资源包括MountProcess IDNetworkInterProcess CommunicationUTSUser Id等。命名空间中的进程,只能看到属于自己的资源,无法感知其他namespace的资源,从而认为自己拥有全部的资源。

1.2.namespace的用处?

当前流行的docker技术,其实现基础即namespace技术。为了实现docker容器的隔离性,通过指定容器运行目录,实现隔离文件系统;网络资源隔离,每个容器拥有独立的ip,端口和路由;进程间通信资源隔离,使得只有通一个namespce中的进程可以互相通信;UserId隔离,容器拥有自己的的nodenamedomainnameProcessID隔离,每个容器内拥有独立的PID

openstack Neutron也使用Linuxnamespace实现网络资源的隔离,实现虚拟网络。

1.3.network namespace间通信

每个独立的netns包含virtual network devicesIP addressIP routing tables/proc/net direcotryports等。

1.3.1.          两个netns使用veth pair通信

image.png

创建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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。