Docker集群网络的配置和使用

时间:2024-05-21 20:31:49

总结

当我们开始使用Docker时,典型的配置是在某个机器上创建一个独立的应用程序。

在大多数情况下,在一台机器上运行所有的应用程序通常是不实际的,这种情况下,您将需要一种方法来跨许多机器分发应用程序。

这就是Docker集群所提供的功能。

Docker Swarm提供集群、可扩展性、发现和安全性等功能。在本文中,我们将创建一个基本的群集配置,并执行一些测试来说明docker的发现和连通性。

在这个演示中,我们将创建一个Docker集群,它将由一个集群管理器和一个Worker组成。为了方便起见,它将在AWS上运行。

体系架构

我们的目标架构将由运行在不同EC2主机上的AWS AMI映像中的几个Docker容器组成。这些示例的目的是演示如何使用Docker群集发现运行在不同主机上的服务并相互通信的概念。

 

Docker集群网络的配置和使用

 

在上面的Docker集群网络中,我们描述了Docker群管理器和几个Docker Worker之间的相互连接。在接下来的示例中,为了降低复杂性和成本,我们将使用一个管理器和一个Worker。请记住,您的实际配置可能由许多Docker Worder组成。

下面是一个潜在用例的示例。AWS负载均衡器,配置为将负载分配给运行在两个或多个EC2实例上的Docker群。

Docker集群网络的配置和使用

 

我们将在下面的示例中展示如何创建Docker群集网络,该网络将允许成员的DNS发现并允许成员之间进行通信。

先决条件

我们假设您对Docker有些熟悉,并且熟悉在AWS中设置EC2实例。

如果你对AWS不自信或想要稍微复习一下,请阅读以下文章:

Provision a free tier EC2 instance

Configure Docker on your EC2 instance

一些AWS服务将产生费用,所以请确保停止和/或终止您不使用的任何服务。此外,考虑设置账单警报,以警告您的收费太多。

配置

首先创建两个(2)EC2实例,然后在每个EC2实例上安装Docker。请参阅Docker支持的平台一节,了解Docker安装指南和实例说明。

以下是AWS开放端口以支持Docker Swarm和我们的端口连接测试:

在AWS Mule SG开放端口

Docker集群网络的配置和使用

 

对于我们的示例,我们将使用以下IP地址描述节点1和节点2:

Node 1: 10.193.142.248

Node 2: 10.193.142.246

在开始之前,让我们先看看现有的Docker网络。

Docker 网络

docker network ls

如果您从未在这个Docker守护进程上添加过网络或初始化过群集,那么网络列表的输出应该至少与下面的列表相似。

其他网络也可以显示。

Docker网络列表的结果:

Docker集群网络的配置和使用

 

从节点1,我们开始初始化群集。

创建 Swarm 主节点

docker swarm init --advertise-addr=10.193.142.248

您应该得到如下所示的响应。我们将使用提供的token将其他节点连接到群集。

swarm 初始化响应结果

Swarm initialized: current node (v9c2un5lqf7iapnv96uobag00) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-5bbh9ksinfmajdqnsuef7y5ypbwj5d9jazt47urenz3ksuw9lk-227dtheygwbxt8dau8ul791a7 10.193.142.248:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

根CA证书需要一到两分钟才能在群集中同步,因此,如果出现错误,请等几分钟后,然后再试一次。

如果您碰巧放错了令牌,您可以使用join-tokenargument为manager和worker列出令牌。

例如,在节点1上运行以下命令:

Manager Token for Node 1

docker swarm join-token manager

接下来,让我们把节点2加入群集。

Node 2 Joins Swarm

docker swarm join --token SWMTKN-1-5bbh9ksinfmajdqnsuef7y5ypbwj5d9jazt47urenz3ksuw9lk-227dtheygwbxt8dau8ul791a7 10.193.142.248:2377

This node joined a swarm as a worker.

从群集主节点1,我们现在可以看到连接的节点

在主节点, 列出所有节点

docker node ls

Results of Listing Nodes

Docker集群网络的配置和使用

 

另外,请注意,已经创建了一个Ingress网络,这为我们的群集网络提供了一个入口点。

Results of Docker Network Listing

Docker集群网络的配置和使用

 

让我们继续为单独容器创建集群网络。

Overlay Network Creation on Node 1

docker network create --driver=overlay --attachable my-overlay-net

docker network ls

Results of Docker Network Listing

Docker集群网络的配置和使用

 

运行我们的容器,加入 Overlay 网络

docker run -it --name alpine1 --network my-overlay-net alpine

Node 2加入 overlay网络, 我们使用打开端口 8083来测试我们在运行容器的连通性。

运行容器, 加入 Overlay 网络

docker run -it --name alpine2 -p 8083:8083 --network my-overlay-net alpine

验证我们的Overlay网络连通性

通过我们的容器运行,我们可以测试我们可以使用群集配置的DNS发现我们的主机。从节点2,让我们ping一下Nod 1容器。

Node 2 Pings Node 1, Listens on Port 8083

ip addr # show our ip address

ping -c 2 alpine1

# create listener on 8083

nc -l -p 8083

从节点1LetsPing节点2容器并连接到端口8083上它的open Listener

Node 1 Pings Node 2, Connect to Node 2 Listener on Port 8083

ip addr # show our ip address

ping -c 2 alpine2

# connect to alpine2 listener on 8083

nc alpine2 8083

Hello Alpine2

^C

在这里,您创建了从节点1到节点2的tcp连接,并发送了一条消息。类似地,在Docker overlay集群中运行时,您的服务可以连接和交换数据。

有了这些基本的构建块,您就可以将这些原则应用到实际的设计中了。

Cleanup

测试完成后,我们可以清理群配置。

Remove Node 2 Swarm

docker container stop alpine2

docker container rm alpine2

docker swarm leave

Remove Node 1 Swarm

docker container stop alpine1

docker container rm alpine1

docker swarm leave --force

这就是我们创建DockerOverlay网络的简单示例。通过简单的示例,可以创建更大、更复杂的Docker容器集群网络。

请确保删除在这些示例中可能使用的AWS资产,这样就不会产生任何持续的成本。

请关注公众号:程序你好