docker实现跨主机通信(使用静态路由方式)
Posted 小小白鸽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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集群化,资源合理使用
以上是关于docker实现跨主机通信(使用静态路由方式)的主要内容,如果未能解决你的问题,请参考以下文章
基于路由转发+iptables方式实现docker容器跨节点通信