Spring Cloud 秘密PropertySource

2024-01-08 17:19 更新

Kubernetes具有用于存儲敏感數(shù)據(jù)(例如密碼,OAuth令牌等)秘密的概念 。該項目提供了與Secrets的集成,以使Spring Boot應用程序可以訪問機密。您可以通過設置spring.cloud.kubernetes.secrets.enabled屬性來顯式啟用或禁用此功能。

啟用后,SecretsPropertySource將從以下來源中為Secrets查找Kubernetes:

  1. 從秘密坐騎遞歸讀取
  2. 以應用程序命名(由spring.application.name定義)
  3. 匹配一些標簽

注意:

默認情況下,出于安全原因,未啟用通過API消費機密(以上第2點和第3點)。機密上的權限“列表”允許客戶端檢查指定名稱空間中的機密值。 此外,我們建議容器通過安裝的卷共享機密。

如果您通過API啟用使用機密,我們建議您使用授權策略(例如RBAC)限制對機密的訪問。有關通過API使用“機密”時的風險和最佳做法的更多信息,請參閱此文檔

如果找到了機密,則其數(shù)據(jù)可供應用程序使用。

假設我們有一個名為demo的spring boot應用程序,該應用程序使用屬性讀取其數(shù)據(jù)庫配置。我們可以使用以下命令創(chuàng)建Kubernetes機密:

oc create secret generic db-secret --from-literal=username=user --from-literal=password=p455w0rd

前面的命令將創(chuàng)建以下秘密(您可以使用oc get secrets db-secret -o yaml來查看):

apiVersion: v1
data:
  password: cDQ1NXcwcmQ=
  username: dXNlcg==
kind: Secret
metadata:
  creationTimestamp: 2017-07-04T09:15:57Z
  name: db-secret
  namespace: default
  resourceVersion: "357496"
  selfLink: /api/v1/namespaces/default/secrets/db-secret
  uid: 63c89263-6099-11e7-b3da-76d6186905a8
type: Opaque

請注意,數(shù)據(jù)包含create命令提供的文字的Base64編碼版本。

然后,您的應用程序可以使用此秘密-例如,通過將秘密的值導出為環(huán)境變量:

apiVersion: v1
kind: Deployment
metadata:
  name: ${project.artifactId}
spec:
   template:
     spec:
       containers:
         - env:
            - name: DB_USERNAME
              valueFrom:
                 secretKeyRef:
                   name: db-secret
                   key: username
            - name: DB_PASSWORD
              valueFrom:
                 secretKeyRef:
                   name: db-secret
                   key: password

您可以通過多種方式選擇要使用的秘密:

  1. 通過列出映射機密的目錄:

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets/db-secret,etc/secrets/postgresql

    如果您已將所有機密映射到公共根,則可以將它們設置為:

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets
  2. 通過設置命名機密:

    -Dspring.cloud.kubernetes.secrets.name=db-secret
  3. 通過定義標簽列表:

    -Dspring.cloud.kubernetes.secrets.labels.broker=activemq
    -Dspring.cloud.kubernetes.secrets.labels.db=postgresql

表140.2。Properties:

名稱 類型 默認 描述

spring.cloud.kubernetes.secrets.enableApi

Boolean

false

通過API啟用或禁用使用機密(示例2和3)

spring.cloud.kubernetes.secrets.enabled

Boolean

true

啟用機密PropertySource

spring.cloud.kubernetes.secrets.name

String

${spring.application.name}

設置要查找的機密名稱

spring.cloud.kubernetes.secrets.namespace

String

客戶端名稱空間

設置Kubernetes命名空間的查找位置

spring.cloud.kubernetes.secrets.labels

Map

null

設置用于查找機密的標簽

spring.cloud.kubernetes.secrets.paths

List

null

設置安裝機密的路徑(示例1)


筆記:

  • spring.cloud.kubernetes.secrets.labels屬性的行為如 基于Map的綁定 所定義
  • spring.cloud.kubernetes.secrets.paths屬性的行為與 基于Collection的binding 定義的行為相同 。
  • 出于安全原因,可能會限制通過API訪問機密。首選方法是將機密安裝到Pod。

您可以在spring-boot-camel-config中找到使用機密的應用程序示例(盡管尚未更新以使用新的spring-cloud-kubernetes項目)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號