描述
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.arpa
和ip6.arpa
),則只有對這些區域的查詢才會執行 fallthrough。 -
PATH etcd 內的路徑。預設為 “/skydns”。
-
ENDPOINT etcd 端點。預設為 “https://127.0.0.1:2379”。
-
credentials
用於設定存取 etcd 叢集的 USERNAME 和 PASSWORD。 -
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
的查詢將會傳回 a
和 b
記錄的內容。如果目錄延伸到更深層,這些記錄也會傳回。
使用 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}'
請注意,金鑰 host
是 SRV
中的 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 外掛程式。