Spring Cloud Kubernetes 配置服务器
Spring Cloud Kubernetes 配置服务器基于 Spring Cloud Config Server,并为 Kubernetes 的 Config Maps 和 Secrets 添加了一个环境仓库。
此组件是完全可选的。但是,它可以让你继续利用可能存储在现有环境仓库(Git、SVN、Vault 等)中的配置,用于你在 Kubernetes 上运行的应用。
Docker Hub 上提供了一个默认镜像,可以让你轻松地在 Kubernetes 上部署 Config Server,而无需自己构建代码和镜像。但是,如果你需要定制 Config Server 的行为或偏好自己构建镜像,可以轻松地从 GitHub 上的源代码构建你自己的镜像并使用它。
配置
启用 Kubernetes 环境仓库
要启用 Kubernetes 环境仓库,kubernetes
profile 必须包含在活动 profiles 列表中。你也可以激活其他 profiles 来使用其他的环境仓库实现。
Config Map 和 Secret PropertySources
默认情况下,只会抓取 Config Map 数据。要同时启用 Secrets,你需要设置 spring.cloud.kubernetes.secrets.enableApi=true
。你可以通过设置 spring.cloud.kubernetes.config.enableApi=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 特性,必须在 classpath 中包含 spring-vault-core
。默认情况下,Spring Cloud Kubernetes 可以生成用于将 Config Server 部署到 Kubernetes 的 Docker 镜像,但它不包含 spring-vault-core
。如果你需要 spring-vault-core
来启用 Config Server 中的特定功能,可以在运行 Maven 构建时通过启用 vault
Maven profile 来构建自己的 Docker 镜像版本。
示例
$ ../../mvnw clean install -Pvault
部署 Yaml
下面是一个示例部署、服务和权限配置,你可以使用它来将一个基本的 Config Server 部署到 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