特定情境下,由於業務存在高度定製化的需求,您可能需要自行管理並營運CoreDNS。ACS叢集支援使用非託管版本CoreDNS,方便在最大程度上自訂CoreDNS配置,本文介紹在ACS叢集使用非託管CoreDNS組件的步驟方法。
前提條件
非託管版本CoreDNS為開源社區標準組件,組件自身的資源成本開銷、營運管理職責由您自行承擔,組件使用過程中出現的問題由您自行解決。
ACS提供的組件模板預設使用Pod反親和機制強制多AZ打散,如果您的ACS僅配置使用了單可用性區域,多副本的CoreDNS僅會有一個副本可正常運行,建議您配置多可用性區域保證容災及可用性。
安裝步驟
登入容器計算服務控制台,在左側導覽列選擇叢集。
在叢集頁面,單擊目的地組群ID,然後在左側導覽列,選擇營運管理 > 組件管理。
【可選】選擇網路-CoreDNS(帶有託管標識),點擊卸載。 若組件列表中,沒有CoreDNS(帶有託管標識),可以跳過該步驟。
警告卸載CoreDNS會造成叢集內的網域名稱解析功能不可用, 請確保叢集內無業務流量時再進行操作。
選擇網路-CoreDNS(無託管標識),單擊安裝。

根據使用者自身需求進行安裝配置,確認無誤後,單擊確定進行組件安裝。
重要若安裝CoreDNS時未配置CpuRequest,組件對應的ACS Pod可用CPU資源僅為250m,建議您合理配置CpuRequest值,避免Pod效能壓力過大導致叢集出現異常。

通過kubectl串連叢集,執行以下命令查看pod。
kubectl get po -n kube-system|grep coredns預期輸出:
NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-85dc775876-sh558 1/1 Running 0 3m35s kube-system coredns-85dc775876-xzcpp 1/1 Running 0 3m35s可以看到coredns pod成功拉起,說明非託管版本CoreDNS組件安裝成功。
進入叢集內任意Pod執行以下命令,驗證叢集內網域名稱解析功能是否正常。
nslookup kubernetes預期輸出:
Server: 10.0.0.10 Address: 10.0.0.10#53 Name: kubernetes.default.svc.cluster.local Address: 10.0.0.1可以看到網域名稱解析成功,coredns服務正常。
自訂CoreDNS配置
自訂CoreDNS的配置主要通過修改Corefile來實現,Corefile以ConfigMap的形式儲存在K8s叢集中,您可以直接編輯Corefile來調整CoreDNS的相關配置,以下示範如何通過修改Corefile調整CoreDNS的相關配置。
執行以下命令,編輯CoreDNS的Corefile。
kubectl -n kube-system edit cm coredns使用以下內容修改Corefile檔案。
Corefile: | .:53 { errors health { lameduck 15s } ready kubeapi k8s_event { level info error warning } kubernetes cluster.local in-addr.arpa ip6.arpa { pods verified ttl 30 fallthrough in-addr.arpa ip6.arpa } prometheus :9153 # forward . /etc/resolv.conf { # 將forward DNS伺服器由resolv.conf中預設值修改為192.168.1.10 forward . 192.168.1.10 { prefer_udp } cache 30 log loop reload loadbalance }編輯後,CoreDNS會預設將非叢集內的網域名稱解析轉寄到
192.168.1.10對應的DNS伺服器進行解析,您可以自行替換此IP地址為任何期望的DNS伺服器。
相關文檔
非託管版本CoreDNS支援使用者自行配置CoreDNS相關配置,關於如何進行具體配置,請參見非託管CoreDNS配置說明。
要瞭解如何對叢集內Pod的DNS策略和網域名稱解析進行配置,請參見DNS解析及緩衝策略說明。
遇到各類CoreDNS相關問題的排查指南,請參見DNS解析異常問題排查。