Azure Kubernetes Service 中的 DNS 解析 (AKS)

適用於: ✔️ AKS 自動化 ✔️ AKS 標準

網域名稱系統(DNS)解析是 Azure Kubernetes Service(AKS)中的重要元件,可使 Pod 和服務透過易於理解的名稱互相通訊,而不需使用 IP 位址。 AKS 提供內建 DNS 服務,以確保內部叢集資源和外部端點的名稱解析順暢。 瞭解 DNS 在 AKS 中的運作方式,可協助叢集作員和開發人員確保可靠的連線能力、優化效能,以及有效地針對網路問題進行疑難解答。

AKS Automatic 是大多數 AKS 工作負載建議採用、適合正式環境使用的預設選項。 AKS Automatic 叢集預設了 LocalDNS,以提升 DNS 效能、降低 conntrack 壓力並提升韌性,且不需額外設定。

備註

從 Kubernetes 1.37 開始,AKS Standard 預設將 LocalDNS 模式套用 Preferred 給未明確設定 LocalDNS 設定檔的合格節點池。 在模式下 Preferred ,AKS 僅在節點池與叢集通過必要的相容性檢查時啟用 LocalDNS。 若檢查失敗,LocalDNS 仍會被停用。 明確設定的設定檔優先於此預設值,因此明確設定為的 Disabled 節點池仍會被停用。 為了防止 LocalDNS 被啟用,請明確將 LocalDNS 模式設為停用。 相關說明請參見 「在節點池上停用 LocalDNS」。

欲了解更多關於AKS自動的資訊,請參閱 「什麼是AKS自動?」

Azure Kubernetes Service 中的 CoreDNS

CoreDNS 是 AKS 的預設 DNS 服務。 它提供叢集中運行工作負載的內部名稱解析與服務發現。 它在命名空間中作為一組 pod kube-system 運作,並與 Kubernetes 網路緊密整合。

當 AKS 中的 pod 發出 DNS 查詢,例如解析其他服務名稱時,請求會傳送到 CoreDNS Pods。 這些 Pod 會處理查詢,並傳回適當的 IP 位址,或將要求轉送至外部網域的上游 DNS 伺服器。

此架構可確保在受控環境中彈性與作安全性之間取得平衡。 如需如何在 AKS 中自定義 CoreDNS 的詳細資訊,請參閱 CoreDNS 自定義指南。

當 LocalDNS 啟用時,解析路徑取決於 poddnsPolicyDefault(或 ClusterFirst)以及 LocalDNS 伺服器區塊的設定。 例如,當一個 pod 使用 dnsPolicy: Default時,外部 DNS 查詢會採取以下路徑:

Workload -> LocalDNS -> upstream DNS server

LocalDNS 作為 systemd 一個單元運行在節點上,因此它會先於 CoreDNS 接收查詢。 cluster.local 查詢會轉發至 CoreDNS,外部查詢則轉發至 CoreDNS 或直接傳送至虛擬網路(VNet)DNS 伺服器。 關於每個 DNS 政策的精確轉發行為及預設設定,請參見 LocalDNS 的伺服器區塊。

自訂的 VNet DNS 伺服器必須同時接受來自 AKS 節點的 UDP 與 TCP DNS 查詢 。 使用 PreferUDP 時,當 UDP 回應被截斷時,LocalDNS 會改以 TCP 重試。

如需 CoreDNS 專案的相關資訊,請參閱 CoreDNS 上游專案分頁。

LocalDNS in Azure Kubernetes Service

備註

本文概述了 LocalDNS 是什麼以及它在 AKS 中的好處。

對於 AKS 自動,LocalDNS 是預先設定好的。

關於 AKS 標準,請參閱 LocalDNS 操作指南 ,了解如何啟用與設定 LocalDNS。

概觀

LocalDNS 是 Azure Kubernetes Service (AKS) 中的進階功能,可在每個節點上部署域名系統 (DNS) Proxy,以提供高度彈性、低延遲的 DNS 解析。 透過本地處理 DNS 查詢,該代理減少 CoreDNS 附加裝置的流量,提升叢集整體 DNS 的可靠性與效能。 LocalDNS 在大型叢集或具有高 DNS 查詢量的環境中特別有用,其中集中式 DNS 解析可能會成為瓶頸。

啟用 LocalDNS 時,AKS 會將本機 DNS 快取部署為每個節點上的 systemd 服務。 節點上的 Pod 會將其 DNS 查詢傳送至此本機快取,藉由減少網路躍點來加快解析速度。 此方法也會將數據表使用量降至最低 conntrack ,降低數據表耗盡的風險。 此外,如果上游 DNS 變得不可用,LocalDNS 可以在可設定的持續時間內繼續提供緩存的回應,以協助維護 Pod 連線性和服務可靠性。

顯示 LocalDNS 架構的圖表。

LocalDNS 與 AKS 自動化

AKS Automatic 會預先設定 LocalDNS,作為其可用於生產環境的預設設定之一。 你不需要在 AKS 自動叢集上執行獨立的啟用指令。

請參考這篇文章了解 LocalDNS 的運作方式,以及它為何能改善 AKS 工作負載的 DNS 行為。 如果你需要啟用和設定 AKS 標準,請使用 LocalDNS 的操作指南。

主要功能

  • 降低 DNS 解析延遲:每個 AKS 節點都執行 LocalDNS systemd 服務。 節點上執行的工作負載會將 DNS 查詢傳送至此服務,以在本機解析這些查詢、減少網路躍點並加速 DNS 查閱。
  • 可自訂的 DNS 行為:在叢集中使用 kubeDNSOverrides 並 vnetDNSOverrides 控制 DNS 行為。
  • 避免 conntrack 競賽與 conntrack 資料表枯竭:Pods 會在同一節點向 LocalDNS 服務發送 DNS 查詢,且不會建立新的 conntrack 資料表條目。 略過連線追蹤有助於減少 Conntrack 競爭, 並避免使用者資料包通訊協定 (UDP) DNS 項目填滿 conntrack 資料表。 此最佳化可防止 conntrack 資料表耗盡和競爭狀況所造成的中斷和拒絕連線。
  • 連線升級至 TCP:快取與叢集 CoreDNS 服務的連線 localdns 使用傳輸控制協定(TCP)。 TCP 允許連線重新平衡,並在伺服器關閉連線時移除 conntrack 資料表條目(與預設 30 秒逾時的 UDP 連線相反)。 應用程式不需要變更,因為 localdns 服務仍會接聽UDP流量。
  • 快取:你可以使用 serveStale 和存留時間(TTL)設定來設定 LocalDNS 快取外掛。 設定 serveStale、 serveStaleDurationInSeconds和 cacheDurationInSeconds 參數,以達到 DNS 韌性,即使在上游 DNS 中斷時也要做到。
  • 協定控制:為每個網域設定偏好的 DNS 查詢協定,例如 PreferUDP 或 ForceTCP。 PreferUDP 不是只用 UDP 的指令。 解析器可以重試,或改用 TCP,因此上游自訂 DNS 伺服器與網路控制都必須支援 UDP 和 TCP 的 53 埠。

其他優點和考慮

優點 考慮事項
更好的延展性:減少集中式 CoreDNS Pod 上的負載 最少的資源負荷:在每個節點上使用少量的CPU和記憶體
無縫整合:不需要更改現有的應用程式連接 組態變更:更新需要節點映射升級,這可能會導致暫時中斷
封鎖無效的搜尋網域:防止節點層級的 DNS 查詢無效 可用性規劃:使用 AKS Standard 的團隊應評估 DNS 效能與韌性是否值得啟用 LocalDNS

AKS Automatic 與 AKS Standard 的行為

叢集模式 LocalDNS 的行為
AKS 自動化系统 預先設定
AKS 標準,Kubernetes 1.31 至 1.36 針對每個節點池明確設定
AKS 標準、Kubernetes 1.37 及更新版本 當沒有明確的 LocalDNS 設定檔時,將符合資格的節點集區預設為 Preferred。 LocalDNS 只有在相容性檢查通過後才會啟用。 明確的設定檔(包括 Disabled)會被保留。

藉由使用 LocalDNS,您可以更快速且更可靠的工作負載 DNS 解析、降低 DNS 相關中斷的風險,並進一步控制 AKS 環境中的 DNS 流量。