命名空间 | 描述 | 作用 |
进程命名空间 | 隔离进程ID | inux通过命名空间管理进程号,同一个进程,在不同的命名空间进程号不同 进程命名空间是一个父子结构,子空间对于父空间可见 |
网络命名空间 | 隔离网络设备、协议栈、端口等 | 通过网络命名空间,实现网络隔离,将不同命名空间的网络设备连接到一起 |
IPC命名空间 | 隔离进程间通信 | 进程间交互方法 PID命名空间和IPC命名空间可以组合起来用,同一个IPC名字空间内的进程可以彼此看见,允许进行交互,不同空间进程无法交互 |
挂载命名空间 | 隔离挂载点,隔离文件目录 | 进程运行时可以将挂载点与系统分离,使用这个功能时,我们可以达到 chroot 的功能,而在安全性方面比 chroot 更高 |
UTS命名空间 | 隔离Hostname和NIS域名 | 拥有独立的主机名和域名,目的是独立出主机名和网络信息服务(NIS) |
用户命名空间 | 隔离用户和group ID | 每个命名空间内上的用户跟宿主主机上不在一个命名空间 同进程 ID 一样,用户 ID 和组 ID 在命名空间内外是不一样的,并且在不同命名空间内可以存在相同的 ID |
[root@localhost ~]# ip netns ls[root@localhost ~]# ip netns add test1[root@localhost ~]# ip link list1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 6a:b4:3c:52:ac:44 brd ff:ff:ff:ff:ff:ff3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 66:4a:9f:f6:51:16 brd ff:ff:ff:ff:ff:ff[root@localhost ~]# ip link add veth0 type veth peer name veth1[root@localhost ~]# ip link list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 6a:b4:3c:52:ac:44 brd ff:ff:ff:ff:ff:ff3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 66:4a:9f:f6:51:16 brd ff:ff:ff:ff:ff:ff4: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether ba:f1:e3:75:a8:c4 brd ff:ff:ff:ff:ff:ff5: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 52:83:c8:40:04:6f brd ff:ff:ff:ff:ff:ffip link set veth1 netns test1[root@localhost ~]# ip link set veth1 netns test1[root@localhost ~]# ip netns exec test1 ip link set lo up[root@localhost ~]# ip netns exec test1 ip link set veth1 up[root@localhost ~]# ip netns exec test1 ip addr add 1.1.1.1/24 dev veth1[root@localhost ~]# ip netns exec test1 ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever4: veth1@if5: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000 link/ether ba:f1:e3:75:a8:c4 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 1.1.1.1/24 scope global veth1 valid_lft forever preferred_lft forever# 宿主机配置IP地址并测试网络[root@localhost ~]# ip link set veth0 up[root@localhost ~]# ip addr add 1.1.1.2/24 dev veth0[root@localhost ~]# ping 1.1.1.1 -c 1PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.64 bytes from 1.1.1.1: icmp_seq=1 ttl=64 time=0.100 ms--- 1.1.1.1 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 0.100/0.100/0.100/0.000 ms# 在网络命名空间test1中ping宿主机上的IP地址[root@localhost ~]# ip netns exec test1 ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever4: veth1@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether ba:f1:e3:75:a8:c4 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 1.1.1.1/24 scope global veth1 valid_lft forever preferred_lft forever inet6 fe80::b8f1:e3ff:fe75:a8c4/64 scope link valid_lft forever preferred_lft forever[root@localhost ~]# ip netns exec test1 ping -c 1 1.1.1.2PING 1.1.1.2 (1.1.1.2) 56(84) bytes of data.64 bytes from 1.1.1.2: icmp_seq=1 ttl=64 time=0.088 ms--- 1.1.1.2 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 0.088/0.088/0.088/0.000 ms# 添加网络命名空间ip netns add test1# 添加虚拟网卡ip link set veth1 netns test1# 将网卡添加到网络命名空间中并激活网卡ip link set veth1 netns test1ip netns exec test1 ip link set lo upip netns exec test1 ip link set veth1 upip netns exec test1 ip addr add 1.1.1.1/24 dev veth1# 在宿主机添加桥接网络并将宿主机物理网卡和虚拟网卡添加到桥接中ip link add vmbr0 type bridgeip link set vmbr0 upip link set ens19 master vmbr0ip link set veth0 master vmbr0# 另一个主机访问网络命名空间中的IP地址ping 1.1.1.1