温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-11-18 09:51:29 来源:亿速云 阅读:130 作者:小新 栏目:大数据

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

查看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宿主环境中容器网络是怎么样的”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI