全部產品
Search
文件中心

Container Compute Service:在ACS叢集內使用非託管CoreDNS

更新時間:Dec 12, 2024

特定情境下,由於業務存在高度定製化的需求,您可能需要自行管理並營運CoreDNS。ACS叢集支援使用非託管版本CoreDNS,方便在最大程度上自訂CoreDNS配置,本文介紹在ACS叢集使用非託管CoreDNS組件的步驟方法。

前提條件

  • 已建立ACS叢集。具體操作,請參見建立ACS叢集。若叢集已經開啟了CoreDNS,請參照本文檔在安裝步驟中卸載託管的CoreDNS。

  • 新建立叢集時,需要選擇組件配置-服務發現-不開啟

重要
  • 非託管版本CoreDNS為開源社區標準組件,組件自身的資源成本開銷、營運管理職責由您自行承擔,組件使用過程中出現的問題由您自行解決。

  • ACS提供的組件模板預設使用Pod反親和機制強制多AZ打散,如果您的ACS僅配置使用了單可用性區域,多副本的CoreDNS僅會有一個副本可正常運行,建議您配置多可用性區域保證容災及可用性。

安裝步驟

  1. 登入容器計算服務控制台,在左側導覽列選擇叢集

  2. 叢集頁面,單擊目的地組群ID,然後在左側導覽列,選擇營運管理組件管理

  3. 【可選】選擇網路-CoreDNS(帶有託管標識),點擊卸載。 若組件列表中,沒有CoreDNS(帶有託管標識),可以跳過該步驟。

    image

    警告

    卸載CoreDNS會造成叢集內的網域名稱解析功能不可用, 請確保叢集內無業務流量時再進行操作。

  4. 選擇網路-CoreDNS(無託管標識),單擊安裝

    image

  5. 根據使用者自身需求進行安裝配置,確認無誤後,單擊確定進行組件安裝。

    重要

    若安裝CoreDNS時未配置CpuRequest,組件對應的ACS Pod可用CPU資源僅為250m,建議您合理配置CpuRequest值,避免Pod效能壓力過大導致叢集出現異常。

    image

  6. 通過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組件安裝成功。

  7. 進入叢集內任意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的相關配置。

  1. 執行以下命令,編輯CoreDNS的Corefile。

    kubectl -n kube-system edit cm coredns
  2. 使用以下內容修改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伺服器。

相關文檔