docker宿主环境中容器网络是怎么样的

这篇文章主要介绍了docker宿主环境中容器网络是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

10年积累的网站制作、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先制作网站后付款的网站建设流程,更有永修免费网站建设让你可以放心的选择与我们合作。

查看docker0 linux bridge:

在宿主机上运行如下命令,从这里面我们看到docker在host上的linux bridge device,另外这个bridge上attach了4个从设备。当然根据上一篇文章,这些从设备一定是veth pair device的一端,而另一端一定是在docker container的network namespace里。

brctl show

docker宿主环境中容器网络是怎么样的

查看veth pair从设备:

在宿主机上运行如下命令,从这里面我们看到在host的default network namespace中确实有4个attach到上面docker0 linux bridge上的设备。

ip addr|grep docker0

docker宿主环境中容器网络是怎么样的

查看docker容器:

在宿主机上运行如下命令,我们看到确实是有4个k8s pod容器在运行,根据上一篇文章,每个容器都有一个network namespace,所以也印证了上面命令中的docker0 bridge上attach的4个设备。这里有同学可能会有疑问,明明是8个容器,为什么说是4个呢?细心的同学应该观察出来了,另外4个都是同样的image。没错,这是因为在k8s中,每个pod都需要有infrastructure image的(在以前文章安装kubelet的时候我们通过启动参数--pod-infra-container-image配置过这个基础image),而k8s中这个基础image的container和我们应用程序的image的container是共用同一个network namespace的。所以在k8s的pod之中,infrastructure image产生的container和同一个pod中所有application image产生的container在同一个network namespace里,当然这里就是4个network namespace了。

docker ps

docker宿主环境中容器网络是怎么样的

进入容器的network namespace里:

这里我们在宿主机器上选择一个container,用以前文章介绍的kube-debug进入容器内部

kubectl get podsdocker pskubectl-debug deployment-nginx-app-69b6bbfd6d-8n69w --namespace default

docker宿主环境中容器网络是怎么样的

docker宿主环境中容器网络是怎么样的

查看容器内的veth设备:

在容器中运行以下命令,我们可以看到容器内确实有一个veth设备。根据以前文章,这个veth设备就是veth pair在容器的另一端,并且这一端的设备也是有ip地址的,ip地址就是container的ip地址。当然它的另一端是attach在宿主default namesapce中的docker0 bridge device里了。

ip -d link show

docker宿主环境中容器网络是怎么样的

查看容器内的路由表:

在容器中运行以下命令,我们可以看到容器network namesapce中的路由表信息。

  • 默认网关为10.1.27.1/32,其实就是host network namespace中的docker0 bridge的ip地址。

  • 对于10.1.27.0/24网络地址空间的访问都是直连访问,不需要下一跳ip地址。

route -n

docker宿主环境中容器网络是怎么样的

根据以上信息总结docker宿主中的网络:

  • 宿主中容器的网络地址空间一般为x.x.x.0/24,每一个container属于一个独立的network namespace。

  • 宿主的default network namespace中会有linux bridge,一般名字是docker0,其ip地址为x.x.x.1/32。

  • 每个container会有一个veth pair device对应,这个veth pair一端在container的network namespace中,有ip地址,并且这个ip地址就是容器的ip地址。veth pair的另一端attach到宿主network namespace中的linux bridge docker0上,以完成container network namespace和宿主network namespace之间的数据流动。

  • container的默认网关是x.x.x.1/32,也就是宿主network namespace中的linux bridge docker0的ip地址。

  • container到容器的网络地址空间(x.x.x.0/24)的访问方式为直连,不需要下一跳ip。

感谢你能够认真阅读完这篇文章,希望小编分享的“docker宿主环境中容器网络是怎么样的”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


网页名称:docker宿主环境中容器网络是怎么样的
文章URL:http://hbruida.cn/article/igihph.html