docker宿主环境中的容器网络是什么意思


这篇文章主要介绍了docker宿主环境中的容器网络是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在介绍docker宿主环境中的容器网络的时候我们先大致了解如下一些概念和知识:
LinuxNetwork NamespaceLinux Bridge DeviceLinux Veth Device
Linux Network Namespace:一提到linux网络,本质上就是由一系列组件组成,从而共同协作完成网络功能,一般这些组件包括:linux网络设备:例如network interface device,loop back device,bridge device,veth device,tun/tap device,vxlan device,ip tunnel device等等。这些设备可以完成网络数据包的收发,以及提供额外的修改数据包等功能。linux路由表,arp表,fdb(forwarding database)等:路由表提供三层ip包的路由寻址功能,arp表提供ip对应的二层mac地址,fdb在在基于mac转发的功能里提供mac地址对应的网络接口。linux协议栈:完成对网络协议包的封装与解析,例如二层ethernet包,三层ip包,四层tcp/udp包,还有类似icmp包等等。linux iptable:iptable基于linux内核模块netfilter,完成对于linux的firewall管理,例如控制ingress与engress,nat地址转换,端口映射等等。linux network namespace就像是一个可以相互隔离的组一样,把网络设备,路由表,协议栈,iptable等组件包装起来,然后通过namespace来相互隔离,互不干扰。所以更具体的说,网络设备,路由表,协议栈,iptable等是工作在某一个linux network namespace下的。而我们平时看到的linux主机的网卡,路由表,arp表,协议栈,iptable都是工作在主机的默认网络命名空间下,下图用来表述linux network name 香港云主机space:当然linux不仅仅只有network namespace用来进行网络隔离,还有pid namespace用来隔离进程,user namespace用来隔离用户,mount namespace用来隔离挂载点,ipc namespace用来隔离信号量和共享内存等,uts namespace用来隔离主机名和域名。再结合上linux cgroup控制组,用来限制资源,例如cpu,memory,io等。这些基础知识构成了容器的底层实现,有兴趣的同学可以研究一下linux namespace,cgroup,ufs等基础知识,你会发现docker等容器技术都是基于这些实现的。Linux Bridge网桥:Bridge是一种linux网络设备,可以附加attach多个linux从设备。大家可以把linux bridge想象成二层交换机,可以进行二层数据包的广播,但是注意的是linux bridge设备可以有自己的ip地址。也就是说,多个linux网络设备attach到一个bridge上,那么这些网络设备的ip地址将会失效(只有二层功能),当一个设备收到数据包的时候,bridge会把数据包转发到其它所有attach到bridge上的从设备,从而实现广播的效果。下图用来表述linux bridge:Linux Veth设备:
Veth设备总是成对出现,它的特点是会有一对peer,两个端点,数据包从一个peer流入,总是可以从另一个peer流出。而且veth pair是可以跨linux network namespace的,这个特性很重要。玄外之音,因为network namespace本质就是相互隔离的,可以用veth来做到数据包的跨network namespace的访问。当然是一个peer在一个namespace里,另一个peer在另一个namespace里了。下图用来表述linux veth pair设备:docker宿主环境中的容器网络:有了以上知识基础,当讲到这里的时候,其实就已经比较清晰了。对于docker宿主环境中容器的网络一般是:
每一个container都有一个network namespace,然后拥有container自己的网络设备,路由表,arp表,协议栈,iptable等,各个container的network namespace相互隔离。在宿主的default netwok nemespace中会有一个linux bridge设备,一般名称为docker0。每一个container对应一个veth pair设备,这个设备的一端在container的network namespace里,另一端attach到宿主networkwork namespace的docker0 linux bridge上。这样在宿主环境里,就好像有一个二层交换机(docker0 bridge),把宿主内的所有container连接起来。所以,在宿主内的container都是可以直接相互访问的,而且是直连的方式。下图用来表述宿主环境中的容器网络:感谢你能够认真阅读完这篇文章,希望小编分享的“docker宿主环境中的容器网络是什么意思”这篇文章对大家有帮助,同时也希望大家多多支持开发云,关注开发云行业资讯频道,更多相关知识等着你来学习!

相关推荐: javascript中怎么实现数组拍平

javascript中怎么实现数组拍平,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先是第一种方法,递归处理,代码如下:执行结果为:上面这这种方法比较中规中矩,代码详解见注释,下…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/17 18:12
下一篇 08/17 18:12

相关推荐