天天看點

實測: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 其他的主機名,則會傳回正常的結果。