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.enabled 和 spring.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 應用程式可以輕鬆地使用這些資料,根據環境動態配置自身。