14. Spring Cloud Kubernetes Config Server
Spring Cloud Kubernetes 配置服务器基于 Spring Cloud Config Server,并为 Kubernetes 添加了一个 环境仓库,用于管理 Config Maps 和 Secrets。
此组件完全可选。然而,它允许您继续利用现有环境存储库(Git、SVN、Vault 等)中已有的配置,用于在 Kubernetes 上运行的应用程序。
一个默认镜像位于 Docker Hub,这将允许您轻松地在 Kubernetes 上部署 Config Server,而无需自行构建代码和镜像。然而,如果您需要自定义 Config Server 的行为,或更倾向于自行构建镜像,您可以轻松地从 GitHub 上的源代码 构建自己的镜像并使用它。
14.1. 配置
14.1.1. 启用 Kubernetes 环境仓库
要启用 Kubernetes 环境仓库,必须将 kubernetes 配置文件包含在活动配置文件列表中。您还可以激活其他配置文件,以使用其他环境仓库实现。
14.1.2. 配置映射和密钥属性源
默认情况下,仅会获取配置映射(Config Map)数据。若要同时启用密钥(Secrets),您需要将 spring.cloud.kubernetes.secrets.enableApi=true 设置为开启状态。您可以通过将 spring.cloud.kubernetes.config.enableApi=false 设置为关闭来禁用配置映射 PropertySource。
14.1.3. 从其他命名空间获取配置映射和密钥数据
默认情况下,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,则需要包含配置服务器部署的命名空间,以便继续从该命名空间中获取配置映射和密钥数据。 |
14.1.4. Kubernetes 访问控制
Kubernetes 配置服务器使用 Kubernetes API 服务器来获取 Config Map 和 Secret 数据。为了实现这一点,它需要能够根据你启用或禁用的情况来 get 和 list Config Map 和 Secrets。
14.2. 部署 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