14. Spring Cloud Kubernetes Config Server

Spring Cloud Kubernetes 配置服务器基于 Spring Cloud Config Server,并为 Kubernetes 添加了一个 环境仓库,用于管理 Config MapsSecretsspring-doc.cadn.net.cn

此组件完全可选。然而,它允许您继续利用现有环境存储库(Git、SVN、Vault 等)中已有的配置,用于在 Kubernetes 上运行的应用程序。spring-doc.cadn.net.cn

一个默认镜像位于 Docker Hub,这将允许您轻松地在 Kubernetes 上部署 Config Server,而无需自行构建代码和镜像。然而,如果您需要自定义 Config Server 的行为,或更倾向于自行构建镜像,您可以轻松地从 GitHub 上的源代码 构建自己的镜像并使用它。spring-doc.cadn.net.cn

14.1. 配置

14.1.1. 启用 Kubernetes 环境仓库

要启用 Kubernetes 环境仓库,必须将 kubernetes 配置文件包含在活动配置文件列表中。您还可以激活其他配置文件,以使用其他环境仓库实现。spring-doc.cadn.net.cn

14.1.2. 配置映射和密钥属性源

默认情况下,仅会获取配置映射(Config Map)数据。若要同时启用密钥(Secrets),您需要将 spring.cloud.kubernetes.secrets.enableApi=true 设置为开启状态。您可以通过将 spring.cloud.kubernetes.config.enableApi=false 设置为关闭来禁用配置映射 PropertySourcespring-doc.cadn.net.cn

14.1.3. 从其他命名空间获取配置映射和密钥数据

默认情况下,Kubernetes 环境仓库仅会从其部署的命名空间中获取 Config Map 和 Secrets。如果希望包含其他命名空间中的数据,您可以将 spring.cloud.kubernetes.configserver.config-map-namespaces 和/或 spring.cloud.kubernetes.configserver.secrets-namespaces 设置为以逗号分隔的命名空间值列表。spring-doc.cadn.net.cn

如果您设置 spring.cloud.kubernetes.configserver.config-map-namespaces 和/或 spring.cloud.kubernetes.configserver.secrets-namespaces,则需要包含配置服务器部署的命名空间,以便继续从该命名空间中获取配置映射和密钥数据。

14.1.4. Kubernetes 访问控制

Kubernetes 配置服务器使用 Kubernetes API 服务器来获取 Config Map 和 Secret 数据。为了实现这一点,它需要能够根据你启用或禁用的情况来 getlist Config Map 和 Secrets。spring-doc.cadn.net.cn

14.2. 部署 Yaml

下面是一些可用于将基本配置服务器部署到Kubernetes的示例部署、服务和权限配置。spring-doc.cadn.net.cn

---
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