14. Spring Cloud Kubernetes 配置服务器
Spring Cloud Kubernetes Config Server 基于 Spring Cloud Config Server,为 Kubernetes Config Maps 和 Secrets 添加了一个环境存储库。
这是组件完全可选的。但是,它允许您继续利用配置 您可能已经将您在 Kubernetes 上运行的应用程序存储在现有环境存储库(Git、SVN、Vault 等)中。
默认镜像位于 Docker Hub 上,这将允许您轻松地在 Kubernetes 上部署配置服务器,而无需构建 代码和图像自己。但是,如果您需要自定义配置服务器行为或更喜欢自己构建镜像,您可以轻松构建自己的镜像 图像来自 GitHub 上的源代码并使用它。
14.1. 配置
14.1.1. 启用 Kubernetes 环境存储库
要启用 Kubernetes 环境存储库,请kubernetes
配置文件必须包含在活动配置文件列表中。
您也可以激活其他配置文件以使用其他环境存储库实现。
14.1.2. 配置映射和秘密属性源
默认情况下,仅获取配置映射数据。要启用 Secrets,您需要将spring.cloud.kubernetes.secrets.enableApi=true
.
您可以禁用配置映射PropertySource
通过设置spring.cloud.kubernetes.config.enableApi=false
.
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 Config Server 使用 Kubernetes API 服务器来获取 Config Map 和 Secret 数据。为了做到这一点
它需要能够get
和list
配置映射和密钥(取决于您启用/禁用的内容)。
14.2. 部署 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