Spring Cloud Kubernetes 配置服务器

Spring Cloud Kubernetes 配置服务器基于 Spring Cloud Config Server,并为 Kubernetes Config MapsSecrets 添加了一个环境存储库

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

您可以从 GitHub 上的源代码 构建一个 Docker 镜像,并使用它部署到 Kubernetes。

配置

启用 Kubernetes 环境存储库

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

Config Map 和 Secret PropertySources

默认情况下,只获取 Config Map 数据。要同时启用 Secrets,您需要设置 spring.cloud.kubernetes.secrets.enabled=true。您可以通过设置 spring.cloud.kubernetes.config.enabled=false 来禁用 Config Map PropertySource

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

默认情况下,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,您将需要包含 Config Server 部署所在的命名空间,以便继续从该命名空间获取 Config Map 和 Secret 数据。

使用 Spring Vault 的高级功能

为了使用 Spring Cloud Config Server 的一些更高级的 Spring Vault 功能spring-vault-core 必须在类路径中。默认情况下,Spring Cloud Kubernetes 可以为部署 Config Server 到 Kubernetes 生成 Docker 镜像,但它不包含 spring-vault-core 在类路径中。如果您需要 spring-vault-core 来启用 Config Server 中的某些功能,您可以在运行 Maven 构建时启用 vault Maven 配置文件来构建您自己的 Docker 镜像版本。

示例

$ ../../mvnw clean install -Pvault

Kubernetes 访问控制

Kubernetes 配置服务器使用 Kubernetes API 服务器来获取 Config Map 和 Secret 数据。为了实现这一点,它需要具有 getlist Config Map 和 Secrets 的能力(取决于您启用/禁用的内容)。

部署 Yaml

下面是一个示例部署、服务和权限配置,您可以使用它将基本配置服务器部署到 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
© . This site is unofficial and not affiliated with VMware.