快速開始

快速入門指南。

首先取得 CoreDNS,可以透過以下方式:

  • GitHub 下載最新的 版本,並解壓縮。您現在應該會有一個 “coredns” 可執行檔。

  • 從 git 編譯,從 GitHub 取得原始碼。將目錄變更為 coredns 並執行:

    • go get - 取得一些相依性,其他的已加入 vendor 中
    • go build

    您現在應該會有一個 “coredns” 可執行檔。

  • Docker Hub 取得 Docker 映像檔

如果您想在 Kubernetes 中使用 CoreDNS,請查看 這篇關於使用 kuberneters 外掛程式進行 SD 的文章

此快速入門的其餘部分將重點放在兩個不同的使用案例:

  1. 使用 CoreDNS 提供區域檔案。也可以選擇簽署區域。
  2. 使用 CoreDNS 作為轉發代理。

CoreDNS 是透過一個通常稱為 Corefile 的設定檔進行設定的。

從檔案提供

從區域檔案提供時,您會使用 file 外掛程式。我們先從區域 example.org. 以及我們想要從中提供的區域檔案開始。

建立一個名為 example.org 的檔案,內容如下:

$ORIGIN example.org.
@	3600 IN	SOA sns.dns.icann.org. noc.dns.icann.org. (
				2017042745 ; serial
				7200       ; refresh (2 hours)
				3600       ; retry (1 hour)
				1209600    ; expire (2 weeks)
				3600       ; minimum (1 hour)
				)

	3600 IN NS a.iana-servers.net.
	3600 IN NS b.iana-servers.net.

www     IN A     127.0.0.1
        IN AAAA  ::1

建立一個 Corefile,名為 Corefile,內容如下:

example.org {
    file example.org
    prometheus     # enable metrics
    errors         # show errors
    log            # enable query logs
}

在非標準埠啟動 CoreDNS 以檢查是否一切正常:coredns -conf Corefile -dns.port 1053,並使用 dig 發送查詢。

% dig -p 1053 @localhost AAAA www.example.org +noall +answer

www.example.org.	3600	IN	AAAA	::1

由於我們使用 log 外掛程式 啟用了查詢記錄,因此查詢也應該會顯示在標準輸出中。

::1 - [24/Jul/2017:10:10:44 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 121 133.449µs

從這裡您可以啟用 CoreDNS 在 53 埠上執行,並讓它從 systemd (在 Linux 上) 啟動,請參閱 部署儲存庫 中的範例腳本。閱讀更多關於 filemetricserrors 外掛程式的資訊。

CoreDNS 作為代理

另一個外掛程式是 proxy 外掛程式。例如,我們可以透過 HTTPS 將 DNS 請求發送到 Google。建立一個 Corefile,內容如下:

. {
    proxy . 8.8.8.8:53 {
        protocol https_google
    }
    prometheus
    errors
    log
}

啟動 CoreDNS,就像上面一樣,並向它發送一些查詢。CoreDNS 應該會記錄這些查詢,在此例中:

::1 - [24/Jul/2017:10:44:15 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 76 83.396955ms
::1 - [24/Jul/2017:10:44:17 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 76 14.030914ms
::1 - [24/Jul/2017:10:44:19 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 76 13.286384ms

如果您查看每個查詢所花費的時間 (以 “ms” 為單位),會發現速度相當慢,約為 ~83ms 和 13ms。因此,讓我們新增一些快取,並啟用 caching 外掛程式。只需將 “cache” 這個詞加入 Corefile 並優雅地重新載入 CoreDNS:kill -SIGUSR1 <pid_of_coredns>。再次查詢。

::1 - [24/Jul/2017:11:33:54 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 76 43.469743ms
::1 - [24/Jul/2017:11:33:55 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 73 133.073µs

第一個查詢仍然「慢」,但後續的查詢只需要 133 µs。

可能的錯誤

health 的文件指出「此外掛程式只需啟用一次」,這可能會讓您認為以下是一個有效的 Corefile:

health

. {
    whoami
}

但這行不通,並導致一些難以理解的錯誤:

"Corefile:3 - Error during parsing: Unknown directive '.'".

這裡發生了什麼?health 被視為區域,現在解析器預期看到指令 (cacheetcd 等),但下一個權杖是 .,而不是指令。Corefile 應該如下建構:

. {
    whoami
    health
}

health 的文件中那句話的意思是,一旦指定了 health,它對於整個 CoreDNS 過程都是全域的,即使您只為一個伺服器指定了它。

另請參閱

還有 許多其他 外掛程式可以與 CoreDNS 一起使用。您也可以編寫 自己的 外掛程式。

如何處理查詢 是深入探討 CoreDNS 如何處理 DNS 查詢的內容。

Miek Gieben
發佈時間:,並加上了 文件快速開始 的標籤,共使用了 675 個字。