Consul - 載入程式和DNS



在本章中,我們將討論以下元件如何在Consul中使用。

  • 自動引導
  • 手動引導
  • 使用DNS轉發
  • DNS快取

現在讓我們詳細討論每一個。

自動引導

引導是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從**埠53**提供服務。可以使用**BIND、dnsmasq**和**iptables**進行DNS轉發。預設情況下,Consul代理執行一個在埠8600上監聽的DNS伺服器。透過向Consul代理的DNS伺服器提交DNS請求,您可以獲取執行您感興趣的服務的節點的IP地址。

Consul DNS介面透過**SRV記錄**使服務的埠資訊可用。在不手動向程式碼中新增邏輯的情況下,您通常僅限於查詢的服務的IP地址資訊(即a記錄)。

最佳選擇是擁有多個BIND伺服器,每個伺服器都在本地執行一個Consul代理。任何由BIND伺服器接收的查詢都將轉發到其本地Consul代理DNS伺服器。

使用Bind

我們可以使用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伺服器。這是透過更新系統上的**resolv.conf**檔案以指向127.0.0.1來完成的。在大多數情況下,需要將Consul配置為在埠53上執行。

您可以將以下資訊新增到/etc/resolv.conf

nameserver 127.0.0.1

DNS快取

Consul使用“0 TTL”(生存時間)值提供所有DNS結果。這可以防止任何快取。但是,由於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

我們在這裡所做的只是指定要由127.0.0.1上的埠8600上的DNS伺服器處理的consul服務的DNS請求。除非您更改consul預設值,否則此方法應該有效。

在正常情況下,應使用以下命令。

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

使用**Dnsmasq**,您應該使用以下命令。

$ dig web.service.consul

輸出將如以下螢幕截圖所示。

web.service
廣告

© . All rights reserved.