Consul 引导和 DNS


在本章中,我们将讨论如何在 Consul 中使用以下组件。

  • 自动引导
  • 手动引导
  • 使用 DNS 转发
  • DNS缓存

现在让我们详细讨论其中的每一个。

自动引导


Bootstrapping 是 Consul 的核心功能之一。当你第一次安装 consul 时,它会自动配置为检测、识别和加入它遇到的节点。在集群形成期间,自动引导是 Consul 的内置功能。要获得更多关于 consul 的信息,最好的方法是使用以下命令:

$ sudo consul info

输出将如以下屏幕截图所示。

Automatic Bootstrapping

该命令将显示 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 来自 port 53 . DNS转发可以使用 绑定,dnsmasq and iptables .默认情况下,Consul 代理运行一个 DNS 服务器,监听 8600 端口。通过向 Consul 代理的 DNS 服务器提交 DNS 请求,你可以获得运行你感兴趣的服务的节点的 IP 地址。

Consul DNS 接口使服务的端口信息通过 SRV 记录 .如果没有在代码中手动添加逻辑,你通常仅限于你正在查询的服务的 IP 地址信息(即记录)。

最好的选择是让多个 BIND 服务器在本地运行一个 Consul 代理。 BIND 服务器接收到的任何查询都将转发到其本地 Consul Agent DNS 服务器。

使用绑定

我们可以使用 Bind 功能使用 DNS 转发。可以使用以下命令来完成。

$ sudo apt-get install bind9 bind9utils bind9-doc

输出将如以下屏幕截图所示。

Bind function

让我们使用以下命令编辑 /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 command

你可以使用以下 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 服务器发送查询。这是通过更新 解析.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

输出将如以下屏幕截图所示。

dnsmasq

现在,我们可以做一个非常简单的配置:

$ echo "server = /consul/127.0.0.1#8600" > /etc/dnsmasq.d/10-consul

我们在这里所做的只是指定对 consul 服务的 DNS 请求,这些请求将由位于 127.0.0.1 端口 8600 的 DNS 服务器处理。除非你更改 consul 默认值,否则这应该可以工作。

在正常情况下,应使用以下命令。

$ dig @127.0.0.1 -p 8600 web.service.consul

With Dnsmasq ,你应该使用以下命令。

$ dig web.service.consul

输出将如以下屏幕截图所示。

web.service