腾讯云 Lighthouse 服务器 Docker 容器跨主机通信

10次阅读

共计 1584 个字符,预计需要花费 4 分钟才能阅读完成。

之前一直在向大家介绍基于 k3s 实现的腾讯云 Lighthouse 集群使用方法,也有声音表示 k8s 太重了,能不能更轻量一些?答案当然是:可以!

今天,本文将探讨如何利用腾讯云 Lighthouse 服务器,在 Docker 应用镜像上创建一个 Swarm 集群的,并实现容器跨主机通信的能力。

概念解析

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 集群

在其他节点上执行加入 Swarm 集群的命令。假设已经获得了加入集群的token,然后在各节点上执行如下命令:

docker swarm join --token SWMTKN-1-tokenxxxxxxx 10.0.0.11:2377

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

在节点上创建网络

在 Swarm 集群中,可以创建 overlay 网络以实现容器间的跨主机通信。在主节点上执行以下命令:

docker network create --driver overlay --subnet=172.22.0.0/24 --gateway=172.22.0.1 --attachable ovnet

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

测试跨主机网络连通性

在各个节点上创建容器,这些容器可以在 overlay 网络上互相通信。在各节点上执行如下命令:

docker run -it --rm --network ovnet --ip 172.22.0.5 alpine
docker run -it --rm --network ovnet --ip 172.22.0.6 alpine
docker run -it --rm --network ovnet --ip 172.22.0.7 alpine

这些命令将分别在 overlay 网络上创建了三个容器,它们分别具有 IP 地址为 172.22.0.5172.22.0.6172.22.0.7,并且它们可以在 Swarm 集群中的不同节点上互相通信。

文章思路来自 若海の技术写真,有问题请留言。

正文完
 0