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 中解决了每个与领事相关的问题。
这可能是一个相当复杂的主题,但最简单的方法是使用 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
。作为。根.
请。你可以,但不要。而是执行以下操作:
- 运行 VM 上的缓存或转发 DNS 服务器。我偏向
dnsmasq
因为它在一般情况下的简单性和稳定性。
- 配置
dnsmasq
以将 TLD .consul
转发到侦听 127.0.0.1:8600
(默认)的 consul
代理。
- 更新您的
/etc/resolv.conf
文件以指向 127.0.0.1
作为您的名称服务器。
有几种方法可以做到这一点,官方文档有一篇值得研究的文章:
https://www.consul.io/docs/guides/forwarding.html
这应该让你开始。
我正在 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 中解决了每个与领事相关的问题。
这可能是一个相当复杂的主题,但最简单的方法是使用 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
。作为。根.
请。你可以,但不要。而是执行以下操作:
- 运行 VM 上的缓存或转发 DNS 服务器。我偏向
dnsmasq
因为它在一般情况下的简单性和稳定性。 - 配置
dnsmasq
以将 TLD.consul
转发到侦听127.0.0.1:8600
(默认)的consul
代理。 - 更新您的
/etc/resolv.conf
文件以指向127.0.0.1
作为您的名称服务器。
有几种方法可以做到这一点,官方文档有一篇值得研究的文章:
https://www.consul.io/docs/guides/forwarding.html
这应该让你开始。