Consul - 使用微服务
在本章中,我们将了解微服务如何与 Consul 配合使用。我们还将了解以下组件如何影响 Consul。
- 使用 docker
- 构建服务发现注册器
- 使用 rkt 和 Nomad
现在让我们详细讨论一下这些。
使用 Docker
开始之前,请不要在生产中使用此设置,因为它仅用于演示目的。Docker 是一种基于容器的服务,我们可以使用它轻松部署我们的应用程序。对于使用 Consul,我们将使用以下链接中的图像 –0
https://hub.docker.com/r/progrium/consul/。
假设您的系统已安装并正确配置了 Docker。让我们尝试从 Docker hub 拉取镜像,通过运行以下命令 −
$ docker pull progrium/consul
输出将如以下屏幕截图所示。

我们将以以下方式发布一些接口及其端口(在 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 启用 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 的输出。

为了在不同节点上的各种 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
构建用于服务发现的注册器
注册器自动注册并通过检查上线的容器来取消注册任何 Docker 容器的服务。我们即将使用的 Registrator 目前支持可插入服务注册表,目前包括 Consul、Etcd 和 SkyDNS2。当我们通过网络与不同的服务交互时,强烈建议使用 Registrator。
$ docker pull gliderlabs/registrator:latest
输出将如以下屏幕截图所示。

$ docker run -d \ --name = registrator \ --net = host \ --volume = /var/run/docker.sock:/tmp/docker.sock \ gliderlabs/registrator:latest \ consul://localhost:8500
输出将如以下屏幕截图所示。

您收到的输出是您刚刚启动的 Docker 容器的 ID。您可以使用命令 − 检查容器是否正在运行
$ docker ps -a
输出将如以下屏幕截图所示。

您还可以使用以下命令查看 Registrator 的日志。
$ docker logs registrator
使用 rkt 和 Nomad
rkt 是另一个基于容器的服务,您可以在您的环境中使用它。它由 CoreOS 构建。构建 rkt 的主要原因是为了提高安全性,这是 Docker 在 2013-14 年仍在开发中时面临的危机问题之一。
至于 Consul,我们可以使用 Rkt Registrator 与 Consul 一起进行服务发现。这个特定的 Registrator 项目涵盖了 rkt,目前正在开发中,不建议用于生产级别。
您可以通过转到其路径并运行以下命令来检查 rkt 是否已安装。
$ ./rkt
您可以检查输出以检查它是否已正确安装,如以下屏幕截图所示。

要试用 rkt 和 Consul,请查看 − https://github.com/r3boot/rkt-registrator。
Nomad 工具
最常用和最受欢迎的选项之一是 Nomad 工具。Nomad 是一种用于管理机器集群并在其上运行应用程序的工具。它类似于 Mesos 或 Kubernetes。默认情况下,Nomad 本身包含 Docker 和 rkt 驱动程序。因此,如果您正在寻找使用 Consul 的大规模容器部署。Nomad 可能是一个很好的解决方案。查看 − https://www.nomadproject.io/docs/drivers/rkt.html了解有关 Nomad 的更多信息。