Kubernetes 生態系統感知

本指南先前描述的所有功能都能良好運作,無論您的應用程式是否在 Kubernetes 內部執行。這對於開發和疑難排解非常有幫助。從開發的角度來看,這讓您可以啟動您的 Spring Boot 應用程式,並對屬於此專案一部分的模組進行偵錯。您無需將其部署在 Kubernetes 中,因為專案的程式碼依賴 Fabric8 Kubernetes Java client,這是一個流暢的 DSL,可以使用 http 協定與 Kubernetes Server 的 REST API 通訊。

Kubernetes 感知是基於 Spring Boot API,特別是 ConditionalOnCloudPlatform。該屬性將自動偵測您的應用程式目前是否部署在 Kubernetes 中。可以透過 spring.main.cloud-platform 覆寫該設定。

例如,如果您需要測試某些功能,但不想部署到叢集,只需設定: spring.main.cloud-platform=KUBERNETES。這將使 spring-cloud-kubernetes 表現得如同部署在真實叢集中。

如果您在類別路徑上有 spring-cloud-starter-bootstrap,或正在設定 spring.cloud.bootstrap.enabled=true,則您必須在 bootstrap.{properties|yml} (或特定設定檔) 中設定 spring.main.cloud-platform。另請注意,當您在類別路徑上有 spring-cloud-starter-bootstrap 或正在設定 spring.cloud.bootstrap.enabled=true 時,這些屬性:spring.cloud.kubernetes.config.enabledspring.cloud.kubernetes.secrets.enabled 只有在 bootstrap.{properties|yml} 中設定時才會生效。

3.0.x 中的重大變更

在 3.0.x 之前的 Spring Cloud Kubernetes 版本中,Kubernetes 感知是使用 spring.cloud.kubernetes.enabled 屬性實作的。此屬性已移除且不再支援。現在,我們使用 Spring Boot API:ConditionalOnCloudPlatform。如果需要明確啟用或停用此感知,請使用 spring.main.cloud-platform=NONE/KUBERNETES

  • 另一個重大變更是載入 configmaps/secrets 時需要額外的 list 動詞。例如

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-role
rules:
  - apiGroups: ["", "extensions", "apps", "discovery.k8s.io"]
    resources: ["configmaps", "pods", "services", "endpoints", "secrets", "endpointslices"]
    verbs: ["get", "list", "watch"]

Kubernetes 設定檔自動配置

當應用程式作為 Pod 在 Kubernetes 內部執行時,名為 kubernetes 的 Spring 設定檔會自動啟用。這讓您可以自訂配置,以定義在 Spring Boot 應用程式部署在 Kubernetes 平台內時套用的 bean (例如,不同的開發和生產配置)。

Istio 感知

當您在應用程式類別路徑中包含 spring-cloud-kubernetes-fabric8-istio 模組時,如果應用程式在安裝了 Istio 的 Kubernetes 叢集內部執行,則會將新的設定檔新增至應用程式。然後您可以在您的 Bean 和 @Configuration 類別中使用 spring @Profile("istio") 註釋。

Istio 感知模組使用 me.snowdrop:istio-client 與 Istio API 互動,讓我們發現流量規則、斷路器等等,使我們的 Spring Boot 應用程式可以輕鬆地使用這些資料,根據環境動態配置自身。