实现docker 容器跨主机互通。 推荐使用 overlay 网络类型。
什么是overlay网络
该overlay
网络驱动程序会在多个Docker守护进程主机之间创建一个分布式网络。这个网络位于特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)安全地通信。Docker透明地处理每个包与正确的Docker守护进程主机和正确的目标容器之间的路由。
当你初始化一个群或加入一个Docker主机到一个现有的群,将在该Docker主机上创建两个新网络
- 称为ingress的overlay网络,用于传递集群服务的控制或是数据消息,若在创建swarm服务时没有指定连接用户自定义的overlay网络,将会加入到默认的ingress网络。
- 一个名为的桥接网络
docker_gwbridge
,它将各个Docker守护程序连接到该集群中的其他守护程序。
可以使用docker network create创建自定义的overlay网络,容器以及服务可以加入多个网络,只有同一网络中的容器可以相互交换信息,可以将单一容器或是swarm服务连接到overlay网络中。
环境:
华东二区(上海)二台为:11.11.11.11 和 11.11.11.22
华东一区(杭州)一台为:11.11.11.33
在 搭建 阿里云dcoker 跨主机通信前。已在物理机集群上使用 docker swarm + overlay 成功解决了跨主机访问的问题。 本以为直接在阿里云上,再搭一次,应该不会有什么问题。 可事与愿违,最终无法在 阿里云集群服务器上,搭建docker 跨主机互通。
然后各种找资料, 使用了 consul + overlay ,也无法互通。
最后终于找到答案:
阿里云售后工程师 : 您好,vpc网络不支持自建vxlan,跟底层有冲突。
不推荐您自建集群,一是难度很高花费时间很大,二是自建有很多兼容性问题。而且自建的容器集群没有阿里云容器服务官方技术支持,只能自己在网上找资料解决。
建议您考虑用阿里云提供的容器服务来搭建集群,容器服务本身是免费的,只是集群关联的云资源是付费的,您可以建个免费的集群,把现有的ECS加到集群的节点里面直接使用,省去了您搭建、调试集群的步骤。
截图:
阿里员工 明确回答:vpc网络不支持的自建vxlan, 而docker overlay用了vxlan!
另外其他各大云服务器应该也是不行,有人测过腾讯云服务器也不行(这个我没验证!)。
docker swarm集群可以使用阿里云提供的容器服务(阿里云容器服务提供了docker swarm或k8s的集群服务),或者自己机房搭建!
至于自建k8s还没弄过暂时不清楚。
到此,我本以为,自建应该束手无策了。
但是,无意中,看到了阿里云一篇内网的 说明:
如果两台同地域的ECS实例之间需要传输数据,建议使用内网连接。云服务器ECS与云数据库、负载均衡以及对象存储之间也可以使用内网相互连接使用。
云服务器ECS内网间,非I/O优化的实例为千兆共享带宽,I/O优化的实例为万兆或25G共享带宽。由于是共享网络,因此无法保证带宽速度是不变的。
对于内网中的ECS实例:
- ECS实例的网络类型、所属账号、地域、安全组等都会影响内网通信。具体信息,如下表所示。
网络类型 所属账号 地域 安全组 如何实现内网互通 VPC(同一VPC) 同一账号或不同账号 同一地域 同一安全组 默认互通,也可以实现安全组内网络隔离。详情请参见安全组内网络隔离。 不同安