网络命名空间
Linux的Namespace(命名空间)技术是一种隔离技术,常用的Namespace有 user namespace, process namespace, network namespace等 在Docker容器中,不同的容器通过Network namespace进行了隔离,也就是不同的容器有各自的IP地址,路由表等,互不影响。:::info
准备一台Linux机器,会用到一个叫 brtcl 的命令,这个命令需要安装,如果是Ubuntu的系统,可以通过 apt-get install bridge-utils 安装;如果是Centos系统,可以通过 sudo yum install bridge-utils 来安装:::
创建bridge
sudo brctl addbr mydocker0
brctl show
准备一个shell脚本
脚本名字叫 add-ns-to-br.sh
#!/bin/bash
# 定义三个传入的变量
bridge=$1
namespace=$2
addr=$3
# 网线名
vethA=veth-$namespace
vethB=eth00-$namespace
# 创建 $namespace 网络空间
sudo ip netns add $namespace
# 连接 $vethA 和 $vethB
sudo ip link add $vethA type veth peer name $vethB
# $vethB 放入到 $namespace
sudo ip link set $vethB netns $namespace
# 配置 $vethB ip地址
sudo ip netns exec $namespace ip addr add $addr dev $vethB
# $vethB 开启
sudo ip netns exec $namespace ip link set $vethB up
# $vethA 开启
sudo ip link set $vethA up
# $vethA 添加到 $bridge
sudo brctl addif $bridge $vethA
脚本执行
把mydocker0这个bridge up起来
sh add-ns-to-br.sh mydocker0 ns1 172.16.1.1/16
sh add-ns-to-br.sh mydocker0 ns2 172.16.1.2/16
sudo ip link set dev mydocker0 up
验证
sudo ip netns list
sudo ip netns exec ns1 bash
ip a