Spring Cloud Kubernetes 配置服务器
Spring Cloud Kubernetes Config Server 基于 Spring Cloud Config Server,为 Kubernetes Config Maps 和 Secrets 添加了一个环境存储库。
此组件完全是可选的。但是,它允许您继续利用配置您可能已将您在 Kubernetes 上运行的应用程序存储在现有环境存储库(Git、SVN、Vault 等)中。
默认镜像位于 Docker Hub 上,这将允许您轻松地在 Kubernetes 上部署配置服务器,而无需构建 代码和图像自己。但是,如果您需要自定义配置服务器行为或更喜欢自己构建镜像,您可以轻松构建自己的镜像 图像来自 GitHub 上的源代码并使用它。
配置
配置映射和机密属性源
默认情况下,仅获取配置映射数据。要启用 Secrets,您需要将spring.cloud.kubernetes.secrets.enableApi=true.
您可以禁用配置映射PropertySource通过设置spring.cloud.kubernetes.config.enableApi=false.
从其他命名空间获取配置映射和机密数据
默认情况下,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您需要包括部署配置服务器的命名空间,以便继续从该命名空间获取配置映射和密钥数据。 |
使用 Spring Vault 的高级功能
为了使用 Spring Cloud Config Server 的一些更高级的 Spring Vault 功能,spring-vault-core必须在类路径上。默认情况下,Spring Cloud Kubernetes 可以生成一个 Docker 镜像,用于将 Config Server 部署到 Kubernetes,但它不包括spring-vault-core在类路径中。如果需要spring-vault-core要在 Config Server 中启用某些功能,您可以通过启用vault运行 Maven build 时的 Maven 配置文件。
例:
$ ../../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