Kubernetes 生態系統感知
本指南前面描述的所有功能都能正常工作,無論您的應用程式是否在 Kubernetes 內部執行。這對於開發和故障排除非常有幫助。從開發角度來看,這允許您啟動 Spring Boot 應用程式並除錯此專案的一部分模組。您無需將其部署到 Kubernetes,因為專案的程式碼依賴於 Fabric8 Kubernetes Java 客戶端,它是一個流暢的 DSL,可以使用 http
協議與 Kubernetes Server 的 REST API 通訊。
Kubernetes 感知基於 Spring Boot API,特別是 ConditionalOnCloudPlatform。該屬性將自動檢測您的應用程式當前是否部署在 kubernetes 中。可以透過 spring.main.cloud-platform
覆蓋此設定。
例如,如果您需要測試某些功能,但不想部署到叢集,只需設定:spring.main.cloud-platform=KUBERNETES
。這將使 spring-cloud-kubernetes
的行為如同部署在真實的叢集中一樣。
如果您的 classpath 中有 spring-cloud-starter-bootstrap 或正在設定 spring.cloud.bootstrap.enabled=true ,那麼您必須將 spring.main.cloud-platform 設定在 bootstrap.{properties|yml} 中(或特定 profile 的檔案中)。另請注意,當您的 classpath 中有 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 Profile 自動配置
當應用程式作為 pod 在 Kubernetes 內部執行時,名為 kubernetes
的 Spring profile 會自動啟用。這允許您自定義配置,以定義在 Spring Boot 應用程式部署到 Kubernetes 平臺時應用的 bean(例如,不同的開發和生產配置)。
Istio 感知
當您在應用程式 classpath 中包含 spring-cloud-kubernetes-fabric8-istio
模組時,如果應用程式執行在安裝了 Istio 的 Kubernetes 叢集中,則會嚮應用程式新增一個新的 profile。然後,您可以在 Bean 和 @Configuration
類中使用 spring @Profile("istio")
註解。
Istio 感知模組使用 me.snowdrop:istio-client
與 Istio API 互動,使我們能夠發現流量規則、熔斷器等,從而使我們的 Spring Boot 應用程式易於消費這些資料,並根據環境動態配置自身。