本文件概述 Kubernetes 以 DNS 為基礎的服務探索功能,以及如何與 Kf 搭配使用。
何時應使用 Kf 搭配 Kubernetes 服務探索功能
無論應用程式部署在何處,如果需要以一致的方式找出後端服務,即可使用 Kubernetes 服務探索功能。舉例來說,團隊可能會在設定中使用常見的 URI,讓 URI 一律指向本機 SMTP 閘道,藉此將程式碼與執行環境分離。
服務探索可協助應用程式團隊:
- 減少每個環境的設定數量。
- 將用戶端和伺服器應用程式分離。
- 允許應用程式移植至新環境。
您可以在下列情況下使用 Kubernetes 服務探索功能:
- 應用程式會使用容器的 DNS 設定來解析主機。
- 應用程式會與其後端服務一併部署在同一個 Kubernetes 叢集或命名空間中。
- 備援服務會連結至 Kubernetes 服務。Kf 會為每個應用程式建立這些檔案。
- Kubernetes NetworkPolicies 可允許應用程式與需要通訊的 Kubernetes 服務之間的流量。Kf 會在每個 Kf 空間中建立這些政策。
在下列情況下,不應使用 Kubernetes 服務探索功能:
- 應用程式需要在多個叢集之間進行容錯移轉。
- 您會覆寫應用程式使用的 DNS 解析器。
- 應用程式需要特定類型的負載平衡。
Kubernetes 服務探索的運作方式
Kubernetes 服務探索功能會修改在 Kubernetes 節點上執行的容器 DNS 設定。當應用程式查詢未經過認證的網域名稱時,本機 DNS 解析器會先嘗試在本機叢集中解析該名稱。
沒有多個部分的網域會根據容器命名空間中的 Kubernetes 服務名稱進行解析。每個 Kf 應用程式都會建立名稱相同的 Kubernetes 服務。如果兩個 KF 應用程式 ping
和 pong
部署在同一個 KF 空間中,ping
就可以使用網址 http://pong
將流量傳送至其他服務。
含有單一點的網域會根據 Kubernetes 命名空間中的 Kubernetes 服務解析,該服務的名稱與點號後方的標籤相同。舉例來說,如果有一個 PostgreSQL 資料庫,其中包含 database
命名空間中的 customers
服務,其他命名空間中的應用程式就能使用 postgres://customers.database
解析該服務。
如何搭配使用 Kf 和服務探索功能
以 Kubernetes DNS 為基礎的服務探索功能可用於任何 Kf 應用程式。每個 Kf 應用程式都會建立同名的 Kubernetes 服務,而每個 Kf 空間都會建立同名的 Kubernetes 命名空間。
- 使用
protocol://app-name
參照目前空間中的 Kf 應用程式。 - 使用
protocol://app-name.space-name
參照不同空間中的 Kf 應用程式。 - 在目前空間中參照使用
protocol://app-name:port
監聽自訂通訊埠的 Kf 應用程式。 - 請參閱在其他空間中使用
protocol://app-name.space-name:port
監聽自訂通訊埠的 Kf 應用程式。
最佳做法
將成為 DNS 型服務探索目標的應用程式,應經常進行健康狀態檢查,確保可快速新增及移除接受連線的主機集區。
使用以 DNS 為基礎的服務探索功能的應用程式不應快取已解析服務的 IP 位址,因為這些 IP 位址不保證穩定。
如果叢集外有環境專屬服務,只要您設定ExternalName Kubernetes 服務,即可使用 Kubernetes DNS 解析這些服務。這些 Kubernetes 服務提供相同的解析功能,但會傳回 CNAME 記錄,將要求重新導向至外部授權機構。
與 Eureka 的比較
Eureka 是由 Netflix 建立的開放原始碼用戶端負載平衡器。這項服務通常用於 Spring Cloud Services 服務仲介。Eureka 是一種區域負載平衡器和服務探索機制,適用於在經常發生工作負載中斷情形的環境中執行的服務,這類情形會導致 IP 位址不穩定。
Eureka 的設計是以用戶端/伺服器模型為基礎。用戶端會向伺服器註冊自己,指出要與哪些名稱建立關聯,並定期傳送伺服器心跳信號。伺服器會允許所有已連線的用戶端解析名稱。
一般來說,您應該在 Kubernetes 中使用 Kubernetes DNS,而非 Eureka,原因如下:
- DNS 可搭配所有程式設計語言和應用程式使用,不需要程式庫。
- 應用程式現有的健康狀態檢查會重複使用,減少錯誤組合。
- Kubernetes 會管理 DNS 伺服器,讓您依賴的依附元件更少。
- Kubernetes DNS 會遵循與其他 Kubernetes 相同的政策和 RBAC 限制。
部署 Eureka 伺服器有幾項優點:
- 您需要在 Kubernetes 和 VM 型應用程式中進行服務探索。
- 您需要以用戶端為基礎的負載平衡。
- 您需要獨立的健康狀態檢查。
後續步驟
- 進一步瞭解 GKE 中的服務探索功能。
- 瞭解 Service Directory,這是類似 Eureka 的代管服務。