快速入门

快速入门指南。

首先获取 CoreDNS,需要

  • 下载最新版本,从 GitHub 下载并解压缩。您现在应该拥有一个名为“coredns”的可执行文件。

  • 从 Git 编译,从 GitHub 获取源代码。将目录更改为 coredns,然后

    • 输入 go get - 获取一些依赖项,其他依赖项已作为供应商提供
    • 输入 go build

    您现在应该拥有一个名为“coredns”的可执行文件。

  • 获取 Docker 镜像,从 docker hub 获取。

如果您想在 Kubernetes 中使用 CoreDNS,请查看 关于 SD 及kuberneters 插件的这篇文章

本快速入门指南的其余部分将介绍并重点关注两种不同的用例

  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 向 Google 发送 DNS 请求。使用以下内容创建一个 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

如果你查看了每次查询花费的时间(“毫秒”),它很慢,大约 83 毫秒,13 毫秒。因此,让我们添加一些缓存并启用缓存插件。只需将单词“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 微秒。

可能的错误

健康的文档说明“此插件只需启用一次”,这可能会让你认为这是有效的 Corefile

health

. {
    whoami
}

但这不起作用,并导致一些令人费解的错误

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

这里发生了什么?health被视为区域,现在解析器期望看到指令(cacheetcd等),但下一个标记是.,这不是一个指令。Corefile 应构建如下

. {
    whoami
    health
}

健康文档中的那行意味着一旦指定健康后,它会对整个 CoreDNS 进程都是全局的,即使你只为一个服务器指定了它。

另请参阅

还有许多其他可以与 CoreDNS 一起使用的插件。并且你可以编写你自己的插件。

查询的处理方式深入介绍了 CoreDNS 如何处理 DNS 查询。

米克·杰本
发表时间:并标记文档快速以及开始使用675个单词。