天天看点

实测:Kubernetes 1.6 中的混合 DNS

在之前的文章中提到过,kubernetes 1.6 新增的混合 dns 功能。这一功能不大,但是在企业私有云环境下有着非常重要的衔接作用,能够有效的将 kubernetes 内的应用和集群外甚至互联网上的的 consual 或者类似系统管理的服务连接起来,形成更好的协同效果。

上篇文章主要侧重点是概念和一些 yaml 例子,本文则会从操作出发,用一个例子从头到尾的逐步操作这一功能的具体操作。

我们使用一个 ubuntu server 运行 dnsmasq 来担任 kubernetes 集群外的 dns 服务器角色,只为了满足测试需要的话,就不需要太复杂的配置了。

具体安装步骤如下:

这样,我们就启动了一个 dns 服务器,并且可以直观的看到其工作状况如下:

前文说过,我们需要用一个 configmap 对象来让 kubernetes 应用新的 dns 解析配置,这里我们简单的新建一个存根域,就是上文提到的<code>out-of.kubernetes</code>域名,让其使用我们前面安装的 dns 服务器进行解析,其他域名则使用<code>8.8.8.8</code>和<code>8.8.4.4</code>这一公共 dns 解析。配置情况如下:

利用<code>kubectl apply -f</code>命令使之生效。

注意:系统可能缺省带有这一 configmap,因此需要用 apply 进行操作,建议使用 <code>kubectl get configmap kube-dns -o yaml --namespace kube-system</code> 进行复查。

这里使用一个 alpine linux 的镜像作为测试工具:

测试 pod 运行之后,可以使用<code>kubectl exec -it tester sh</code>命令进入 pod开始测试。

在 pod 的 shell 中我们可以尝试执行 <code>ping server.out-of.kubernetes</code>,会看到返回了我们写入在 hosts 中的地址,在 dns 服务器端,也会看到相关的查询记录。

如果 ping 其他的主机名,则会返回正常的结果。