Spring Cloud Kubernetes 配置服务器

Spring Cloud Kubernetes Config Server 基于 Spring Cloud Config Server,并为 Kubernetes Config MapsSecrets 添加了环境存储库spring-doc.cn

This is 组件是完全可选的。但是,它允许您继续利用配置 您可能已经存储在现有的环境存储库(Git、SVN、Vault 等)中,其中包含您在 Kubernetes 上运行的应用程序。spring-doc.cn

默认镜像位于 Docker Hub 上,这将允许您轻松地在 Kubernetes 上部署 Config Server,而无需构建 代码和图像。但是,如果您需要自定义配置服务器行为或更喜欢自己构建镜像,则可以轻松构建自己的镜像 图像,并使用它。spring-doc.cn

配置

启用 Kubernetes 环境存储库

要启用 Kubernetes 环境存储库,配置文件必须包含在活动配置文件列表中。 您也可以激活其他配置文件以使用其他环境存储库实施。kubernetesspring-doc.cn

配置 Map 和 Secret PropertySources

默认情况下,将仅获取 Config Map 数据。要同时启用 Secrets,您需要设置 . 您可以通过设置 来禁用 Config Map。spring.cloud.kubernetes.secrets.enableApi=truePropertySourcespring.cloud.kubernetes.config.enableApi=falsespring-doc.cn

从其他命名空间获取 Config Map 和 Secret 数据

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

如果您设置和/或需要包含部署 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 数据。为了让它做到这一点 它需要 Config Map 和 Secrets 的能力(取决于您启用/禁用的内容)。getlistspring-doc.cn

部署 Yaml

以下是可用于将基本 Config Server 部署到 Kubernetes 的示例部署、服务和权限配置。spring-doc.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