云原生基座DCE开放容器实践(一)

刘海峰
发布于 2021-04-16 10:02:22阅读数 188
network namespace 是linux内核提供的用于实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,一个独立的网络空间内的防火墙、网卡、路由表、邻居表、协议栈都是独立的。

随着云计算的普及,越来越多的企业开始将业务,尤其是核心业务向云原生的环境迁移,容器技术也越来越多用在企业生产中。这一趋势下滴普科技打造了企业级多云/混合云容器服务平台—DCE。一是为解决公司内部项目多,基础设施资源利用率低的问题,二是降低K8s学习成本,让公司开发人员快速学习并上手应用部署工作。

在我们探索Kubernetes过程中,我们的刘海峰架构师分享了很多关于Kubernetes的学习知识。以下专题文章就讲述了Kubernetes关于容器网络接口(CNI)这部分内容。希望对正在学习Kubernetes的同学有所帮助。

network namespace 是linux内核提供的用于实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,一个独立的网络空间内的防火墙、网卡、路由表、邻居表、协议栈都是独立的。不管是虚拟机还是容器,当运行在独立的命名空间时,就像是一台单独的主机一样。

下面会通过一些例子来说明网络命名空间,以加深理解,会用到iproute2工具包的ip命令,请各位先自行安装,并且使用root权限操作。

在centos下执行如下命令:

img

验证安装完成:

img

创建网络命名空间

ip命令中用于操作网络命名空间的命令是ip netns,用help来查看一下子命令有哪些:

img

常用的也就是增删查命令,先来创建一个网络空间空间ns1:

img

查看当前所有的网络命名空间:

img

在这有些人可能会很困惑,我主机上明明运行中好几个docker容器,按理说每个容器都运行在独立的网络命名空间,怎么这里没有列出来?不要着急,下面会提到。

先来感觉一下什么叫独立的网卡,独立的路由表,要查看ns1命名空间的网卡,iproute2工具提供了命令ip netns exec ns1,跟在这个命令后面的命令都会在这个网络命名空间中执行。

先查看一下主机的网卡和路由表:

img

再看看ns1中的网卡和路由表:

img

这样执行命令有点麻烦,也可以简单一点:

img

用exit可以回到主机的默认空间

img

ip netns add的原理

当我们在主机上执行ip netns add ns1后 ,实际是在/var/run/netns下创建了一个ns1的文件:

img

下面的命令可以模拟ip netns add ns2 && ip netns exec ns2 bash

img

从上面的示例可以看出,创建命名的 network namespace 其实就是创建一个文件,然后通过绑定挂载的方式将新创建的 network namespace 文件和进程的/proc/self/ns/net文件绑定。

查看容器的网络命名空间

接下来该回答上面的遗留问题,为什么当我在主机上ip netns list的时候看不到docker的网络命名空间,因为ip netns list的时候只会显示在/var/run/netns下的文件,而docker的文件默认是创建在/var/run/docker/netns下的,所以我们可以通过ls /var/run/docker/netns来显示当前的所有容器的网络命名空间,并且通过nsenter --net=/var/run/docker/xxx来进入容器的网络命名空间。

img

如果想查看具体某个docker容器对应的文件,可以用:

img

注意如果是k8s拉起来的docker,要拿非hostNetwork=true的pause容器来看,如果hostNetwork=true,那么下面的值为/var/run/docker/netns/default,这是主机的默认网络命名空间,如果不是pause容器,那么下面的值为空,因为只有pause容器会创建一个新的网络命名空间,其它container都只是加入这个网络命名空间。(这个SandboxKey大家先记着,后面写cni组件时还会提到这个值)

img

还有另一个办法:

img

这个小技巧在我们调试pod的网络时非常有用,大多数时候pod里面自带的工具非常少,没有curl没有telnet,这时候用这个技巧先进入空器的网络空间,再执行命令就行了,因为只是切了网络命名空间,其它还在主机上,所以用的工具也全是主机的工具。

更多信息欢迎关注滴普科技官网 www.deepexi.com

喜欢 2
0

推荐阅读

暂无内容

圈子

马上开启数字化升级之旅
立即免费试用,或直接与我们的解决方案专家沟通,了解和评估 DEEPEXI 如何帮助您的团队更进一步。
联系我们
专人在线为您服务
联系我们
专属顾问免费为您提供专业服务
建议反馈
您的建议,让我们更进一步
客服微信

客服微信

售前咨询电话

400 8279 010