《基于Kubernetes的容器云平台实战》——1.4.3 容器网络

举报
华章计算机 发表于 2019/06/02 00:21:13 2019/06/02
【摘要】 本书摘自《基于Kubernetes的容器云平台实战》——书中的第1章,第1.4.3节作者是陆平、左奇、付光、张晗、赵培、单良

1.4.3 容器网络

不得不说,容器网络是一个很大的话题,这里很难完全展开,下面仅仅对Docker中容器的构建方式进行简单的介绍。需要注意的是,这里描述的仅仅是Docker中的处理模式,并不代表容器网络只能采用这种方式构建,比如在Kubernetes中采用的就是另外一种模式。

从Docker命令行上已经知道,用户可以为新创建的容器指定主机名到IP的映射,能够设定DNS选项,能够设定容器内应用和宿主机上端口之间的映射关系,能够设定容器中网卡的IP地址、MAC地址和本地链路地址,可以通过指定别名的方式在容器中直接访问其他容器,可以指定none、bridge、host以及container:name形式的容器网络模式,还能够引用已经创建好的网络对象的名称。这些功能都是由内部的NetworkController来提供的。

这个内部控制器负责管理bridge、host、overlay等许多内置驱动,还能够通过HTTP接口管理插件形式的远程驱动,通过这些驱动创建出endpoint和network对象。每个endpoint可以理解为网卡,而network则可以包含多个endpoint,并包含更多的网络参数。控制器将endpoint包装到sandbox对象中,其中包含路由、DNS选项等全部内容,同时有唯一的ID。

Docker在创建容器时,先调用控制器创建sandbox对象,再调用容器运行时为容器创建网络命名空间。需要注意,控制器同时还暴露出一个UNIX Domain Socket的监听接口,在Docker调用容器运行时的请求中,已经包含了访问这个监听接口的命令作为容器创建完成之前的钩子命令。容器运行时在创建了容器但还没有启动它之前,会执行这个钩子命令,并且将容器pid等参数通过网络接口发送到控制器中。采用这种网络传输的方式,宿主机上即使有多个容器同时向控制器发送请求,控制器也是以串行的方式来执行。

控制器在接收到容器运行时的请求之后,就会通知驱动,将endpoint加入到容器pid对应的网络命名空间中,并为容器网络准备好其他资源。这样就为容器启动准备好了网络环境。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。