服務探索

本文件概述 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 應用程式 pingpong 部署在同一個 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 型應用程式中進行服務探索。
  • 您需要以用戶端為基礎的負載平衡。
  • 您需要獨立的健康狀態檢查。

後續步驟