veth连接network namespace
简介
网络命令空间可以给进程提供一个隔离的网络栈(网络设备,路由表,防火墙,/proc/net等)。
进程默认继承父进程的network namespace,也就是一般进程都是继承了系统初始进程(pid=1)的network namespace。
虚拟设备veth用来连接不同network namespace,功能有点像网线连接不同的设备。
连通network namespace
用veth虚拟设备连接两个network namespace
ip netns help
#创建两个network namespace
ip netns add test0
ip netns add test1
ls -l /var/run/netns/
#查看命令空间test1的网络地址
[root@k8snode1 netns]# ip netns exec test0 ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
#添加虚拟设备对veth
ip link add type veth
[root@k8snode1 scripts]# ip link
1:...
2:...
3: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 7e:85:4b:5a:af:b1 brd ff:ff:ff:ff:ff:ff
4: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 8e:d3:af:21:4b:d0 brd ff:ff:ff:ff:ff:ff
#将veth设备放入网络命令空间
ip link set veth0 netns test0
ip link set veth1 netns test1
#配置veth设备ip地址
ip netns exec test0 ip link set veth0 up
ip netns exec test0 ip addr add 10.0.1.10/24 dev veth0
ip netns exec test0 ip addr
ip netns exec test1 ip link set veth1 up
ip netns exec test1 ip addr add 10.0.1.11/24 dev veth1
ip netns exec test1 ip addr
#测试连通性
[root@k8snode1 scripts]# ip netns exec test0 ping -c 3 10.0.1.11
PING 10.0.1.11 (10.0.1.11) 56(84) bytes of data.
64 bytes from 10.0.1.11: icmp_seq=1 ttl=64 time=0.038 ms
64 bytes from 10.0.1.11: icmp_seq=2 ttl=64 time=0.015 ms
64 bytes from 10.0.1.11: icmp_seq=3 ttl=64 time=0.010 ms
#删除test0会导致veth0被删除,veth1也会跟着被删除
用bridge连接不同的namespace
实际应用中,将veth一端连接network namespace,另一端连接bridge,bridge的作用类似物理设备交换机。
#创建bridge
ip link add brtest type bridge
ip link set dev brtest up
ip netns add test0
ip netns add test1
#t0用于连接test0和brtest,t1用于连接test1和brtest
ip link add t0 type veth
ip link add t1 type veth
#连接veth设备的一端到network namespace
ip link set dev veth0 netns test0
ip link set dev veth1 netns test1
#连接veth设备的另一端到brtest
ip link set dev t0 master brtest
ip link set dev t0 up
ip link set dev t1 master brtest
ip link set dev t1 up
#配置network namespace内的veth设备的ip地址
ip netns exec test0 ip link set veth0 up
ip netns exec test0 ip addr add 10.0.1.10/24 dev veth0
ip netns exec test0 ip addr
ip netns exec test1 ip link set veth1 up
ip netns exec test1 ip addr add 10.0.1.11/24 dev veth1
ip netns exec test1 ip addr
#测试连通性
[root@k8snode1 scripts]# ip netns exec test0 ping -c 3 10.0.1.11
PING 10.0.1.11 (10.0.1.11) 56(84) bytes of data.
64 bytes from 10.0.1.11: icmp_seq=1 ttl=64 time=0.035 ms
64 bytes from 10.0.1.11: icmp_seq=2 ttl=64 time=0.024 ms
64 bytes from 10.0.1.11: icmp_seq=3 ttl=64 time=0.021 ms
总结
ip netns ls
ip netns add netnsname
ip netns exec netnsname command
ip addr help
ip link help
ip link add brname type bridge
#连接devname到bridge设备
ip link set dev devname master bridgename
参考
- man ip-netns

浙公网安备 33010602011771号