etcd

原始碼

etcd 讓您可以從 etcd 啟用 SkyDNS 服務探索。

描述

etcd 外掛程式實作(較舊的)SkyDNS 服務探索服務。它適合做為通用的 DNS 區域資料外掛程式。僅實作了 DNS 記錄類型的一個子集,並且完全不處理子網域和委派。此外,此外掛程式會遞迴地向下追蹤樹狀結構,並傳回找到的所有記錄,詳情請參閱下方的「特殊行為」。

etcd 執行個體中的資料必須像 SkyDNS 一樣,編碼為訊息。它的運作方式與 SkyDNS 相同。

etcd 外掛程式廣泛使用 forward 外掛程式來轉發和查詢網路中的其他伺服器 - 如果該外掛程式也已啟用。

語法

etcd [ZONES...]
  • 區域 etcd 應該具有授權的區域。

路徑預設為 /skydns 本機 etcd3 代理 (https://127.0.0.1:2379)。如果未指定任何區域,則會使用區塊的區域做為區域。

etcd [ZONES...] {
    fallthrough [ZONES...]
    path PATH
    endpoint ENDPOINT...
    credentials USERNAME PASSWORD
    tls CERT KEY CACERT
}
  • fallthrough 如果區域符合,但無法產生任何記錄,則將請求傳遞到下一個外掛程式。如果省略 [ZONES…],則會對此外掛程式具有授權的所有區域執行 fallthrough。如果列出特定的區域(例如 in-addr.arpaip6.arpa),則只有對這些區域的查詢才會執行 fallthrough。

  • PATH etcd 內的路徑。預設為 “/skydns”。

  • ENDPOINT etcd 端點。預設為 “https://127.0.0.1:2379”。

  • credentials 用於設定存取 etcd 叢集的 USERNAMEPASSWORD

  • tls 後面跟著

    • 沒有引數,如果伺服器憑證是由系統安裝的 CA 簽署,且不需要用戶端憑證
    • 單一引數,即 CA PEM 檔案,如果伺服器憑證不是由系統 CA 簽署,且不需要用戶端憑證
    • 兩個引數 - 憑證 PEM 檔案的路徑、私密金鑰 PEM 檔案的路徑 - 如果伺服器憑證是由系統安裝的 CA 簽署,且需要用戶端憑證
    • 三個引數 - 憑證 PEM 檔案的路徑、用戶端私密金鑰 PEM 檔案的路徑、CA PEM 檔案的路徑 - 如果伺服器憑證不是由系統安裝的 CA 簽署,且需要用戶端憑證。

特殊行為

etcd 外掛程式會利用目錄結構來尋找相關的項目。例如,項目 /skydns/test/skydns/mx 將會包含像 /skydns/test/skydns/mx/a/skydns/test/skydns/mx/b 等項目。同樣地,目錄 /skydns/test/skydns/mx1 將會包含所有 mx1 項目。請注意,此外掛程式會搜尋整個(子)樹狀結構以尋找記錄。在第一個範例中,針對 mx.skydns.test 的查詢將會傳回 ab 記錄的內容。如果目錄延伸到更深層,這些記錄也會傳回。

使用 etcd3 時,已捨棄對階層式金鑰的支援。這表示沒有目錄,而只有在 etcd3 中具有前置詞的扁平金鑰。為了配合查詢,etcd 外掛程式現在會在前置詞 /skydns/test/skydns/mx/ 上執行查詢,以搜尋像 /skydns/test/skydns/mx/a 等項目,如果找不到 /skydns/test/skydns/mx/ 上的任何項目,它會尋找 /skydns/test/skydns/mx 以尋找像 /skydns/test/skydns/mx1 等項目。

這會在某些情況下導致 CoreDNS 對 etcd 執行兩次查詢。

範例

這是預設的 SkyDNS 設定,所有項目都完整指定

skydns.local {
    etcd {
        path /skydns
        endpoint https://127.0.0.1:2379
    }
    prometheus
    cache
    loadbalance
}

. {
    forward . 8.8.8.8:53 8.8.4.4:53
    cache
}

或者,設定使用 /etc/resolv.conf 作為代理和上游的基礎,以便解析外部指向的 CNAME。

skydns.local {
    etcd {
        path /skydns
    }
    cache
}

. {
    forward . /etc/resolv.conf
    cache
}

也支援多個端點。

etcd skydns.local {
    endpoint https://127.0.0.1:2379 https://127.0.0.1:4001
...

在開始使用這些範例之前,請依照這裡所述,設定 etcdctl(使用 etcdv3 API)。這將協助您將範例金鑰放入您的 etcd 伺服器中。

如果您喜歡,可以使用 curl 來填入 etcd 伺服器,但是使用 curl 時,端點 URL 會取決於 etcd 的版本。例如,etcd v3.2 或更早版本只會使用 [CLIENT-URL]/v3alpha/*,而 etcd v3.5 或更新版本則會使用 [CLIENT-URL]/v3/*。此外,金鑰和值必須在 JSON 酬載中進行 base64 編碼。使用 etcdctl 時,會自動處理這些詳細資料。您可以查看此文件以取得詳細資料。

反向區域

支援反向區域。您需要讓 CoreDNS 知道您也具有反向的授權。例如,如果您想要為 10.0.0.0/24 新增反向,您需要將區域 0.0.10.in-addr.arpa 新增至區域清單。顯示 Corefile 的程式碼片段

etcd skydns.local 10.0.0.0/24 {
...

接下來,您需要使用反向記錄填入該區域,這裡我們會新增指向 reverse.skydns.local 的 10.0.0.127 的反向記錄。

% etcdctl put /skydns/arpa/in-addr/10/0/0/127 '{"host":"reverse.skydns.local."}'

使用 dig 查詢

% dig @localhost -x 10.0.0.127 +short
reverse.skydns.local.

區域名稱做為 A 記錄

區域名稱本身可以用作 A 記錄。透過將特殊項目寫入您區域的 ETCD 路徑,即可達到此行為。例如,如果您的區域命名為 skydns.local,則您可以為此區域建立 A 記錄,如下所示

% etcdctl put /skydns/local/skydns/ '{"host":"1.1.1.1","ttl":60}'

如果您查詢區域名稱本身,您將收到建立的 A 記錄

% dig +short skydns.local @localhost
1.1.1.1

如果您想要將 DNS RR 用於區域名稱,您可以設定下列項目

% etcdctl put /skydns/local/skydns/x1 '{"host":"1.1.1.1","ttl":60}'
% etcdctl put /skydns/local/skydns/x2 '{"host":"1.1.1.2","ttl":60}'

如果您現在查詢區域名稱,您將會收到下列回應

% dig +short skydns.local @localhost
1.1.1.1
1.1.1.2

區域名稱做為 AAAA 記錄

如果您也想要將 AAAA 記錄用於區域名稱,您可以設定下列項目

% etcdctl put /skydns/local/skydns/x3 '{"host":"2003::8:1","ttl":60}'
% etcdctl put /skydns/local/skydns/x4 '{"host":"2003::8:2","ttl":60}'

如果您現在查詢 AAAA 的區域名稱,您將會收到下列回應

% dig +short skydns.local AAAA @localhost
2003::8:1
2003::8:2

SRV 記錄

如果您想要使用 SRV 記錄,您可以設定下列項目

% etcdctl put /skydns/local/skydns/x5 '{"host":"skydns-local.server","ttl":60,"priority":10,"port":8080}'

請注意,金鑰 hostSRV 中的 target,因此它應該是網域名稱。

如果您現在查詢 SRV 的區域名稱,您將會收到下列回應

% dig +short skydns.local SRV @localhost
10 100 8080 skydns-local.server.

TXT 記錄

如果您想要使用 TXT 記錄,您可以設定下列項目

% etcdctl put /skydns/local/skydns/x6 '{"ttl":60,"text":"this is a random text message."}'
% etcdctl put /skydns/local/skydns/x7 '{"ttl":60,"text":"this is a another random text message."}'

如果您現在查詢 TXT 的區域名稱,您將會收到下列回應

% dig +short skydns.local TXT @localhost
"this is a random text message."
"this is a another random text message."

另請參閱

如果您想要 循環配置 A 和 AAAA 回應,請查看 loadbalance 外掛程式。