实验要求
掌握利用Docker实现跨主机容器互连的方法。
实验准备
要求实验主机能够连接外网,已经正确安装Docker,并关闭防火墙和selinux,各主机配置信息如表所示
表 主机配置信息表
主机名 | IP地址/子网掩码 | 容器名 | 容器IP地址 |
node1 | 你的ip/24 | node1_busybox | 172.100.0.10 |
node2 | 另一台机器的ip/24 | node2_busybox | 172.100.1.10 |
学习步骤
步骤1:在node1节点上创建自定义网桥,为其分配网段172.100.0.0/24。
[root@node1 ~]# docker network create --subnet=172.100.0.0/24 node1-br0
[root@node1 ~]# docker network inspect node1-br0 // 查看自定义网桥详细信息
步骤2:在node1节点上建立容器,并设置容器的IP地址为172.100.0.10/24。
[root@node1 ~]# docker run -it --net=node1-br0 --ip=172.100.0.10 --name node1-busybox busybox:latest
/ # ip address
// 利用ip address命令查看容器的IP地址为172.100.0.10
测试node-busybox容器与node1节点的连通性。
容器和结点是连通的
步骤3:在node2节点上创建自定义网桥,为其分配网段172.100.1.0/24。
[root@node2 ~]# docker network create --subnet=172.100.1.0/24 node2-br0
[root@node2 ~]# docker network inspect node2-br0 // 查看自定义网桥详细信息
步骤4:在node2节点上建立容器,并设置容器的IP地址为172.100.1.10/24
[root@node2 ~]# docker run -it --net=node2-br0 --ip=172.100.1.10 --name node2-busybox busybox:latest
/ # ip address
测试node2-busybox容器与node2节点的连通性。
/ # ping -c 4 172.100.1.1
// 显示结果表明和node2节点是连通的
再测试node1节点上的node1-busybox容器与node2节点上的node2-busybox容器与是否可以连通。在node1节点上进行测试。
/ # ip address
/ # ping -c 4 172.100.1.10 // 在node1节点上的node1-busybox容器中测试
进入node结点
// 可以看到两个容器不能相互连通。
步骤5:在node1节点和node2节点上配置路由表和iptable规则。node1节点上执行以下命令。
[root@node1 ~]# ip route add 172.100.1.0/24 via 你的ip dev ens33
[root@node1 ~]# iptables -P INPUT ACCEPT
[root@node1 ~]# iptables -P FORWARD ACCEPT
[root@node1 ~]# iptables -F
[root@node1 ~]# iptables -L -n
在node2节点上执行以下命令。
[root@node2 ~]# ip route add 172.100.0.0/24 via 192.168.5.101 dev ens33
[root@node2 ~]# iptables -P INPUT ACCEPT
[root@node2 ~]# iptables -P FORWARD ACCEPT
[root@node2 ~]# iptables -F
[root@node2 ~]# iptables -L -n
步骤6:再次测试node1节点上的node1-busybox容器与node2节点上的node2-busybox容器与是否可以连通。在node1节点上进行测试