Linux namespace详解

namespace & container

namespace还拥有层次关系。图3中,一个parent namespace下有两个child namespace。 parent namespace和它的两个child namespace都有三个进程号为1,2,3的进程,同时child namespace的每个进程被映射到了parent namespace中的4,5,6,7,8,9。虽然只有9个进程,但需要15个进程号来表示它们。
今年4月份,有人问霍金:“单向乐队(One Direction)的成员Zayn离队让全球无数少女心碎不已,这件事会产生怎样的宇宙效应呢?”


veth pair是用于不同network namespace间进行通信的方式, veth pair将一个network namespace数据发往另一个network namespace的veth。

Linux Bridge可以实现类似交换机的工作模式,将多个不同Namespace上的网卡连通

node1:
[root@node1 ~]# yum -y install bridge-utils
[root@node1 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02421cbdfc1e no
[root@node1 ~]# docker run --rm=true -it java /bin/bash
root@c508b337ed93:/#
[root@node1 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02421cbdfc1e no veth88e97e6
root@c508b337ed93:/# ip addr show
1: 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
213: eth0@if214: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default #eth0连接214索引网卡
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@node1 ~]# ip addr show veth88e97e6
214: veth88e97e6@if213: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default #veth88e97e6接口连
接213索引网卡
link/ether be:3a:14:f8:e7:33 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::bc3a:14ff:fef8:e733/64 scope link
valid_lft forever preferred_lft forever
[root@node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c508b337ed93 java "/bin/bash" 3 minutes ago Up 3 minutes sweet_mclaren
[root@node1 ~]# docker inspect -f '{{.State.Pid}}' c508b337ed93 #得到容器真正的pid
73542
[root@node1 ~]# mkdir -p /var/run/netns
[root@node1 ~]# ln -s /proc/73542/ns/net /var/run/netns/73542
[root@node1 ~]# ip netns ls
73542 (id: 0)
[root@node1 ~]# ip netns exec 73542 ip addr show
1: 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
213: eth0@if214: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@node1 ~]# ip netns exec 73542 ethtool -S eth0
NIC statistics:
peer_ifindex: 214
[root@node1 ~]# ip addr show veth88e97e6
214: veth88e97e6@if213: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether be:3a:14:f8:e7:33 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::bc3a:14ff:fef8:e733/64 scope link
valid_lft forever preferred_lft forever
OVS +Docker




node1:
[root@node1 ~]# vim /etc/selinux/config SELINUX=permissive [root@node1 ~]# setenforce 0 [root@node1 ~]# getenforce Permissive [root@node1 ~]# vim /etc/yum.repos.d/openstack-train.repo [openstack-train] name=openstack-rocky baseurl=https://mirrors.aliyun.com/centos/7.7.1908/cloud/x86_64/openstack-train/ gpgcheck=0 gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 repo_gpgcheck=0 enabled=1 [root@node1 ~]# yum clean all [root@node1 ~]# yum makecache [root@node1 ~]# yum -y install openvswitch [root@node1 ~]# systemctl restart openvswitch [root@node1 ~]# systemctl status openvswitch [root@node1 ~]# tail -f /var/log/messages #提示没有libibverbs.so.1模块 Feb 29 17:24:23 node1 ovs-ctl: net_mlx5: cannot load glue library: libibverbs.so.1: cannot open shared object file: No such file or directory [root@node1 ~]# yum -y install libibverbs [root@node1 ~]# systemctl restart openvswitch
node2:
[root@node2 ~]# vim /etc/selinux/config SELINUX=permissive [root@node2 ~]# setenforce 0 [root@node2 ~]# getenforce Permissive [root@node2 ~]# vim /etc/yum.repos.d/openstack-train.repo [openstack-train] name=openstack-rocky baseurl=https://mirrors.aliyun.com/centos/7.7.1908/cloud/x86_64/openstack-train/ gpgcheck=0 gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 repo_gpgcheck=0 enabled=1 [root@node2 ~]# yum clean all [root@node2 ~]# yum makecache [root@node2 ~]# yum -y install openvswitch libibverbs [root@node2 ~]# yum -y install bridge-utils [root@node2 ~]# systemctl restart openvswitch [root@node2 ~]# systemctl status openvswitch
node1:
[root@node1 ~]# ovs-vsctl add-br br0 [root@node1 ~]# ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre option:remote_ip=172.16.100.68 [root@node1 ~]# brctl addif docker0 br0 [root@node1 ~]# brctl addif docker0 br0 [root@node1 ~]# ip link set dev br0 up [root@node1 ~]# ip link set dev docker0 up [root@node1 ~]# ip route del 172.18.0.0/16 via 172.16.100.68 [root@node1 ~]# ip route add 172.18.0.0/16 dev docker0 [root@node1 ~]# ip route show default via 192.168.204.2 dev ens37 proto dhcp metric 101 172.16.100.0/24 dev ens33 proto kernel scope link src 172.16.100.67 metric 100 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 172.18.0.0/16 dev docker0 scope link 192.168.204.0/24 dev ens37 proto kernel scope link src 192.168.204.135 metric 101 [root@node1 ~]# iptables -t nat -F [root@node1 ~]# iptables -F
node2:
[root@node2 ~]# ovs-vsctl add-br br0 [root@node2 ~]# ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre option:remote_ip=172.16.100.67 [root@node2 ~]# brctl addif docker0 br0 [root@node2 ~]# ip link set dev br0 up [root@node2 ~]# ip link set dev docker0 up [root@node2 ~]# ip route del 172.17.0.0/16 via 172.16.100.67 [root@node2 ~]# ip route add 172.17.0.0/16 dev docker0 [root@node2 ~]# ip route show default via 192.168.204.2 dev ens37 proto dhcp metric 101 172.16.100.0/24 dev ens33 proto kernel scope link src 172.16.100.68 metric 100 172.17.0.0/16 dev docker0 scope link 172.18.0.0/16 dev docker0 proto kernel scope link src 172.18.0.1 192.168.204.0/24 dev ens37 proto kernel scope link src 192.168.204.136 metric 101 [root@node2 ~]# iptables -t nat -F [root@node2 ~]# iptables -F
node1:
[root@node1 ~]# docker run --rm=true -it java /bin/bash
root@383f22fbeb91:/# ip addr show
1: 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
2: gre0@NONE: <NOARP> mtu 1476 qdisc noop state DOWN group default qlen 1000
link/gre 0.0.0.0 brd 0.0.0.0
3: gretap0@NONE: <BROADCAST,MULTICAST> mtu 1462 qdisc noop state DOWN group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
220: eth0@if221: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
root@383f22fbeb91:/#
node2:
[root@node2 ~]# docker run --rm=true -it java /bin/bash
root@149ae1c4c922:/# ip addr show
1: 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
2: gre0@NONE: <NOARP> mtu 1476 qdisc noop state DOWN group default qlen 1000
link/gre 0.0.0.0 brd 0.0.0.0
3: gretap0@NONE: <BROADCAST,MULTICAST> mtu 1462 qdisc noop state DOWN group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
node1:
root@383f22fbeb91:/# ping 172.18.0.2 PING 172.18.0.2 (172.18.0.2): 56 data bytes 64 bytes from 172.18.0.2: icmp_seq=0 ttl=63 time=0.977 ms 64 bytes from 172.18.0.2: icmp_seq=1 ttl=63 time=0.724 ms 64 bytes from 172.18.0.2: icmp_seq=2 ttl=63 time=1.958 ms ^C--- 172.18.0.2 ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.724/1.220/1.958/0.532 ms [root@node1 ~]# tshark -i ens33 ip proto gre Running as user "root" and group "root". This could be dangerous. Capturing on 'ens33' 1 0.000000000 172.17.0.2 -> 172.18.0.2 ICMP 136 Echo (ping) request id=0x000a, seq=95/24320, ttl=63 2 0.001374220 172.18.0.2 -> 172.17.0.2 ICMP 136 Echo (ping) reply id=0x000a, seq=95/24320, ttl=63 (request in 1) 3 1.002087969 172.17.0.2 -> 172.18.0.2 ICMP 136 Echo (ping) request id=0x000a, seq=96/24576, ttl=63 4 1.003074831 172.18.0.2 -> 172.17.0.2 ICMP 136 Echo (ping) reply id=0x000a, seq=96/24576, ttl=63 (request in 3) 4 packets captured
浙公网安备 33010602011771号