Consul 在没有 docker 的情况下设置用于生产

Consul set up without docker for production use

我正在 Consul 上做一个 POC,以支持服务发现和多个微服务版本。 Consul 客户端和服务器集群(3 台服务器)设置在 Linux 个虚拟机上。我按照 Consul 的文档进行操作,设置成功。

这是我的疑问。我的设置完全在虚拟机上。我已经使用 HTTP API 添加了一个服务定义。同一个服务在两个节点上是运行。 服务已正确注册:

curl http://localhost:8600/v1/catalog/service/my-service

给我两个节点的详细信息。

当我进行 DNS 查询时:

dig @127.0.0.1 -p 8600 my-service.service.consul

我能够看到托管服务的节点的预期结果。但由于服务名称未解析,我无法 ping 通该服务。

ping -c4 my-service or ping -c4 my-service.service.consul

ping: 未知主机。

如果我在 /etc/hosts 文件中输入 my-service 的映射,我可以 ping 这个,只能从同一个虚拟机。我将无法从同一 LAN 或 WAN 上的另一台 VM 对此执行 ping 操作。 DNS默认端口是53,Consul DNS接口监听8600,我不能用Docker做DNS转发。我有可能在这里错过了什么吗?领事 DNS 查询可以在没有 Docker/dnsmasq 或 iptables 更新的情况下工作吗? 明确地说,这是我希望得到的最终结果:

ping my-service

这需要以循环方式 ping 我配置的节点。

如果这个问题很基础,请耐心等待,我已经在 SO 中解决了每个与领事相关的问题。

也经历了 this and this 这些也说我需要做额外的设置。

这可能是一个相当复杂的主题,但最简单的方法是使用 ports 指令将 consul 更改为绑定到端口 53,并向 consul 配置添加一些递归器可以将真实的 DNS 请求传递到具有完整的 DNS 功能。像这些位:

{ "recursors": [ "8.8.8.8", “8.8.4.4” ], "ports":{ "dns": 53 } }

然后修改您的系统,在 /etc/resolve.conf 中使用名称服务器条目将 consul 服务器用于 dns。根据您的 OS,您可以使用 resolv.conf 文件中的端口,并避免处理需要 root 绑定到端口 53 的 Consul。

在更复杂的情况下,我知道很多人使用 unbound 或 bind 来拆分 DNS,实际上做相反的事情,将 .consul 域路由到 org 级别的非特权端口上的 consul 集群他们的 DNS 基础设施。

等等!请不要这样做!

做。不是。 运行。 CONSUL。作为。根.

请。你可以,但不要。而是执行以下操作:

  1. 运行 VM 上的缓存或转发 DNS 服务器。我偏向 dnsmasq 因为它在一般情况下的简单性和稳定性。
  2. 配置 dnsmasq 以将 TLD .consul 转发到侦听 127.0.0.1:8600(默认)的 consul 代理。
  3. 更新您的 /etc/resolv.conf 文件以指向 127.0.0.1 作为您的名称服务器。

有几种方法可以做到这一点,官方文档有一篇值得研究的文章:

https://www.consul.io/docs/guides/forwarding.html

这应该让你开始。