




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Docker网络原理分析Docker使用linux的bridge和veth虚拟网络设备,以及network namespace对网络进行虚拟化。Bridge看其名字是网桥,但实际上它的功能和交换机(switch)相似。Veth则是一对网络接口,像是用一条网线连接起来的两块网卡。阅读这篇文章前,应该先了解linux的bridge和veth的原理和用法,熟悉brctl, ip, iptables三个重要命令的使用方法。一、Docker 经典网络架构:从上图可知,每个docker容器通过一对veth连入bridge br0。Veth的一端在docker netns中,通常改名为eth0;另一端在de
2、fault或global netns中,通常命名为vethXXXXXXXX。上图中将其命名为vnic11和vnic21。Bridge br0自带一个网络接口,相当于主机的一张网卡,它的名字也叫br0。上图相当于一个bridge br0连接了三台机器:host,docker1,docker2,它们形成了一个独立的LAN。而主机的eth0则将主机连接到外部的交换机,和交换上的其它主机形成一个LAN。现在配置网络的IP:Host的eth0:将主机连接到外部交换机。Ip=81/24, 主机的网关为 dev eth0。Host的br0网络接口: 将主机连接到内
3、部交换机br0。Ip=/16。注意,当同时为主机的eth0和br0设置IP时,它俩不能处于同一网段。Docker1的eth0:将docker1连接到交换机br0。Ip=00/16。Docker1 网关为。Docker2的eth0:将docker2连接到交换机br0。Ip=00/16。Docker2 网关为。这样docker1,docker2以及host所形成的LAN就配置好了,它的网段为/16。现在,docker1、docker2以及主机,这三台设备可以正常通信了。那么,docker1和docker
4、2如何才能访问host以外的世界呢?答案是NAT。也就是需要配置转发机制,在网络接口host:br0和host:eth0之间转发数据包。配置转发机制首先要开启linux的网络转发功能,然后要在iptables中配置SNAT源地址转换。上面就是docker默认使用的网络模式(-net=bridge)。Docker daemon一启动,就会创建bridge,不过名字叫做 docker0。并将网口docker0的IP配成了/16。以后每启动一个容器,就自动为该容器创建veth pair,将一端连到bridge docker0,将另一端放入容器内,改名为eth0。容器内的eth0的
5、ip配置为172.17.x.x/16,容器的网关配置为。下面,我们用命令一步一步创建该网络,以加深对docker网络原理的理解。1. 启动两个docker容器,不要让docker自动配置网络docker run itd -name=docker1 -net=none test/ubuntu:14 /bin/bashdocker run itd -name=docker2 -net=none test/ubuntu:14 /bin/bash2. 找到容器的netns,将其连接到/var/run/netns/下,以便为其配置网卡。先找到docker容器的PID:docker1P
6、id=$(docker inspect -format=.State.Pid docker1)docker2Pid=$(docker inspect -format=.State.Pid docker2)再将docker容器的net namespace链接到/var/run/netns/:mkdir /var/run/netns #如果没有该目录,先创建。ln s /proc/$docker1Pid/ns/net /var/run/netns/docker1nsln s / proc/$docker1Pid/ns/net /var/run/netns/docker2ns现在,就可以查看一下这两
7、个net namespace中的连接情况:ip netns exec docker1ns ip link list3. 创建网桥和虚拟网卡brctl addbr br0ip link add vnic11 type veth peer name vnic12ip link add vnic21 type veth peer name vnic22ip link list #查看所有link将vnic11和vnic21 attach到网桥br0:brctl addif br0 vnic11brctl addif br0 vnic214. 把vnic12和vnic22分别放入docker1ns和d
8、ocker2ns,并重命名为eth0ip link set vnic12 netns docker1nsip link set vnic22 netns docker2nsip netns exec docker1ns ip link set vnic12 name eth0ip netns exec docker2ns ip link set vnic22 name eth05. 为网口br0, docker1ns:eth0, docker2ns:eth0配置IPip addr add /16 dev br0ip netns exec docker1ns ip addr ad
9、d 00/16 dev eth0ip netns exec docker1ns ip link set eth0 upip netns exec docker1ns ip route add default via ip netns exec docker2ns ip addr add 00/16 dev eth0ip netns exec docker2ns ip link set eth0 upip netns exec docker2ns ip route add default via 注意,必须先激活网口,才能配置网关。
10、6. 启动所有网口ip link set br0 upip link set vnic11 upip link set vnic21 up至此,docker1,dockr2和主机可以相互通信了。7. 开启linux的转发功能:sysctl w net.ipv4.ip_forward=1,或者 echo 1 > /proc/sys/net/ipv4/ip_forward这样,当从br0收到包后,若目的地址不是host,则选择合适的网络接口(如eth0)发出去。从eth0收到包后,也会按一样的规则做转发处理。8. 配置SNAT, 将从docker来的包的源地址改为81i
11、ptables t nat A POSTROUTING s 00 j SNAT -to 81iptables t nat A POSTROUTING s 00 j SNAT -to 81至此,docker1和docker2就可以ping通host以外的世界了。可以尝试一下:docker attach docker1ping 85 #到你的LAN中的其它机器。要想暂时离开(detach)docker容器,连续按Ctrl+p, Ctrl+q。下次还可以attach。注意,不要用exit命令,exit会
12、关闭容器,前面为容器所做的修改都会消失。9. 配置DNAT, 将docker容器内的某个端口对外开放,允许主机外的程序访问docker容器内的服务:iptables t nat A PREROUTING d 81 p tcp -dport 8080 j DNAT -to 00:80至此,有人通过tcp协议访问81:8080时,如用浏览器访问81:8080,linux会将其映射到docker2的80端口,即00:80。二、将docker容器加入本地网络(和主机在同一网段192.168.1
13、.0/24)要将docker容器加入本地网络,即让docker容器和host处于同一网段(/24),需要把虚拟交换机(bridge br1)与外部交换级联,形成一个广播域。级联的方法是:把host:eth0直接attach到bridge br1。这样一来,host:eth0就不是host的有效网口了,故需要删除host:eth0的ip,而要把host的ip设到网口br1上。另外,host的网关也要用dev br1。按照上述网络拓扑,IP设置如下:host:eth0: 删除其IP,将其直接连接到网桥br1。br1网口:设置为eth0原来的IP,即81/
14、24。主机的网关还是,但访问外部的网口要换为br1。docker3:eth0:ip为85, 网关为。docker4:eth0:ip为86,网关为。下面,我们用命令一步一步创建该网络。1. 启动两个docker容器,不要让docker自动配置网络docker run itd -name=docker3 -net=none test/ubuntu:14 /bin/bashdocker run itd -name=docker4 -net=none test/ubuntu:14 /bin/b
15、ash2. 找到容器的netns,将其连接到/var/run/netns/下,以便为其配置网卡。先找到docker容器的PID:docker3Pid=$(docker inspect -format=.State.Pid docker3)docker4Pid=$(docker inspect -format=.State.Pid docker4)再将docker容器的net namespace链接到/var/run/netns/:mkdir /var/run/netns #如果没有该目录,先创建。ln s /proc/$docker3Pid/ns/net /var/run/netns/dock
16、er3nsln s / proc/$docker4Pid/ns/net /var/run/netns/docker4ns现在,就可以查看一下这两个net namespace中的连接情况:ip netns exec docker4ns ip link list3. 创建网桥和虚拟网卡brctl addbr br1ip link add vnic31 type veth peer name vnic32ip link add vnic41 type veth peer name vnic42ip link list #查看所有link将vnic31和vnic41 attach到网桥br1:brct
17、l addif br1 vnic31brctl addif br1 vnic414. 把vnic32和vnic42分别放入docker3ns和docker4ns,并重命名为eth0ip link set vnic32 netns docker3nsip link set vnic42 netns docker4nsip netns exec docker3ns ip link set vnic32 name eth0ip netns exec docker4ns ip link set vnic42 name eth05. 为网口docker3ns:eth0, docker4ns:eth0配置
18、IP和网关ip netns exec docker3ns ip addr add 83/24 dev eth0ip netns exec docker3ns ip link set eth0 upip netns exec docker3ns ip route add default via ip netns exec docker4ns ip addr add 84/24 dev eth0ip netns exec docker4ns ip link set eth0 upip netns exec docker4ns ip route add d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025临床执业医师经典例题(夺分金卷)附答案详解
- 发货快递合同(标准版)
- 保险公司保险合同(标准版)
- 2024公务员(国考)考前冲刺练习试题及完整答案详解(各地真题)
- 2025年智慧港口智能港口与城市协同发展报告
- 2025年康复医疗器械市场需求洞察与前沿产品创新策略报告
- 西藏自治区2025年初中学业水平考试历史试卷含答案
- 2025年传媒互联网行业市场前景及投资研究报告:AI应用新消费
- 巡察办工作流程课件
- DeepSeek技术赋能企业财务数字化转型的框架与策略
- 幕墙玻璃更换施工安全技术方案
- 2025年国内知名企业数据分析师岗位招聘面试题及答案
- 2025年地方病防治科地方病防控策略考核试卷答案及解析
- 型钢混凝土剪力墙剪力刚度精细评估与设计优化
- 《百分数与分数的互化》课件 2025-2026学年小学数学六年级上册 苏教版
- 2025中国人民抗日战争纪念馆招聘4人考试参考试题及答案解析
- 2025年山西省政府采购评审专家考试真题库(带答案)
- 2025年度太阳能光伏发电站基础地基旋挖钻孔灌注桩专业分包合同
- 北京暴雨洪涝灾害风险评估:基于多因素分析与案例研究
- 2025纪念中国人民抗日战争胜利80周年心得一
- 2025年高考语文全国一卷试题真题及答案详解(精校打印)
评论
0/150
提交评论