专栏首页编程坑太多『中级篇』 Linux网络命名空间(25)
原创

『中级篇』 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网络命名空间(25)

    PS:通过linux做的个实验跟通过docker创建的容器的是类似的,只是用linux的方式模拟了docker容器的方式。其实docker容器的原理就是围绕这l...

    IT故事会
  • 『中级篇』数据持久化之bind Mounting(35)

    PS:bind mount 需要指定 host 文件系统的特定路径,这就限制了容器的可移植性,当需要将容器迁移到其他 host,而该 host 没有要 moun...

    IT故事会
  • 『中级篇』docker容器安装wordpress(37)

    PS:大家想一想,类似这种的应用可能需要2个,也有可能需要3个4个,这样的操作是不是很繁琐,我们的希望这样的多个容器形式一个组group,统一化管理,一起安装,...

    IT故事会
  • 『中级篇』 Linux网络命名空间(25)

    PS:通过linux做的个实验跟通过docker创建的容器的是类似的,只是用linux的方式模拟了docker容器的方式。其实docker容器的原理就是围绕这l...

    IT故事会
  • IT人永远不老?做梦!老程序员价值何在?

    IT人永远不老?做梦!怎么可能?无论你现在是多么风华正茂,青春洋溢,终有成熟、老去的那天。

    顶级程序员
  • 一天一大 leet(不同的二叉搜索树 II)难度:中等-Day20200721

    这道题和之前的一道不同的二叉搜索树差不多了,只是之前只需要输出种类数,本题需要输出二叉树

    前端小书童
  • Js电子时钟

    梨涡浅笑
  • 网络防御系统中WAF的主要功能是什么?

    现在的网络攻击衍变的越来越多样化以及复杂化,所谓魔高一尺道高一丈,网络防护的技术策略也越来越强。今天我们就主要讲讲防御系统中的 WAF是什么,其主要功能是什么?...

    墨者盾
  • 关于Jvm知识看这一篇就够了

    2016年左右的时候读了周志明《深入理解Java虚拟机:JVM高级特性与最佳实践》,读完之后受益匪浅,让我对Java虚拟机有了一个完整的认识,这是Jvm书籍中最...

    纯洁的微笑
  • 【tensorflow2.x】对应的keras版本

    参考:https://docs.floydhub.com/guides/environments/

    绝命生

扫码关注云+社区

领取腾讯云代金券