Kubernetes CoreDNS 解析 Domain. 筆者最近在部署 Kubernetes 過程中,好奇每個元件究竟安裝與不安裝對… | by Ci Jie Li | Feb, 2021 | Medium medium.com
筆者最近在部署 Kubernetes 過程中,好奇每個元件究竟安裝與不安裝對 Kubernetes 造成什麼影響?CoreDNS 主要的功能之一是當 Pods 做套件更新或安裝時,可以提供 DNS Forward 功能,將請求轉發至外部進行 Domain 解析,並從正確的位址下載套件進行安裝。 本篇就聚焦在 CoreDNS 將 Pods 的請求轉發至外部 DNS Server 進行解析的運作流程。 首先先檢視當前 Kubernetes 上運行的 Pods。 在尚未安裝 CoreDNS 情境時,您會發現在任一個 Pod 內無法向外部資源進行存取。 這邊筆者先建立一個 Nginx 的 Deployment,並且進去其中一個 Pod 執行 apt update 指令,這時候會發現如下的情況: 問題在於無法解析 Ubuntu 套件 Domain,因此無法正常更新套件與安裝套件。 回想一下,不管在安裝 Master Node 或 Worker Node 時,都會啟動 Kubelet,並且帶入 –config=/var/lib/kubelet/config.yml 參數。 在 /var/lib/kubelet/config.yml 檔案內會需要配置 clusterDNS 。這就是運行在這個節點上的 Pods 預設的 DNS Server。 如上述情境,若在這個 Worker Node 上運行一個 Pod,預設 DNS Server 為 10.96.0.10 。 實際我們進入 nginx-deployment-66b6c48dd5-kwmkx Pod,並且檢視 /etc/resole.conf 檔案。 由上述結果可以看出 Pod 會採用 10.96.0.10 作為預設 DNS Server。 接著我們就必須利用 CoreDNS 啟動時,使用 10.96.0.10 作為 ClusterIP,將所有 Pods 請求 Forward 到外部 8.8.8.8 進行 Domain 解析。 因此在啟動 CoreDNS 時需要在 ConfigMap 中加入 forward . 8.8.8.8:53 配置,並且在 Service 將 ClusterIP 設定為 10.96.0.10 。 配置完成後建立 CoreDNS 服務。 啟動完成後,檢視當前所有 Serivce 狀態。 由上述可以看出 CoreDNS 已經被啟動,並且 ClusterIP 為 10.96.0.10 。 最後,我們在進入 nginx-deployment-66b6c48dd5-kwmkx Pod 再次進行套件更新。 由上述可以看出現在 Pod 已經可以至外部進行套件更新與安裝。 由下圖來解釋上述所做的行為,在 Nginx Pod 內下 apt update 指令時,請求根據 DNS Server 轉發至 CoreDNS Pod(10.96.0.10),再由 CoreDNS Pod 將請求 Forward 到外部 DNS Server(8.8.8.8) 進行解析。因此就可以在 Pod 內正常進行套件的更新與安裝等行為。 若針對本篇教學有任何疑問或有敘述錯誤的地方,歡迎在底下留言討論唷~ Originally published at http://github.com.
Report Story