ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

docker之网络命名空间

2021-12-10 21:34:06  阅读:356  来源: 互联网

标签:00 ip 网络 veth test3 link ff 命名 docker


Docker之网络命名空间 原创

2019-12-02 14:54:08  

一.测试两个容器是否互通

1.先运行两个容器 test1 与test2
docker run -d  --name test1 busybox /bin/sh -c "while true; do sleep 3600; done"

docker run -d  --name test2 busybox /bin/sh -c "while true; do sleep 3600; done"

 

生成两个容器test1和test2,分别进入容器test1和test2,查看他们的ip地址

docker exec test1 ip a
docker exec test2 ip a

 

 

得到test1和test2的ip分别为172.17.0.2和172.17.0.3

我们在test1容器中执行

docker exec test1 ping 172.17.0.2

 

结果显示两个容器是可以互相通信的,

底层原理

通过下面这个图简单的理解一下:

image
简单来说,容器1中的网络命名空间(namespace1)和容器2中的网络命名空间(namespace2)通过一对叫做veth的东西(可以理解成接口)进行通信。

二.ip netns相关命令

1. 显示所有的虚拟网络命名空间

sudo ip netns list

也可通过查看/var/run/netns目录下的文件来list

ls /var/run/netns/

2. 增加虚拟网络命名空间test1

sudo ip netns add test1

3. 删除虚拟网络命名空间test1

sudo ip netns delete test1

4.进入虚拟机网络环境

ip netns exec net0 command


打开虚拟网络环境net0的bash窗口

ip netns exec net0 bash

显示所有虚拟网络环境的设备

ip addr

退出该网络虚拟环境

exit

5. 增加一对veth虚拟网卡

ip link add type veth

6. 将veth0添加到net0虚拟网络环境

ip link set veth0 netns net0

7.将虚拟网卡veth1改名并添加到net1虚拟网络环境中

ip link set dev veth1 name net1-bridge netns net1

8. 设置虚拟网络环境net0的veth0设备处于激活状态

ip netns exec net0 ip link set veth0 up

9. 为虚拟网络环境net0的veth0设备增加IP地址

ip netns exec net0 ip address add 10.0.1.1/24 dev veth0

三.实例(建立两个命名空间,并实现互相ping通)

1.先建立两个虚拟空间namespace,分别为test3和test4
sudo ip netns add test3
sudo ip netns add test4

 

 

查看当前虚拟网络空间

[root@localhost ~]# ip netns list
test4
test3

 

2.建立一对veth,分别命名为veth-test3 和veth-test4
sudo ip link add veth-test3 type veth peer name veth-test4

 

此时我们使用ip link命令查看一下当前宿主机中的信息:

[root@localhost ~]# ip link
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:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:88:4d:9e brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:fb:1c:42 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:fb:1c:42 brd ff:ff:ff:ff:ff:ff
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
    link/ether 02:42:eb:92:75:9a brd ff:ff:ff:ff:ff:ff
8: veth-test4@veth-test3: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether b2:05:0d:4e:a9:e4 brd ff:ff:ff:ff:ff:ff
9: veth-test3@veth-test4: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether e6:d8:aa:4d:67:6d brd ff:ff:ff:ff:ff:ff

 

可以看到,我们已经成功的创建了一对veth,veth-test4@veth-test3与veth-test3@veth-test4

3.将创建的veth分别添加到命名空间test3和test4

添加到test3与test4

sudo ip link set veth-test3 netns test3
sudo ip link set veth-test4 netns test4

 

 

在test3查看是否已经添加veth,在test3执行ip link,

[root@localhost ~]# sudo ip netns exec test3 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
9: veth-test3@if8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether e6:d8:aa:4d:67:6d brd ff:ff:ff:ff:ff:ff link-netnsid 1

 

 

在test4查看是否已经添加veth,在test4执行ip link,

[root@localhost ~]# sudo ip netns exec test4 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
8: veth-test4@if9: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether b2:05:0d:4e:a9:e4 brd ff:ff:ff:ff:ff:ff link-netnsid 0

 

此时创建的veth已经成功添加到了两个命名空间中。此时还需要最后两个步骤,一个就是给veth添加ip,另个就是让其状态置为UP

4.为veth添加ip地址
[root@localhost ~]# sudo ip netns exec test3 ip addr add 192.168.1.3/24 dev veth-test3
[root@localhost ~]# sudo ip netns exec test4 ip addr add 192.168.1.4/24 dev veth-test4

 

 

再次查看test3与test4的ip link状态

[root@localhost ~]# sudo ip netns exec test3 ip a
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
9: veth-test3@if8: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
    link/ether e6:d8:aa:4d:67:6d brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet 192.168.1.3/24 scope global veth-test3
       valid_lft forever preferred_lft forever
       
[root@localhost ~]#  sudo ip netns exec test4 ip a
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
8: veth-test4@if9: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether b2:05:0d:4e:a9:e4 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.1.4/24 scope global veth-test4
       valid_lft forever preferred_lft forever

 

发现ip地址已分别为其设置上

4.将test3与test4状态设置为UP
sudo ip netns exec test3 ip link set dev veth-test3 up
 sudo ip netns exec test3 ip link set dev veth-test4 up

 

5.测试两个命名空间是否已经可以ping通
 sudo ip netns exec test3 ping 192.168.1.4

 

结果,连接成功

[root@localhost ~]# sudo ip netns exec test3 ping 192.168.1.4
PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.
64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=0.232 ms
64 bytes from 192.168.1.4: icmp_seq=2 ttl=64 time=0.183 ms
64 bytes from 192.168.1.4: icmp_seq=3 

标签:00,ip,网络,veth,test3,link,ff,命名,docker
来源: https://www.cnblogs.com/cheyunhua/p/15673899.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有