linux删除docker0网卡,给网络命名空间增加或删除网卡(容器通用)
上次学习了网络命名空间,那么如何进入容器的命名空间呢?
运行的容器都对应一个PID,每个PID都有自己的命名空间。在/proc/[pid]/ns目录下包含该进程所属的 namespace信息。
首先namespace文件都是链接文件。链接文件的内容格式为xxx:[inode number]。其中的xxx为namespace的类型,inode number则用来标识一个namespace。如果两个进程的某个namespace文件指向同一个链接文件,说明相关资源在同一个namespace中,比如同一个pod中容器的net命名空间是同一个,即使1个pod一个容器,在pod运行主机上docker ps可以看到2个容器,这两个容器是同一net命名空间,这是k8s pod的特色。
其次/proc/[pid]/ns 里放置这些链接文件的另外一个作用是,一旦这些链接文件被打开,只要打开的文件描述符(fd)存在,那么该namespace下的所有进程都已结束,这个namespace也会一直存在,后续的进程可以复用。问题来了,怎么向容器中添加一个网卡或者删除一个网卡呢?
网络命名空间一文中看很简单,ip netns show查到一台主机上的网络命名空间, ip link set {网卡名字} netns {网络命名空间}执行下即可。网卡名字可以是主机上的网卡名字,也可以是虚拟出来的网卡名字(如veth设备)。
但事实上linux下的网络命名空间除了/proc/[pid]/ns下的,用命令根本查不到。这是为什么呢?
原来是Linux下默认(包括docker,docker容器也是一个pid)把创建的网络命名空间链接文件隐藏起来了,导致ip netns命令无法读取。
恢复任意pid的netns
获取容器的进程号:docker inspect 容器名称 | grep Pid 或者docker inspect -f '{{.State.Pid}} 容器id或容器名称
将进程网络命名空间恢复到主机目录:ln -s /proc/{Pid}/ns/net /var/run/netns/某容器的命名空间,这里的容器命名空间的名字自己任意定义,只是做个软链接。如果/var/run/netns目录不存在,以root用户手动创建目录。
然后执行ip netns命令查看看该容器的网络命名空间。
ip link set {网卡名字} netns {网络命名空间}
网络命名空间为容器的则为容器添加网卡(记得手工和配置ip)。
从网络命名空间test01中删除一个网卡eth0到另一个网络命令空间test02:
ip netns exec test01 ip link set eth0 netns test02
从网络命名空间test01中删除一个网卡eth0到Linux上默认的网络命令空间:
ip netns exec test01 ip link set eth0 netns $$
ip netns exec test01 ip link set eth0 netns {Linux主机上某pid,以父进程id 1为例}
ps:不实践不知道,原来Linux主机上默认的网络命名空间不是default和global,预测是要做软连接的。还好ip link set {网卡名字} netns {网络命名空间},这其中的网络命名空间可以指定pid即可。
删除软连接:rm -rf /var/run/netns/某容器的命名空间
实际操作中一点感悟:原本通过eth0的ip ssh登录着,将Linux主机上的eth0网卡设置加入自己创建的一个网络命名空间后,ssh登录断开了。回想起来,ssh进程和Linux主机网卡eth0在同一个网络命名空间下,当将网卡命名空间换了后,Linux主机上就看不到这个网卡了,网络就不通了。
再抛出个问题:为何Linux下网络命名空间被隐藏了?
命名空间都有有一个inode节点,相对来说隐藏起来不会误删除。
查询命名空间的使用场景比较少,一般谁去查命名空间呢。
也有可能先有命名空间,后有的ip netns。
ip netns show查命名空间从/var/run/netns/这个目录下读取的,pid下的网络命名空间可以是相同的,65536个pid的网络命名空间个数不定,如果ip netns show一个一个递归去查,有可能比较慢。参考
linux删除docker0网卡,给网络命名空间增加或删除网卡(容器通用)相关推荐
- mysql 删除创建表分区_创建,增加,删除mysql表分区
1.测试添加分区和删除分区 ###添加删除range分区 (1)创建一个分区: CREATE TABLE titles ( emp_no INT NOT NULL, title ...
- 计算机一级考试ppt知识点,2020年计算机一级MsOffice考试考点解析:增加和删除幻灯片...
[导语]2020年计算机一级考试备考模式已开启,为了方便考生及时有效的备考,下面无忧考网为您精心整理了2020年计算机一级MsOffice考试考点解析:增加和删除幻灯片,供大家的关注.如想获取更多计算 ...
- 一级计算机基础演示文稿,计算机一级计算机基础及MSOffice应用辅导:在演示文稿中增加和删除幻灯片...
在演示文稿中增加和删除幻灯片 通常,演示文稿由多张幻灯片组成,创建空白演示文稿时,自动生成一张空白幻灯片,当一张幻灯片编辑完成后,还需要继续制作下一张幻灯片,此时需要增加新幻灯片.在已经存在的演示文稿 ...
- Linux 网络命名空间
虚拟网络基础 bridge TAP 设备与 VETH 设备 netns 网络命名空间 虚拟网络创建 iproute2 创建新的网络命名空间 显示所有的虚拟网络命名空间 进入虚拟网络环境 设置虚拟网络环 ...
- linux中的网络命名空间的使用
背景 项目中使用了网络命名空间,用来隔离不同空间中的应用. 命名空间的使用,类似虚拟化技术,在同一台物理机上,创建的多个命名空间相互独立,各个空间的进程独立运行,互不干扰. 在此作一总结,学习加深理解 ...
- linux网络命名空间详解,Linux Network Namespace (netns) 详解
Linux Network Namespace (netns) 详解 Network Namespace (以下简称netns)是Linux内核提供的一项实现网络隔离的功能,它能隔离多个不同的网络空间 ...
- linux网络命名空间详解,『中级篇』 Linux网络命名空间(25)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』 Linux网络命名空间(25) docker底层技术,非常重要的关于namespace,network的names ...
- Linux 命令之 ifconfig -- 配置和显示网卡的网络参数
文章目录 一.命令介绍 二.常用选项 三.参考示例 (一)显示网络设备信息(激活状态的) (二)启动关闭指定网卡 (三)显示所有配置的网络接口,不论其是否激活 (四)显示第一个物理以太网卡 eth0 ...
- python做一个linux网卡,Linux系统Python可以选择不同网卡进行网络访问吗?
是这样的,我有一台远程的Linux服务器(Debian系统),上面有两块网卡,同样的IP. 我现在需要选择第二块网卡,因为这块网卡连上了CMCC的专线,可以进行一些CMCC的业务操作.但是默认的使用的 ...
最新文章
- python中if elif语句优化_python – 最有效的方式做一个if-elif-elif-else语句当else做的最多?...
- 基于 HTML5 Canvas 的交互式地铁线路图
- GPIO几种配置的作用
- boost::pfr模块ops相关的测试程序
- php - preg_match
- [css] 使用css实现霓虹灯效果
- redis创建像mysql表结构_Redis数据结构列表实现
- 甘肃民族师范学院计算机科学系,甘肃民族师范学院计算机科学与技术专业2016年在甘肃理科高考录取最低分数线...
- 蔚来ES8正式交付售价46.8万元起 与Model系相比扛打吗?
- 深入理解全局编录服务器GC
- Linux oracle中文乱码的问题解决
- “bim”技术助力“智慧城市”建设
- 在MongoDB中实现聚合函数
- 数据库关键字搜索查询html,在所有数据库中搜索关键字
- 阿里ai布局开始_如何从AI开始?
- 中国专利申请CPC客户端软件问题解决方案
- 会声会影 html5,一文了解会声会影哪个版本比较好用
- 机器学习基础知识之概率论基础详解
- 百度、谷歌、亚马逊、微软神同步:被盯上的智能语音排位赛
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)