Consul - 引导和DNS
在本章中,我们将讨论如何在 Consul 中使用以下组件。
- 自动引导
- 手动引导
- 使用 DNS 转发
- DNS 缓存
现在让我们详细讨论每个组件。
自动引导
引导是 Consul 的核心功能之一。首次安装 consul 时,它会自动配置为检测、识别和加入遇到的节点。在集群形成期间,自动引导是 Consul 的内置功能。要获取有关 consul 的更多信息,最好的方法是使用以下命令 −
$ sudo consul info
输出将如以下屏幕截图所示。

此命令将显示 consul 在实际工作场景中的实际工作情况。它将显示 Raft 算法在 Consul 中的工作情况。自动引导命令可以使用以下命令显示 −
$ consul agent -server -data-dir = "/tmp/consul" -bootstrap-expect 3
在 -dev 模式下无法进行自动引导。
此选项告知 Consul 预期的服务器节点数,并在服务器可用时自动引导。
手动引导
手动引导是 Consul 的一个古老而有用的功能。实际上,在 Consul 的早期版本中,首次安装和使用 consul 时必须手动进行引导。后来,人们意识到无法在不同时间执行此命令行操作。因此,引入了自动引导。您始终可以使用以下命令手动使用引导程序。
在本例中,我们假设要构建一个 3 节点的 consul 集群。
有两种方式可以进行手动引导
在 2 个节点上运行命令:在节点 B 和节点 C 上,您可以执行以下操作 −
$ consul join <Node A Address>
在 1 个节点上运行命令 −
$ consul join <Node B Address> <Node C Address>
使用 DNS 转发
DNS 由 端口 53 提供服务。 DNS 转发可以使用 BIND、dnsmasq 和 iptables 完成。默认情况下,Consul 代理运行一个监听端口 8600 的 DNS 服务器。通过向 Consul 代理的 DNS 服务器提交 DNS 请求,您可以获取运行您感兴趣的服务的节点的 IP 地址。
Consul DNS 接口通过 SRV 记录 提供服务的端口信息。如果不在代码中手动添加逻辑,您通常只能获得查询服务的 IP 地址信息(即记录)。
最好的选择是让多个 BIND 服务器各自在本地运行一个 Consul 代理。BIND 服务器收到的任何查询都将转发到其本地 Consul 代理 DNS 服务器。
使用 Bind
我们可以使用 Bind 函数进行 DNS 转发。可以使用以下命令完成。
$ sudo apt-get install bind9 bind9utils bind9-doc
输出结果如下图所示。

我们使用以下命令编辑 /etc/bind/named.conf 文件。
$ sudo vim /etc/bind/named.conf
在文件中,请在代码最后一行下方添加以下几行。
options { directory "/var/cache/bind"; recursion yes; allow-query { localhost; }; forwarders { 8.8.8.8; 8.8.4.4; }; dnssec-enable no; dnssec-validation no; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; }; include "/etc/bind/consul.conf";
输出结果如下图所示。

您可以使用以下 Bind 命令来配置 Consul。
$ sudo vim /etc/bind/consul.conf
创建文件时添加以下几行 −
zone "consul" IN { type forward; forward only; forwarders { 127.0.0.1 port 8600; }; };
现在,您可以使用以下命令开始运行您的 consul 代理。(请记住也重新启动 bind9 服务。)
$ sudo service bind9 restart $ consul agent -server -bootstrap-expect 1 -data-dir = /tmp/consul -configdir = [Path]
需要配置系统以将查询发送到本地 Consul 代理的 DNS 服务器。这可以通过更新系统上的 resolv.conf 文件以指向 127.0.0.1 来完成。在大多数情况下,Consul 需要配置为在端口 53 上运行。
您可以将以下信息添加到 /etc/resolv.conf:
nameserver 127.0.0.1
DNS 缓存
Consul 为所有 DNS 结果提供"0 TTL"(生存时间)值。这可防止任何缓存。但是,由于 TTL 值,可以将其设置为允许 DNS 结果与 Consul 的下游一起缓存。更高的 TTL 值会减少 Consul 服务器上的查找次数,并加快客户端的查找速度,但代价是结果越来越陈旧。
为此,我们将使用以下方法使用 DNS 缓存 −
$ sudo apt-get install dnsmasq
输出将如以下屏幕截图所示。

现在,我们可以进行非常简单的配置 −
$ echo "server = /consul/127.0.0.1#8600" > /etc/dnsmasq.d/10-consul
我们在这里所做的就是指定对 consul 服务的 DNS 请求,这些请求将由DNS 服务器位于 127.0.0.1,端口为 8600。除非您更改 consul 默认值,否则此方法应该有效。
在正常情况下,应使用以下命令。
$ dig @127.0.0.1 -p 8600 web.service.consul
使用 Dnsmasq,您应使用以下命令。
$ dig web.service.consul
输出将如以下屏幕截图所示。
