在捕鱼大亨网络版中配置私有DNS区域和上游名称服务器

编者注:这篇文章是 系列深入文章 捕鱼大亨网络版 1.6 的新功能

许多用户拥有现有的域名区域,他们希望将其集成到其捕鱼大亨网络版 DNS名称空间中。例如,混合云用户可能想解析其在群集中的内部“ .corp”域名地址。其他用户可能具有由非捕鱼大亨网络版服务发现系统(例如Consul)填充的区域。我们很高兴地宣布, 捕鱼大亨网络版 1.6 , kube-dns 增加了对可配置的专用DNS区域(通常称为“存根域”)和外部上游DNS名称服务器的支持。在此博客文章中,我们描述了如何配置和使用此功能。

默认查找流程

捕鱼大亨网络版 当前支持使用dnsPolicy标志在每个容器中指定的两个DNS策略:“默认”和“ ClusterFirst”。如果未明确指定dnsPolicy,则使用“ ClusterFirst”:

  • 如果dnsPolicy设置为“ Default”,则名称解析配置将从Pod运行的节点继承。注意:此功能不能与dnsPolicy:“默认”结合使用。
  • 如果dnsPolicy设置为“ ClusterFirst”,则DNS查询将发送到kube-dns服务。根于已配置的群集域后缀(在上面的示例中以“ .cluster.local”结尾的任何地址)中的域的查询将由kube-dns服务回答。所有其他查询(例如, www.sjzrbxc.cn )将转发到从节点继承的上游名称服务器。 在使用此功能之前,通常通过使用自定义解析器替换上游DNS来引入存根域。但是,这导致自定义解析器本身成为DNS解析的关键路径,可伸缩性和可用性问题可能会导致群集失去DNS功能。此功能使用户可以引入自定义分辨率,而无需接管整个分辨率路径。

自定义DNS流

从捕鱼大亨网络版 1.6开始,集群管理员可以通过为kube-dns提供ConfigMap来指定自定义存根域和上游名称服务器。例如,下面的配置将插入一个存根域和两个上游名称服务器。按照规定,带有“ .acme.local”后缀的DNS请求将被转发到侦听1.2.3.4的DNS。此外,Google Public DNS将提供上游查询。有关数据格式的一些说明,请参阅本节末尾的ConfigMap配置说明。

apiVersion: v1

kind: ConfigMap

metadata:

  name:  kube-dns 

  namespace: kube-system

data:

  stubDomains: |

    {“acme.local”: [“1.2.3.4”]}

  upstreamNameservers: |

    [“8.8.8.8”, “8.8.4.4”]

下图显示了以上配置中指定的DNS查询流程。将dnsPolicy设置为“ ClusterFirst”时,首先将DNS查询发送到kube-dns中的DNS缓存层。从这里开始,检查请求的后缀,然后将其转发到适当的DNS。在这种情况下,带有集群后缀的名称(例如“ .cluster.local”)将发送到kube-dns。带有存根域名后缀的名称(例如“ .acme.local”)将发送到配置的自定义解析器。最后,与任何后缀都不匹配的请求将被转发到上游DNS。

下表列出了示例域名和这些域名的查询目标:

域名 服务器回答查询
kubernetes.default.svc.cluster.local kube-dns
foo.acme.local 自定义DNS(1.2.3.4)
widget.com 上游DNS(8.8.8.8、8.8.4.4中的一个)

ConfigMap配置说明

  • stubDomains(可选)

    • 格式:使用DNS后缀键(例如“ acme.local”)和由DNS IP的JSON数组组成的值的JSON映射。
    • 注意:目标名称服务器本身可能是捕鱼大亨网络版服务。例如,您可以运行自己的dnsmasq副本,以将自定义DNS名称导出到ClusterDNS命名空间中。
  • 上游名称服务器(可选)

    • 格式:DNS IP的JSON数组。
    • 注意:如果指定,则指定的值将替换默认情况下从节点的/etc/resolv.conf中获取的名称服务器。
    • 限制:最多可以指定三个上游名称服务器

示例1:添加Consul DNS存根域

在此示例中,用户具有他们希望与kube-dns集成的Consul DNS服务发现系统。领事域服务器位于10.150.0.1,所有领事名称均带有后缀“ .consul.local”。要配置捕鱼大亨网络版,集群管理员只需创建一个ConfigMap对象,如下所示。注意:在此示例中,集群管理员不希望覆盖节点的上游名称服务器,因此他们无需指定可选的上游名称服务器字段。

apiVersion: v1

kind: ConfigMap

metadata:

  name:  kube-dns 

  namespace: kube-system

data:

  stubDomains: |

    {“consul.local”: [“10.150.0.1”]}

示例2:替换上游名称服务器

在此示例中,群集管理员希望明确地强制所有非群集DNS查找通过其自己的名称服务器(172.16.0.1)。同样,这很容易实现。他们只需要使用指定所需名称服务器的streamingName服务器字段创建一个ConfigMap即可。

apiVersion: v1

kind: ConfigMap

metadata:

  name:  kube-dns 

  namespace: kube-system

data:

  upstreamNameservers: |

    [“172.16.0.1”]




**Get involved**  

If you’d like to contribute or simply help provide feedback and drive the roadmap, [join our community](//github.com/kubernetes/community#kubernetes-community). Specifically for network related conversations participate though one of these channels:  

- Chat with us on the  捕鱼大亨网络版  [Slack network channel](//kubernetes.slack.com/messages/sig-network/)
- Join our Special Interest Group, [SIG-Network](//github.com/kubernetes/community/wiki/SIG-Network), which meets on Tuesdays at 14:00 PT
Thanks for your support and contributions. Read more in-depth posts   捕鱼大亨网络版  1.6 的新功能 [here](//sjzrbxc.cn/blog/2017/03/five-days-of-kubernetes-1-6).





_--Bowei Du, Software Engineer and Matthew DeLio, Product Manager, Google_  



- Post questions (or answer questions) on [Stack  溢出 ](http://stackoverflow.com/questions/tagged/kubernetes)
- Join the community portal for advocates on [K8sPort](http://k8sport.org/)
- Get involved with the  捕鱼大亨网络版  project on [GitHub](//github.com/kubernetes/kubernetes)
- Follow us on Twitter [@捕鱼大亨网络版io](//twitter.com/kubernetesio) for latest updates
- Connect with the community on [Slack](http://slack.k8s.io/)
- [Download](http://get.k8s.io/)  捕鱼大亨网络版