本頁面說明 Google Kubernetes Engine (GKE) 如何實作服務探索和叢集 DNS。
服務探索
在 Kubernetes 中,服務探索作業是透過自動產生的服務名稱實作,這些名稱會對應至服務的 IP 位址。服務名稱遵循標準規格,格式如下:my-svc.my-namespace.svc.cluster.local
。Pod 也可以透過名稱存取外部服務,例如 example.com
。如要進一步瞭解 Kubernetes 中的 DNS 運作方式,請參閱「服務和 Pod 的 DNS」。
GKE 中的叢集 DNS
新的 Autopilot 叢集會使用 Cloud DNS,且您無法修改 DNS 供應商。
在 Standard 叢集中,GKE 提供下列叢集 DNS 選項,可解析服務名稱和外部名稱:
- kube-dns:叢集外掛程式,預設會部署在所有 GKE 叢集中。
- Cloud DNS:雲端代管叢集 DNS 基礎架構,採用 Cloud DNS,不需要管理叢集內 DNS 伺服器 (例如 kube-dns)。
您也可以使用 Service Directory for GKE 註冊服務。
GKE 也提供 NodeLocal DNSCache 做為選用外掛程式,可與 kube-dns 或 Cloud DNS 搭配使用。
kube-dns
kube-dns 是 Standard 叢集的預設 DNS 供應商,也是執行 1.25.9-gke.400 和 1.26.4-gke.500 之前版本的 Autopilot 叢集唯一 DNS 供應商。
kube-dns 會以 Deployment 形式執行,將 kube-dns Pod 排程至叢集中的節點。
如要進一步瞭解 kube-dns,請參閱「使用 kube-dns」。
Cloud DNS
針對執行 1.25.9-gke.400 以上版本和 1.26.4-gke.500 以上版本的 Autopilot 叢集,Cloud DNS 是唯一的 DNS 供應商。
Cloud DNS 可提供 Pod 和服務 DNS 解析,無須使用 kube-dns 等叢集代管 DNS 供應商。Cloud DNS 控制器會自動為 ClusterIP、無頭和外部名稱服務,在 Cloud DNS 中佈建 Pod 和服務的 DNS 記錄。
如要瞭解如何設定 Cloud DNS,請參閱「將 Cloud DNS 用於 GKE」一文。
NodeLocal DNSCache
NodeLocal DNSCache 會以 DaemonSet 形式執行,在每個叢集節點上排程 DNS 快取 Pod。這個 DNS 快取可縮短 DNS 查詢延遲時間、讓 DNS 查詢時間更一致,並減少對 kube-dns 或 Cloud DNS 的 DNS 查詢次數。
如要瞭解如何設定 NodeLocal DNSCache,請參閱「設定 NodeLocal DNSCache」。
單一叢集外的服務探索
您可以使用下列其中一種方法,設定單一叢集範圍以外的服務探索。
Cloud DNS 虛擬私有雲範圍
使用 Cloud DNS 做為叢集 DNS 的叢集,必須在兩種可用模式之一運作:GKE 叢集範圍或虛擬私有雲 (VPC) 範圍。
在叢集範圍內設定叢集時,DNS 記錄只能使用 <svc>.<ns>.svc.cluster.local
結構定義在叢集內解析。這與 kube-dns 的行為相同。
在虛擬私有雲範圍內設定叢集時,整個虛擬私有雲都可以解析叢集服務的 DNS 記錄。也就是說,與虛擬私有雲連線的用戶端,或透過 Cloud VPN 或 Cloud Interconnect 連線至虛擬私有雲的用戶端,可以直接解析 GKE 叢集中服務的 DNS 記錄。您也可以設定專屬的叢集 DNS 名稱,讓非 GKE 用戶端解析 DNS 記錄。舉例來說,非 GKE 用戶端可以從 gke-svc.ns.svc.cluster2
解析 gke-svc.ns.svc.cluster1
。
如要進一步瞭解虛擬私有雲範圍 DNS,請參閱「將 Cloud DNS 用於 GKE」的說明。
多叢集 Service
多叢集服務可為 GKE 提供多叢集服務探索和負載平衡功能,並運用現有的服務物件。多叢集服務可透過單一虛擬 IP 位址,在任何 GKE 叢集中探索及存取。這與可在單一叢集中存取的 ClusterIP 服務行為相同。
多叢集服務會彙整各叢集的服務,並使用 <svc>.<ns>.svc.clusterset.local
結構定義,將這些服務設為可透過單一多叢集 DNS 記錄定址。這會為特定服務提供一致且可從任何 GKE 叢集存取的專屬名稱,並使用多叢集服務。
如要進一步瞭解多叢集服務,請參閱多叢集服務。
Service Directory for GKE
GKE 適用的 Service Directory 可集中檢視所有 Kubernetes 部署作業中的服務。Service Directory 可在單一登錄中註冊 GKE 和非 GKE 服務。如果您有下列需求,就很適合使用服務目錄:
- Kubernetes 和非 Kubernetes 應用程式可透過單一登錄檔互相探索。
- 代管服務探索工具。
- 儲存可供其他用戶端存取的服務中繼資料。
- 在服務層級設定存取權。
Service Directory 服務可透過 DNS、HTTP 和 gRPC 解析。Service Directory 與 Cloud DNS 整合,可填入與 Service Directory 中服務相符的 Cloud DNS 記錄。
詳情請參閱「為 GKE 設定 Service Directory」。
/etc/resolv.conf
如果 Pod 使用 ClusterFirst
DNS 政策,/etc/resolv.conf
的值取決於叢集上啟用的功能:
GKE 適用的 Cloud DNS | NodeLocal DNSCache | /etc/resolv.conf 值 |
---|---|---|
已啟用 | 已啟用 | 169.254.20.10 |
已啟用 | 已停用 | 169.254.169.254 |
已停用 | 已啟用 | kube-dns 服務 IP 位址 |
已停用 | 已停用 | kube-dns 服務 IP 位址 |
後續步驟
- 瞭解如何使用 Cloud DNS for GKE。
- 瞭解如何使用 NodeLocal DNSCache,為需要大量 DNS 查詢的叢集提供可擴充的 DNS 解析。