Spring Cloud Kubernetes Config Server 基于 Spring Cloud Config Server,并为 Kubernetes Config MapsSecrets 添加了一个环境存储库Spring中文文档

这是完全可选的组件。但是,它允许您继续利用配置 您可能已将在 Kubernetes 上运行的应用程序存储在现有环境存储库(Git、SVN、Vault 等)中。Spring中文文档

默认映像位于 Docker Hub 上,它允许您轻松地在 Kubernetes 上部署 Config Server,而无需构建 代码和图像自己。但是,如果您需要自定义配置服务器行为或更喜欢自己构建映像,则可以轻松构建自己的映像 来自 GitHub 源代码的图像并使用它。Spring中文文档

配置

启用 Kubernetes 环境存储库

要启用 Kubernetes 环境存储库,配置文件必须包含在活动配置文件列表中。 您也可以激活其他配置文件以使用其他环境存储库实现。kubernetesSpring中文文档

配置映射和机密 PropertySources

默认情况下,仅获取 Config Map 数据。要启用 Secrets,您需要设置 . 您可以通过设置 来禁用配置映射。spring.cloud.kubernetes.secrets.enableApi=truePropertySourcespring.cloud.kubernetes.config.enableApi=falseSpring中文文档

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

默认情况下,Kubernetes 环境存储库只会从部署它的命名空间中获取 Config Map 和 Secrets。 如果要包含来自其他命名空间的数据,可以设置为逗号分隔 命名空间值的列表。spring.cloud.kubernetes.configserver.config-map-namespacesspring.cloud.kubernetes.configserver.secrets-namespacesSpring中文文档

如果设置和/或需要包含部署 Config Server 的命名空间,以便继续从该命名空间获取 Config Map 和 Secret 数据。spring.cloud.kubernetes.configserver.config-map-namespacesspring.cloud.kubernetes.configserver.secrets-namespaces

Kubernetes 访问控制

Kubernetes Config Server 使用 Kubernetes API 服务器来获取 Config Map 和 Secret 数据。为了让它做到这一点 它需要能够配置映射和机密(取决于您启用/禁用的内容)。getlistSpring中文文档

如果设置和/或需要包含部署 Config Server 的命名空间,以便继续从该命名空间获取 Config Map 和 Secret 数据。spring.cloud.kubernetes.configserver.config-map-namespacesspring.cloud.kubernetes.configserver.secrets-namespaces

部署 Yaml

下面是一个示例部署、服务和权限配置,可用于将基本配置服务器部署到 Kubernetes。Spring中文文档

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