docker实现跨主机通信(使用静态路由方式)

背景

为了合理分配资源,需要将多个服务器的docker容器里面的网络实现互通,如a服务器的docker中启动了服务a,b服务器的docker容器中的b服务需要调用a服务里面的接口。同时要保证不占用宿主机端口,就有了跨主机容器网络互通的需求。

准备

虚拟机a

ip: 192.168.101.150

虚拟机b

ip: 192.168.101.170

docker网卡初始化

分别对两台服务器中的docker创建网卡,分配ip地址范围为 10.20.0.0/16 10.21.0.0/16
虚拟机a

docker network create test --driver bridge --ipam-driver default --subnet 10.20.0.0/16

虚拟机b

docker network create test --driver bridge --ipam-driver default --subnet 10.21.0.0/16

设置静态路由

分别对虚拟机a,虚拟机b设置静态路由,实现虚拟机a可以直接访问虚拟机b的docker test网卡里面的容器,虚拟机b可以直接访问虚拟机a的docker test网卡里面的容器
虚拟机a

route add -net 10.21.0.0 netmask 255.255.0.0 gw 192.168.101.150
#开启路由转发
iptables -P FORWARD ACCEPT

虚拟机b

route add -net 10.20.0.0 netmask 255.255.0.0 gw 192.168.101.170
#开启路由转发
iptables -P FORWARD ACCEPT

测试网络互通

虚拟机a

虚拟机a启动nginx容器

docker run --name nginx --net=test -d nginx:alpine
docker exec -ti nginx sh

ip如下
在这里插入图片描述

虚拟机b

虚拟机b启动nginx容器

docker run --name nginx --net=test -d nginx:alpine
docker exec -ti nginx sh

ip如下
在这里插入图片描述

测试网络

虚拟机a-容器

ping虚拟机b的宿主机ip
在这里插入图片描述
ping虚拟机b的docker容器中nginx的ip
在这里插入图片描述
curl虚拟机b的docker容器中nginx
在这里插入图片描述

ping同虚拟机的docker容器中其他容器的ip
在这里插入图片描述
在这里插入图片描述

虚拟机b-容器

ping虚拟机a的宿主机ip
在这里插入图片描述
ping虚拟机a的docker容器中nginx的ip
在这里插入图片描述
curl虚拟机a的docker容器中nginx
在这里插入图片描述

清除测试数据

删除路由配置

服务器a

route del -net 10.21.0.0 netmask 255.255.0.0 gw 192.168.101.150

服务器b

route del -net 10.20.0.0 netmask 255.255.0.0 gw 192.168.101.170

删除docker网卡

服务器a

# 停掉启动的容器
docker rm -f nginx 
docker rm -f nginx1
docker network rm test

服务器b

docker rm -f nginx 
docker network rm test

写在后面

通过以上场景,就可以实现我们的局域网内的docker容器网络互通。如我们实现docker的cnm规范,然后将路由映射管理起来,则可以实现docker集群化,资源合理使用

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值