Docker系列5:网络名称空间管理

网友投稿 277 2022-10-30

Docker系列5:网络名称空间管理

一、ip命令介绍

ip命令是iproute软件的程序

[root@host1 ~]# yum install iproute -y  [root@host1 ~]# rpm -q iproute iproute-4.11.0-25.el7_7.2.x86_64

通过ip可以实现管理网络名称空间

[root@host1 ~]# ip Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }        ip [ -force ] -batch filename where  OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |                    tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |                    netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |                    vrf }        OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |                     -h[uman-readable] | -iec |                     -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |                     -4 | -6 | -I | -D | -B | -0 |                     -l[oops] { maximum-addr-flush-attempts } | -br[ief] |                     -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |                     -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}

OBJECT中的netns可以用来设置网络名称空间

netns的使用帮助如下

[root@host1 ~]# ip netns help Usage: ip netns list        ip netns add NAME        ip netns set NAME NETNSID        ip [-all] netns delete [NAME]        ip netns identify [PID]        ip netns pids NAME        ip [-all] netns exec [NAME] cmd ...        ip netns monitor        ip netns list-id

二、ip命令的使用

创建两个名称空间并查看一下

[root@host1 ~]# ip netns add r1 [root@host1 ~]# ip netns add r2

[root@host1 ~]# ip netns list r2 r1

查看网络名称空间中有几个网卡

其实就是在网络名称空间中执行ip addr命令,需要加选项-a在网络名称空间执行命令是用exec

[root@host1 ~]# ip netns exec r1 ip addr 1: lo:  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

创建网卡对

用的命令是ip link

[root@host1 ~]# ip link help Usage: ip link add [link DEV] [ name ] NAME                    [ txqueuelen PACKETS ]                    [ address LLADDR ]                    [ broadcast LLADDR ]                    [ mtu MTU ] [index IDX ]                    [ numtxqueues QUEUE_COUNT ]                    [ numrxqueues QUEUE_COUNT ]                    type TYPE [ ARGS ]

创建一对网卡,两端分别为veth1.1和veth1.2

[root@host1 ~]# ip link add name veth1.1 type veth peer name veth1.2 [root@host1 ~]# ip link show | grep veth1.* 7: veth1.2@veth1.1:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 8: veth1.1@veth1.2:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

type veth:指定创建的是虚拟以太网卡

为名称空间分配虚拟网卡

用的命令是ip link set一旦将某个虚拟网卡分配到某个名称空间,在物理机中就看不到这个网卡了

将veth1.1保留在物理机,将veth1.2分配到r1名称空间

[root@host1 ~]# ip link set veth1.2 netns r1

[root@host1 ~]# ip netns exec r1 ip addr 1: lo:  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 7: veth1.2@if8:  mtu 1500 qdisc noop state DOWN group default qlen 1000     link/ether 4e:f2:68:33:47:a1 brd ff:ff:ff:ff:ff:ff link-netnsid 0

[root@host1 ~]# ip link show | grep veth1.* 8: veth1.1@if7:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

也可以修改虚拟网卡的名称,例如将r1中的veth1.2改名为eth0

[root@host1 ~]# ip netns exec r1 ip link set dev veth1.2 name eth0

[root@host1 ~]# ip netns exec r1 ip addr 1: lo:  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 7: eth0@if8:  mtu 1500 qdisc noop state DOWN group default qlen 1000     link/ether 4e:f2:68:33:47:a1 brd ff:ff:ff:ff:ff:ff link-netnsid 0

将veth1.1地址设置为10.0.0.1/8,将r1中的eth0地址地址设置为10.0.0.2/8

[root@host1 ~]# ip addr add 10.0.0.1/8 dev veth1.1

[root@host1 ~]# ip netns exec r1 ip addr add 10.0.0.2/8 dev eth0

[root@host1 ~]# ip addr show veth1.1 8: veth1.1@if7:  mtu 1500 qdisc noop state DOWN group default qlen 1000     link/ether 1e:62:af:a2:bc:6d brd ff:ff:ff:ff:ff:ff link-netnsid 1     inet 10.0.0.1/8 scope global veth1.1        valid_lft forever preferred_lft forever         [root@host1 ~]# ip netns exec r1 ip addr show eth0 7: eth0@if8:  mtu 1500 qdisc noop state DOWN group default qlen 1000     link/ether 4e:f2:68:33:47:a1 brd ff:ff:ff:ff:ff:ff link-netnsid 0     inet 10.0.0.2/8 scope global eth0        valid_lft forever preferred_lft forever

此时两个网卡都是down状态,解决方法如下

[root@host1 ~]# ip link set veth1.1 up [root@host1 ~]# ip netns exec r1 ip link set eth0 up

也可以将veth1.1放入另一个名称空间,这样两个名称空间就可以通信了

[root@host1 ~]# ip link set veth1.1 netns r2 [root@host1 ~]# ip netns exec r2 ip link set veth1.1 up

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Springboot yml Map List读取方式
下一篇:含有JTAG Debug接口模块的CPU提高下载速度
相关文章

 发表评论

暂时没有评论,来抢沙发吧~