Kubernetes 生態系統感知
本指南前面描述的所有功能都能很好地工作,無論您的應用程式是否在 Kubernetes 內部執行。這對於開發和故障排除非常有幫助。從開發角度來看,這允許您啟動 Spring Boot 應用程式並除錯該專案中的某個模組。您無需將其部署到 Kubernetes 中,因為該專案的程式碼依賴於 Fabric8 Kubernetes Java 客戶端,這是一個流式 DSL,可以透過 http 協議與 Kubernetes 伺服器的 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,那麼 spring.main.cloud-platform 應該在 bootstrap.{properties|yml}(或特定配置檔案)中設定。另請注意,當您的類路徑中包含 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 應用程式能夠輕鬆地使用這些資料來根據環境動態配置自身。