问题:
创建docker swarm集群后,准备分析其网络架构。
在Manager node上找到了相关的network命令空间(ip netns命令),但是worker node却没有
,导致找不到对应的虚拟网卡。如下图所示:
网卡veth0bf6865的对端接口索引为9,但是我怎么也找不到索引为9的接口
,ip netns命令也不显示内容。于是就思考是否有是ip netns出错?果然,找到本文答案。
解决方案:
查过资料才发现,ip netns 只能查看到
/var/run/netns
下面的网络命名空间
。而docker默认是放在/var/run/docker/netns/的,所以ip netns命令无显示。解决方案是:在
/var/run/netns
目录创建指向各个命令空间的软链接。
方法一:
查看docker容器的PID,然后在proc文件中找到其namespace文件,建立软链接。
ln -s /proc/70212/ns/net /var/run/netns/64d492488661
也可以使用inspect的-f参数
+ Go
模板(不懂):
pid=`docker inspect -f '{{.State.Pid}}' 64d492488661`
[root@oceansvn01 ~]<20181115 09:30:01># echo $pid
70212
[root@oceansvn01 ~]<20181115 09:30:01># ln -s /proc/$pid/ns/net /var/run/netns/64d492488661
方法二:
直接为
docker的每个命名空间文件(目录为/var/run/docker/netns/)建立软链接
。如下:
然后就可以用ip netns exec命令查看各个命名空间的接口了。
总结
遇到问题多多思考,总能找到其中的猫腻。接下来笔者将分析docker使用的vxlan网络原理。