linux网络命名空间需要安装iproute-3**.rpm包
注:需要什么请查看帮助手册,常用的 ip help(管理网络),ip netns help(网络命名空间创建使用) , ip link help(虚拟网卡创建使用), ip addr help(虚拟网卡地址分配) 等等。从ip netns help 可以查看到 ip [-all] netns exec [name] cmd ...,这个命名可以对命名空间中的网卡进行设置。
1、创建网络命名空间,例如 ch
ip netns add ch
2、查看网络命名空间,
ip netns ls 或者 ip netns list
3、创建虚拟网卡Veth,Veth都是成对创建的,它都是成对出现的,就像一个管道的两端,从这个管道的一端的veth进去的数据会从另一端的veth再出来。也就是说,你可以使用veth接口把一个网络命名空间连接到外部的默认命名空间或者global命名空间,而物理网卡就存在这些命名空间里。例如 ch1.1和ch1.2
ip link add name ch1.1 type veth peer name ch1.2
4、查看虚拟网络Veth
ip link list 或者 ip link ls
5、将虚拟网卡ch1.1移动到网络命名空间ch上
ip link set ch1.1 netns ch
现在在使用ip link list 就已经看不到虚拟网卡ch1.1了,可以根据步骤6在ch中可以查看到
6、查看网络命名空间ch和查看网络命名空间网卡信息
ip netns exec ch ip link list
ip netns exec ch ip addr show
在ch中可以看到2个网卡,一个是回环网络lo 和 一个 ch1.1
7、给网络命名空间里面的虚拟网卡配置
ip netns exec ch ip addr add 10.1.1.1/24 dev ch1.1 --给ch1.1分配ip地址
ip netns exec ch ip link set ch1.1 up ---启动网卡
ip netns exec ch ip link set lo up --启动回环网卡
8、给ch1.2分配ip地址
ip addr add 10.1.1.2/24 dev ch1.2
9、启动ch1.2
ip link set ch1.2 up
10、从网络命名空间ch中测试到ch1.2的网络通不通
ip netns exec ch ping 10.1.1.2
Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定。
在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定ip是必须的。
我们可以创建自己的bridge网络 : mynet,创建容器的时候指定网络为mynet并指定ip即可。
查看网络模式
docker network ls
创建一个新的bridge网络
docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 mynet
查看网络信息
docker network inspect mynet
创建容器并指定容器ip
docker run -e TZ="Asia/Shanghai" --privileged -itd -h hadoop01.com --name hadoop01 --network=mynet --ip 172.18.12.1 centos /usr/sbin/init
运行容器
docker exec -it hadoop01 /bin/bash
通过本地客户端访问(通过创建容器时指定端口或配置独立ip)
docker run -e TZ="Asia/Shanghai" -p 6001:22 --privileged -itd -h hadoop01.com --name hadoop01 --network=mynet --ip 172.18.12.1 centos /usr/sbin/init
或
route -p add 172.18.12.0 MASK 255.255.255.0 10.0.75.2