实现 docker 跨主机通信(Swarm版)

本文将在云服务器之间实现基于 Swarm 集群的 Overlay 网络,以达到跨主机通信的目的。

概念解析

Docker 的安装教程非常之多,这里不再赘述。

Swarm 是 Docker 官方提供的容器编排工具之一,用于管理多个 Docker 主机上运行的容器。它允许将多个 Docker 主机组成一个集群,并通过统一的接口来管理这些主机上的容器。Swarm 提供了高可用性、伸缩性和容错性,使得在生产环境中部署和管理容器化应用变得更加简单和可靠。

Overlay 网络是 Docker 提供的一种网络模型,采用了多种技术来实现容器间的通信,其中包括了本文中将使用的 VXLAN(Virtual Extensible LAN)技术,VXLAN 可以将容器的数据包封装在 UDP 数据包中,并在底层网络中传输,从而实现跨主机的容器通信。

环境配置

节点名 节点IP 节点服务
dnode0 10.0.0.11 安装 Docker,并初始化Swarm集群
dnode1 10.0.0.12 安装 Docker
dnode2 10.0.0.13 安装 Docker

配置三台机器,请注意修改hostname为不同的值(本文将分别设置为 dnode0、dnode1、dnode2),防火墙放行如下端口:

  • TCP端口2376 用于安全的 Docker 客户端通信,这是 Docker Machine(被用来编排Docker的主机)正常工作所必需的。
  • TCP端口2377 用于 Docker Swarm 或集群中节点之间的通信,只需要在管理节点上打开。
  • UDP端口4789 用于覆盖网络流量(容器入口网络)。
  • TCP和UDP端口7946 用于节点之间的通信(容器网络发现)。

初始化Swarm集群服务

dnode0节点上执行以下命令来初始化 Swarm 集群。

docker swarm init

如果没有记住加入集群的token,以下可以重新获取。

docker swarm join-token worker

其他节点分别加入Swarm集群

确保将token替换为实际获得的值,并将IP地址替换为dnode0节点的IP地址。

docker swarm join --token tokenxxxxxxx 10.0.0.11:2377

在主节点上创建overlay网络

创建一个名为ovnet的 overlay 网络,其中包括了一个子网范围为10.0.2.0/24,并指定网关为10.0.2.1

docker network create --driver overlay --subnet=10.0.2.0/24 --gateway=10.0.2.1 --attachable ovnet

测试跨主机网络连通性

分别在不同的节点上创建一个附加到ovnet网络的临时容器,它们将可以在 Swarm 集群中的不同节点上互相通信。

docker run -it --rm --network ovnet --ip 10.0.2.5 alpine
docker run -it --rm --network ovnet --ip 10.0.2.6 alpine
docker run -it --rm --network ovnet --ip 10.0.2.7 alpine

接下来,可以在已经打开的临时容器中,尝试使用 ping 10.0.2.x 命令测试网络连通性。

文章作者: 若海; 原文链接: https://www.rehiy.com/post/285/; 转载需声明来自技术写真 - 若海

添加新评论