云与虚拟化_实验8 利用Docker实现容器互连

主机名IP地址/子网掩码容器名容器IP地址
node-a192.168.59.128/24node1_busybox172.100.0.10
node-b192.168.59.130/24node2_busybox172.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

通啦

最后修改:2023 年 11 月 23 日
如果觉得我的文章对你有用,请随意赞赏