docker 基础技术 — Network Namespaces

linux Namespaces 提供了进程的资源隔离机制。在 Namespaces 机制下,运行的进程感觉使用的系统资源是独享的。docker 的实现也充分利用了这一机制。Linux 提供了6种 Namespaces, 包括 Mount, PID, UTS, IPC, User, Network。本文主要介绍 Network Namespaces 。

Network Namespaces 命令行配置

可以用 ip 工具来设置 network namespaces。 增加一个网络命名空间

ip netns exec 可以在指定的命令空间下运行命令

我们看到当前 loop 设备是 DOWN 的状态,而且本地是不通的。

但是现在还不能与 root namespaces 进行通讯。需要通过 veth 虚拟的网络设备,进行连接起来。veth 设置类似于管道,数据从一头流入另一头。

可以看到,在 netns1 下面,veth1 作为虚拟的网络设备是 UP 状态,到 10.1.1.0 的默认路由会走 veth1。

网桥 bridge 类似于网络交换机,任何的真实或者虚拟的网络设备都可以与它连接。工具 brctl 来操作网桥。

此时在 netns1 中还无法 ping 通外网,先增加 dns server 试试。

在 netns1 中 ping 外网,原始地址是 10.1.1.0 的网段,需要进行 NAT 转换,以宿主机的地址作为源地址访问外网。

以上过程,也是 docker 网络配置的基础。

此条目发表在docker, Linux分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。