博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
『中级篇』 Linux网络命名空间(25)
阅读量:7097 次
发布时间:2019-06-28

本文共 3330 字,大约阅读时间需要 11 分钟。

原创文章,欢迎转载。转载请注明:转载自,谢谢!

原文链接地址:

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

源码下载
  • 里面的No.2
  • 通过vagrant 启动2个node
#共享插件需要的vbox需要vagrant plugin install vagrant-vbguestvagrant up复制代码
  • 创建容器,演示network-namespace

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

vagrant ssh docker-node1sudo service docker restartsudo 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/ship a#test1的网络ip是172.17.0.2 复制代码

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

1: lo: 
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 forever5: eth0@if6:
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/ship a#test1的网络ip是172.17.0.3 复制代码
1: lo: 
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 forever7: eth0@if8:
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复制代码
  • 发现空间之前是独立的,容器内的网络命名空间和容器外不同,容器和容器之前的网络命名空间也是相对独立的。
exitip a复制代码
了解命令
  • 查看networknamespace列表
sudo ip netns list复制代码
  • 删除networknamespace
sudo ip netns delete 名称复制代码
  • 添加networknamespace
sudo ip netns add 名称复制代码
创建linux的networknamespace。
sudo ip netns listsudo ip netns add test3sudo ip netns listsudo ip netns delete test3sudo ip netns listsudo ip netns add test1sudo ip netns add test2sudo 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 upsudo 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-test2sudo ip link 复制代码
image.png

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

sudo ip link set veth-test1 netns test1sudo ip netns exec test1 ip linksudo ip link set veth-test2 netns test2sudo ip netns exec test2 ip linksudo ip link复制代码

添加ip地址

sudo ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-test1sudo ip netns exec test2 ip addr add 192.168.1.2/24 dev veth-test2sudo ip netns exec test1 ip linksudo ip netns exec test2 ip link#虽然添加了ip地址但是不显示,这是为什么?因为需要把这2个端口都启动起来sudo ip netns exec test1 ip link set dev veth-test1 upsudo ip netns exec test2 ip link set dev veth-test2upsudo ip netns exec test1 ip linksudo ip netns exec test2 ip linksudo ip netns exec test1 ip asudo ip netns exec test2 ip a复制代码

是否互通

sudo ip netns exec test1 ping 192.168.1.2sudo ip netns exec test2 ping 192.168.1.1复制代码

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

你可能感兴趣的文章
【更新】超文本打印编辑工具TRichView V16.15发布 | 附下载
查看>>
Oracle Enterprise Linux 6.4安装Oracle Database 12c RAC图文详细教程
查看>>
我的友情链接
查看>>
常用监控命令总结
查看>>
zabbix-agent监控多核CPU
查看>>
虚拟化--022 esxi由于快照问题无法加到vc上
查看>>
基于ssm的开发 项目持续开发中
查看>>
Memcached存储session
查看>>
springboot添加支持jsp
查看>>
cdh5 HDFS的Federated Nameservices(联盟命名空间)介绍
查看>>
学习Bootstrap知识记录点①
查看>>
activiti工作流表
查看>>
jqery easyui
查看>>
Windows 服务如何设置为多个用户可以远程登录
查看>>
VectorDraw Developer Framework v7.7014.0.2发布,全场6.6折!
查看>>
WPF界面控件Essential Studio for WPF发布2017 v4版本
查看>>
详谈自由软件的本质
查看>>
CentOS 使用二进制部署 Kubernetes 1.13集群
查看>>
分布式队列神器 Celery
查看>>
idea 创建maven web项目
查看>>