领事 – 引导和 DNS
领事 – 引导和 DNS
在本章中,我们将讨论如何在 Consul 中使用以下组件。
- 自动引导
- 手动引导
- 使用 DNS 转发
- DNS缓存
现在让我们详细讨论其中的每一个。
自动引导
Bootstrapping 是 Consul 的核心功能之一。当您第一次安装 consul 时,它会自动配置为检测、识别和加入遇到的节点。在集群形成期间,自动引导是 Consul 的内置功能。要获得有关 consul 的更多信息,最好的方法是使用以下命令 –
$ sudo consul info
输出将如以下屏幕截图所示。
此命令将显示 consul 在实际工作场景中的实际工作情况。它将显示在 Consul 中工作的 Raft 算法。可以使用以下命令显示自动引导命令 –
$ 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 代理运行一个 DNS 服务器,侦听端口 8600。通过向 Consul 代理的 DNS 服务器提交 DNS 请求,您可以获得运行您感兴趣的服务的节点的 IP 地址。
Consul DNS 接口通过SRV 记录提供服务的端口信息。无需在代码中手动添加逻辑,您通常仅限于所查询服务的 IP 地址信息(即记录)。
最好的选择是有多个 BIND 服务器,每个服务器都在本地运行 Consul 代理。BIND 服务器收到的任何查询都将转发到其本地 Consul 代理 DNS 服务器。
使用绑定
我们可以使用绑定功能使用 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
我们在这里所做的只是指定领事服务的 DNS 请求,这些请求将由端口 8600 上 127.0.0.1 的 DNS 服务器处理。除非您更改领事默认值,否则这应该可以工作。
在正常情况下,应该使用以下命令。
$ dig @127.0.0.1 -p 8600 web.service.consul
使用Dnsmasq,您应该使用以下命令。
$ dig web.service.consul
输出将如以下屏幕截图所示。