自動化 Kubernetes 中的 DNS 管理:使用 ExternalDNS
ExternalDNS 是一個第三方的開源工具,專為 Kubernetes 集群的 DNS 記錄管理自動化而設計。它與 Kubernetes 無縫集成,能根據集群的變更動態更新 DNS 記錄,從而實現服務、API 和應用的自動化公開。最初,ExternalDNS 是為支持 AWS Route53 和 Google CloudDNS 開發的,現已擴展支持眾多 DNS 提供商,使其成為雲原生環境中多功能的選擇。
ExternalDNS 的關鍵概念
ExternalDNS 通過監控 Kubernetes 資源(如 Service、Ingress 和 Istio Gateway)作為“來源”,這些資源代表網絡端點。它使用 Kubernetes 的控制器模式將這些來源與 DNS 記錄進行匹配,確保記錄與基礎設施變更保持同步。
資源類型
ExternalDNS 的主要資源類型包括:
- Service (LoadBalancer 類型):常用於高可用性應用。
- Ingress:根據路由規則管理對服務的訪問。
- 自定義資源 (CRD):擴展 ExternalDNS 與其他 Kubernetes 配置的兼容性。
每種資源都與一個 ExternalDNS 實例相關聯,該實例會根據配置在 DNS 提供商處對這些資源進行同步。
- name: external-dns
image: //third_party/docker:external_dns
args:
- --source=ingress
- --source=service
主機名註解
ExternalDNS 探測到資源後,需透過主機名(hostname)來識別指向該資源的 DNS 記錄。主機名註解通過指定記錄名稱來實現此功能。
metadata:
annotations:
external-dns.alpha.kubernetes.io/hostname: api.example.io
此註解指示 ExternalDNS 創建或更新 api.example.io
為主機名的 DNS 記錄。
DNS 提供商與整合
ExternalDNS 支援多種 DNS 提供商,這使其成為多雲設置中的靈活選擇。DNS 提供商或“整合”允許它在平台(如 AWS Route53、Google CloudDNS 和 Azure DNS)上更新記錄。提供商配置作為 ExternalDNS 容器的參數進行指定:
- name: external-dns
image: //third_party/docker:external_dns
args:
- --provider=aws
ExternalDNS 的策略與註冊表
策略模式
ExternalDNS 的策略定義了它如何與 DNS 提供商交互。可用的策略包括:
- 同步 (Sync):支持創建、更新和刪除操作。
- 僅新增或更新 (Upsert-only):僅允許創建和更新,防止意外刪除。
- 僅創建 (Create-only):限制操作僅限於創建新記錄。
使用 upsert-only 策略可確保根據需要創建或更新 DNS 記錄,而不會發生意外刪除:
- name: external-dns
image: //third_party/docker:external_dns
args:
- --policy=upsert-only
註冊表選項
為了維持特定記錄的所有權與控制,ExternalDNS 使用註冊表記錄其所有權。TXT 註冊表 是一個常用選項,會在 ExternalDNS 管理的 DNS 記錄旁邊添加一條 TXT 記錄。該 TXT 記錄可識別所有權,幫助區分手動創建或由其他工具(如 Terraform)創建的記錄。
- name: external-dns
image: //third_party/docker:external_dns
args:
- --registry=txt
ExternalDNS 的控制迴路
ExternalDNS 定期調整 DNS 記錄以匹配資源所定義的目標狀態。此調整通過控制迴路進行,可設置為定期執行或響應特定事件:
- 間隔 (Interval):按設定的週期執行,將 DNS 記錄更新為 Kubernetes 物件的當前狀態。
- 事件 (Events):響應特定來源變更觸發更新,提供更快的響應速度。
以下配置設置了 10 分鐘的調整間隔,並啟用了基於事件的更新:
- name: external-dns
image: //third_party/docker:external_dns
args:
- --interval=10m
- --events
結論
ExternalDNS 是一種強大的工具,可在 Kubernetes 環境中實現 DNS 記錄管理自動化。透過與多個 DNS 提供商的集成以及靈活的策略和註冊表選項,它減少了 DNS 管理的手動負擔,確保記錄與服務端點同步。ExternalDNS 在雲原生設置中是一個寶貴的工具,能自動公開核心服務和 API,並維持運營效率。