云与虚拟化_实验8 利用Docker实现容器互连
主机名 | IP地址/子网掩码 | 容器名 | 容器IP地址 |
---|---|---|---|
node-a | 192.168.59.128/24 | node1_busybox | 172.100.0.10 |
node-b | 192.168.59.130/24 | node2_busybox | 172.100.1.10 |
1. 需要两个虚拟机
克隆一个OVO
具体的机子:
- node-a
- node-b
#修改克隆机子的主机名
vim /etc/hostname
reboot
查看IP地址
ip addr
我这里两个机子的IP:
- 192.168.59.128 node-a
- 192.168.59.130 node-b
步骤1-4
node-a上创建网桥和容器
# 创建自定义网桥,并分配网段172.100.0.0/24
docker network create --subnet=172.100.0.0/24 node1-br0
# 查看网桥信息
docker network inspect node1-br0
# 启动一个容器,并设置IP地址为172.100.0.10/24
docker run -itd --net=node1-br0 --ip=172.100.0.10 --name node1_busybox busybox
# 查看容器的IP
docker exec -it node1_busybox ip addr
# 测试容器和网桥是否能通
docker exec -it node1_busybox ping -c 4 172.100.0.1
node-b 上创建网桥和容器
# 创建自定义网桥,并分配网段172.100.1.0/24
docker network create --subnet=172.100.1.0/24 node2-br0
# 查看网桥信息
docker network inspect node2-br0
# 启动一个容器,并设置IP地址为172.100.1.10/24
docker run -itd --net=node2-br0 --ip=172.100.1.10 --name node2_busybox busybox
# 查看容器的IP
docker exec -it node2_busybox ip addr
# 测试容器和网桥是否能通
docker exec -it node2_busybox ping -c 4 172.100.1.1
测试两个容器之间是否可以相通
结果应该是不通!
node-a
docker exec -it node1_busybox ping -c 4 172.100.1.10
node-b
docker exec -it node2_busybox ping -c 4 172.100.0.10
蚌埠,通了,真蚌埠住了(因为这个公网IP,主机开了tun的网卡,然后就通了)
关掉tun网卡:
这样是正常的:
然后这个通了(但通的是一个美国的机子,这次实验的ip是公网IP,172的IP只有部分(0-31)是公网):
步骤5
在node-a节点和node-b节点上配置路由表和iptable规则。
把iptables全部清除了之后加了个路由表。
node-a
#添加路由表
ip route add 172.100.1.0/24 via 192.168.59.130 dev ens33
# 清除iptables规则,并设置默认策略为接受
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n
node-b
ip route add 172.100.1.0/24 via 192.168.59.128 dev ens33
# 清除iptables规则,并设置默认策略为接受
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n
步骤6 再次测试node1节点上的node1-busybox容器与node2节点上的node2-busybox容器与是否可以连通。在node1节点上进行测试。
ping -c 4 172.100.1.10
PING 172.100.1.10 (172.100.1.10): 56 data bytes
64 bytes from 172.100.1.10: seq=0 ttl=62 time=12.601 ms
通啦