问题:
    
   
    
     创建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网络原理。
    
   
 
