『中级篇』 Linux网络命名空间(25)

docker底层技术,非常重要的关于namespace,network的namespace看看到底是怎么回事。

源码下载
  • 通过vagrant 启动2个node
#共享插件需要的vbox需要
vagrant plugin install vagrant-vbguest
vagrant up
  • 创建容器,演示network-namespace

shell命令的方式,循环一小时执行一次

vagrant ssh docker-node1
sudo service docker restart
sudo docker run -d --name test1 busybox /bin/sh -c "while true; do sleep 3600;done"
sudo docker run -d --name test2 busybox /bin/sh -c "while true; do sleep 3600;done"

启动了2个容器,test1,test2,进入这2个容器查看各自的ip地址

sudo docker exec -it test1 /bin/sh
ip a
#test1的网络ip是172.17.0.2 

其实这块就是一个网络命名空间

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    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
sudo docker exec -it test2 /bin/sh
ip a
#test1的网络ip是172.17.0.3 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
#在test2上ping下test1的namespace发现一个情况,可以ping通
ping 172.17.0.2
  • 发现空间之前是独立的,容器内的网络命名空间和容器外不同,容器和容器之前的网络命名空间也是相对独立的。exit ip a
了解命令
  • 查看networknamespace列表
sudo ip netns list
  • 删除networknamespace
sudo ip netns delete 名称
  • 添加networknamespace
sudo ip netns add 名称
创建linux的networknamespace。
sudo ip netns list
sudo ip netns add test3
sudo ip netns list
sudo ip netns delete test3
sudo ip netns list
sudo ip netns add test1
sudo ip netns add test2
sudo ip netns list
sudo ip netns exec test1 ip a

在test1里面执行ip a 这个操作,lo这个回管口没有ip地址,而且现在的状态是DOWN

#
sudo ip netns exec test1 ip link set dev lo up
sudo ip netns exec test1 ip a

想让test1的lo,状态变成UP,结果发现UNKNOWN,因为端口是需要成双才可以UP起来的,也就是说需要一对才可以up起来。

#####做个实验,按照下面这个图

让test1 和test2 链接起来,类似网络,现在本身test1 和test2 已经有自己的网口了,但是还需要一根网线,领一个口插进去,成对出现完成test1和test2的互通。

Veth将2个口链接起来,创建一对接口,让如namespace里面,配置ip地址

创建veth 说白了就是创建一根网线,有2个头但是在一根线上 veth-test1 和veth-test2

创建 veth-test1 和 veth-test2

sudo ip link add veth-test1 type veth peer name veth-test2
sudo ip link 
image.png

将 veth-test1 添加到test1中,veth-test2 添加到test2中

sudo ip link set veth-test1 netns test1
sudo ip netns exec test1 ip link
sudo ip link set veth-test2 netns test2
sudo ip netns exec test2 ip link
sudo ip link

添加ip地址

sudo ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-test1
sudo ip netns exec test2 ip addr add 192.168.1.2/24 dev veth-test2
sudo ip netns exec test1 ip link
sudo ip netns exec test2 ip link
#虽然添加了ip地址但是不显示,这是为什么?因为需要把这2个端口都启动起来
sudo ip netns exec test1 ip link set dev veth-test1 up
sudo ip netns exec test2 ip link set dev veth-test2up
sudo ip netns exec test1 ip link
sudo ip netns exec test2 ip link
sudo ip netns exec test1 ip a
sudo ip netns exec test2 ip a
image.png

是否互通

sudo ip netns exec test1 ping 192.168.1.2
sudo ip netns exec test2 ping 192.168.1.1
image.png

PS:通过linux做的个实验跟通过docker创建的容器的是类似的,只是用linux的方式模拟了docker容器的方式。其实docker容器的原理就是围绕这linux底层的网络命名空间的原理实现的。


image

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

Linux 定时任务引发的大问题

问题描述 昨天一台开发服务器出现了很奇怪的问题,项目网站无法访问,ssh登录时非常慢,半分钟才进去,在命令行敲命令几乎没有反应,要耐心的等待 进去后用 to...

3298
来自专栏应兆康的专栏

【腾讯云的1001种玩法】如何利用腾讯云搭建个人网盘( Seafile )

在这个数据爆炸的时代,大部分人已经离不开个人云服务了,针对信息量超大的这回各种网盘已经扑面而来,但是,现大多数网盘均停止服务。本文分享了如何利用腾讯云搭建Sea...

3.1K6
来自专栏liulun

5分钟开发一个简单的基于HTML5的移动应用

首先写一个config.xml 代码如下: <?xml version="1.0" encoding="UTF-8"?> <widget xmlns = "ht...

1758
来自专栏不止是前端

Docker:Windows下部署MySQL

34713
来自专栏猿天地

hbuilder发布IOS采坑记录

APP开发完成后就得上线啦,在上线过程中遇到了一些问题,在这边记录下: 安卓这块没什么大的问题,主要就是不同的应用市场都会要求下载他们的加固工具进行加固操作,...

30010
来自专栏KID的专栏

【腾讯云的1001种玩法】从购买服务器到建站,从0打造自己的网络领地

记得当年我萌生出要建立一个自己的网站的时候,在网络上搜索了很多教程,但是都不怎么能看懂,于是建站这个事情折腾了我很长的时间。在学习了很多知识之后,我终于能够熟练...

2.4K2
来自专栏张戈的专栏

启用某些Linux发行版的root帐号

跟了我 5 年多的本本已步入花甲,CPU 严重老化,运行 Windows 异常吃力,于是考虑换成 Linux 试试。忙活了一天,测试了 2 个“家用”Linux...

3544
来自专栏zhangdd.com

gitlab 403 forbidden 并发引起ip被封问题解决方法

1084
来自专栏linux运维学习

linux学习第六十篇:Linux监控平台介绍,zabbix监控介绍,安装zabbix,忘记Admin密码如何做

Linux监控平台介绍 常见开源监控软件:cacti、nagios、zabbix、smokeping、open-falcon等等 cacti、smokeping...

3474
来自专栏技术博文

SSDB 配置文件

SSDB 的配置非常简单, 附带的 ssdb.conf 你不用修改便可以使用. 如果你要高度定制, 还是需要修改一些配置的. 下面做介绍. SSDB 的配置文件...

2565

扫码关注云+社区