Spring Cloud Kubernetes 配置伺服器
Spring Cloud Kubernetes 配置伺服器基於 Spring Cloud Config Server,併為 Kubernetes Config Maps 和 Secrets 添加了一個環境儲存庫。
此元件是完全可選的。但是,它允許您繼續利用可能儲存在現有環境儲存庫(Git、SVN、Vault 等)中的配置,並將其用於在 Kubernetes 上執行的應用程式。
您可以從 GitHub 上的原始碼 構建一個 Docker 映象,並使用它部署到 Kubernetes。
配置
Config Map 和 Secret PropertySources
預設情況下,只獲取 Config Map 資料。要同時啟用 Secrets,您需要設定 spring.cloud.kubernetes.secrets.enabled=true。您可以透過設定 spring.cloud.kubernetes.config.enabled=false 來停用 Config Map PropertySource。
從其他名稱空間獲取 Config Map 和 Secret 資料
預設情況下,Kubernetes 環境儲存庫將僅從其部署所在的名稱空間獲取 Config Map 和 Secrets。如果您想包含來自其他名稱空間的資料,可以將 spring.cloud.kubernetes.configserver.config-map-namespaces 和/或 spring.cloud.kubernetes.configserver.secrets-namespaces 設定為逗號分隔的名稱空間值列表。
如果您設定了 spring.cloud.kubernetes.configserver.config-map-namespaces 和/或 spring.cloud.kubernetes.configserver.secrets-namespaces,您將需要包含 Config Server 部署所在的名稱空間,以便繼續從該名稱空間獲取 Config Map 和 Secret 資料。 |
使用 Spring Vault 的高階功能
為了使用 Spring Cloud Config Server 的一些更高階的 Spring Vault 功能,spring-vault-core 必須在類路徑中。預設情況下,Spring Cloud Kubernetes 可以為部署 Config Server 到 Kubernetes 生成 Docker 映象,但它不包含 spring-vault-core 在類路徑中。如果您需要 spring-vault-core 來啟用 Config Server 中的某些功能,您可以在執行 Maven 構建時啟用 vault Maven 配置檔案來構建您自己的 Docker 映象版本。
示例
$ ../../mvnw clean install -Pvault
部署 Yaml
下面是一個示例部署、服務和許可權配置,您可以使用它將基本配置伺服器部署到 Kubernetes。
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: Service
metadata:
labels:
app: spring-cloud-kubernetes-configserver
name: spring-cloud-kubernetes-configserver
spec:
ports:
- name: http
port: 8888
targetPort: 8888
selector:
app: spring-cloud-kubernetes-configserver
type: ClusterIP
- apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: spring-cloud-kubernetes-configserver
name: spring-cloud-kubernetes-configserver
- apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app: spring-cloud-kubernetes-configserver
name: spring-cloud-kubernetes-configserver:view
roleRef:
kind: Role
apiGroup: rbac.authorization.k8s.io
name: namespace-reader
subjects:
- kind: ServiceAccount
name: spring-cloud-kubernetes-configserver
- apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: namespace-reader
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["configmaps", "secrets"]
verbs: ["get", "list"]
- apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-kubernetes-configserver-deployment
spec:
selector:
matchLabels:
app: spring-cloud-kubernetes-configserver
template:
metadata:
labels:
app: spring-cloud-kubernetes-configserver
spec:
serviceAccount: spring-cloud-kubernetes-configserver
containers:
- name: spring-cloud-kubernetes-configserver
image: springcloud/spring-cloud-kubernetes-configserver
imagePullPolicy: IfNotPresent
env:
- name: SPRING_PROFILES_INCLUDE
value: "kubernetes"
readinessProbe:
httpGet:
port: 8888
path: /actuator/health/readiness
livenessProbe:
httpGet:
port: 8888
path: /actuator/health/liveness
ports:
- containerPort: 8888