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.