在本章中,我们将了解微服务如何与 Consul 协作。我们还将学习以下组件如何影响 Consul。

  • 使用 Docker
  • 构建 Registrator 进行服务发现
  • 使用 rkt 和 Nomad

现在让我们详细讨论每一个。

使用 Docker

在开始之前,请不要在生产环境中使用此设置,因为它仅用于演示目的。Docker 是一种基于容器的服务,通过它我们可以轻松部署我们的应用程序。为了使用 Consul,我们将使用以下链接中的镜像——

https://hub.docker.com/r/progrium/consul/

假设您的系统已经安装并正确配置了 Docker。让我们尝试通过运行以下命令从 Docker Hub 拉取镜像:

$ docker pull progrium/consul

输出如下图所示。

Consul - 集成微服务 - 图1

我们将以如下方式发布一些接口及其端口(使用 Docker 的 -p 选项)。

  • 8400 (RPC)
  • 8500 (HTTP)
  • 8600 (DNS)

同时根据拉取的镜像,我们将主机名设置为 node1。您可以使用 -h 标志 并指定您自己的主机名来更改它,如下所示。

$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul -server -bootstrap

输出如下图所示。

Consul - 集成微服务 - 图2

您还可以使用以下命令启用 Consul 的 UI 模式:

$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul -server -bootstrap -ui-dir /ui

您可以在 http://localhost:8500 上查看基于 UI 的输出。以下截图为您提供了有关基于 UI 输出的更好了解。

Consul - 集成微服务 - 图3

要在不同节点上的各个 Docker 容器上使用 Consul,我们可以在不同节点上运行以下命令:

在 Node1 上

$ docker run -d —name node1 -h node1 progrium/consul -server -bootstrap-expect 3

其中,-bootstrap-expect 3 表示 consul 服务器将等待直到有 3 个节点连接后才自我引导并成为一个工作集群。

在继续之前,我们需要通过检查容器来获取容器的内部 IP。为了我们的用例,我们将声明 $JOIN_IP

$ JOIN_IP = “$(docker inspect -f ‘{{.NetworkSettings.IPAddress}}’ node1)”

在 Node2 上

因此,让我们启动 Node2,并告诉它使用上面程序中声明的变量加入 Node1。

$ docker run -d —name node2 -h node2 progrium/consul -server -join $JOIN_IP

在 Node3 上

$ docker run -d —name node3 -h node3 progrium/consul -server -join $JOIN_IP

构建 Registrator 进行服务发现

Registrator 通过在容器上线时检查容器,自动注册和注销任何 Docker 容器的服务。我们将要使用的 Registrator 目前支持可插拔的服务注册表,包括 Consul、EtcdSkyDNS2。当我们在网络上与不同服务交互时,强烈推荐使用 Registrator。

$ docker pull gliderlabs/registrator:latest

输出如下图所示。

Consul - 集成微服务 - 图4

$ docker run -d \ —name = registrator \ —net = host \ —volume = /var/run/docker.sock:/tmp/docker.sock \ gliderlabs/registrator:latest \ consul://localhost:8500

输出如下图所示。

Consul - 集成微服务 - 图5

您收到的输出是您刚刚启动的 Docker 容器的 ID。您可以使用以下命令检查容器是否正在运行:

$ docker ps -a

输出如下图所示。

Consul - 集成微服务 - 图6

您还可以使用以下命令查看 Registrator 的日志。

$ docker logs registrator

使用 rkt 和 Nomad

rkt 是另一种基于容器的服务,您可以在您的环境中使用。它由 CoreOS 构建。构建 rkt 的主要原因是为了提高安全性,这是 Docker 在 2013-14 年开发期间面临的一个关键问题。

对于 Consul,我们可以使用 Rkt Registrator 进行服务发现。此特定的 Registrator 项目目前正在开发中,不建议用于生产级别

您可以通过进入其路径并运行以下命令来检查是否安装了 rkt。

$ ./rkt

您可以检查输出以确认是否正确安装,如下图所示。

Rkt Registrator

要尝试使用 rkt 和 Consul,请查看——https://github.com/r3boot/rkt-registrator

Nomad 工具

Nomad 是一个用于管理机器集群并在其上运行应用程序的工具。它类似于 MesosKubernetes。默认情况下,Nomad 在其内部包含 Docker 和 rkt 驱动程序。因此,如果您正在寻找使用 Consul 进行大规模容器部署,Nomad 可能是一个不错的解决方案。更多关于 Nomad 的信息,请查看——https://www.nomadproject.io/docs/drivers/rkt.html