| 对于最新的稳定版本,请使用 Spring Cloud Kubernetes 3.3.0! | 
机密 PropertySource
Kubernetes 具有用于存储敏感数据(例如密码、OAuth Tokens等)的密钥概念。该项目提供与Secrets制作秘密可由 Spring Boot 应用程序访问。您可以通过设置spring.cloud.kubernetes.secrets.enabled财产。
启用后,Fabric8SecretsPropertySource查找 Kubernetes 以查找Secrets来自以下来源:
- 
从机密挂载中递归读取 
- 
以应用程序命名(定义为 spring.application.name)
- 
匹配一些标签 
注意:
默认情况下,出于安全原因,未启用通过 API 使用机密(上述第 2 点和第 3 点)。机密的权限“列表”允许客户端检查指定命名空间中的机密值。此外,我们建议容器通过挂载的卷共享机密。
如果您启用通过 API 使用 Secret,我们建议您使用授权策略(例如 RBAC)来限制对 Secret 的访问。有关通过 API 使用 Secret 时的风险和最佳实践的更多信息,请参阅此文档。
如果找到机密,则其数据将提供给应用程序。
假设我们有一个名为demo使用属性读取其数据库 配置。 我们可以使用以下命令创建 Kubernetes 密钥:
kubectl create secret generic db-secret --from-literal=username=user --from-literal=password=p455w0rd前面的命令将创建以下密钥(您可以通过使用kubectl 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请注意,数据包含由create命令。
然后,您的应用程序可以使用此密钥,例如,通过将密钥的值导出为环境变量:
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您可以通过多种方式选择要使用的密钥:
- 
通过列出映射密钥的目录: -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets/db-secret,etc/secrets/postgresql如果将所有密钥映射到公共根,则可以按如下方式设置它们: -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets
- 
通过设置命名密钥: -Dspring.cloud.kubernetes.secrets.name=db-secret
- 
通过定义标签列表: -Dspring.cloud.kubernetes.secrets.labels.broker=activemq -Dspring.cloud.kubernetes.secrets.labels.db=postgresql
就像ConfigMap,也可以进行更高级的配置,其中您可以使用多个Secret实例。 这spring.cloud.kubernetes.secrets.sourceslist 使这成为可能。例如,您可以定义以下内容Secret实例:
spring:
  application:
    name: cloud-k8s-app
  cloud:
    kubernetes:
      secrets:
        name: default-name
        namespace: default-namespace
        sources:
         # Spring Cloud Kubernetes looks up a Secret named s1 in namespace default-namespace
         - name: s1
         # Spring Cloud Kubernetes looks up a Secret named default-name in namespace n2
         - namespace: n2
         # Spring Cloud Kubernetes looks up a Secret named s3 in namespace n3
         - namespace: n3
           name: s3在前面的示例中,如果spring.cloud.kubernetes.secrets.namespace没有设定, 这Secret叫s1将在应用程序运行的命名空间中查找。请参阅 namespace-resolution 以更好地了解命名空间的应用程序是如何解析的。
类似于ConfigMaps; 如果您希望应用程序无法启动当它无法加载时Secrets属性源,您可以将spring.cloud.kubernetes.secrets.fail-fast=true.
也可以启用重试Secret属性来源就像ConfigMaps. 与ConfigMap属性源,首先需要设置spring.cloud.kubernetes.secrets.fail-fast=true. 然后你需要添加spring-retry和spring-boot-starter-aop到你的类路径。重试行为Secret可以通过设置spring.cloud.kubernetes.secrets.retry.*性能。
| 如果您已经有 spring-retry和spring-boot-starter-aop出于某种原因在类路径上并且想要启用快速故障,但不希望启用重试;您可以禁用重试SecretsPropertySources通过设置spring.cloud.kubernetes.secrets.retry.enabled=false. | 
由于来自 Secrets 的数据通常被视为敏感,因此执行器的端点/env和/configprops可以对数据进行清理,使其不以纯文本形式显示。为此,您需要设置:
spring.cloud.kubernetes.sanitize.secrets=true支持此设置,因为3.0.6并向上。
| 名称 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
 | 
 | 
 | 启用机密 | 
| 
 | 
 | 
 | 设置要查找的密钥的名称 | 
| 
 | 
 | 客户端命名空间 | 设置要查找的 Kubernetes 命名空间 | 
| 
 | 
 | 
 | 设置用于查找机密的标签 | 
| 
 | 
 | 
 | 设置装载机密的路径(示例 1) | 
| 
 | 
 | 
 | 启用或禁用通过 API 使用机密(示例 2 和 3) | 
| 
 | 
 | 
 | 在加载时发生错误时启用或禁用应用程序启动失败 | 
| 
 | 
 | 
 | 启用或禁用机密重试。 | 
| 
 | 
 | 
 | 初始重试间隔(以毫秒为单位)。 | 
| 
 | 
 | 
 | 最大尝试次数。 | 
| 
 | 
 | 
 | 回退的最大间隔。 | 
| 
 | 
 | 
 | 下一个区间的乘数。 | 
笔记:
- 
这 spring.cloud.kubernetes.secrets.labels属性的行为由基于 Map 的绑定定义。
- 
这 spring.cloud.kubernetes.secrets.paths属性的行为由基于集合的绑定定义。
- 
出于安全原因,通过 API 访问机密可能会受到限制。首选方法是将密钥挂载到 Pod 上。 
您可以找到使用密钥的应用程序示例(尽管它尚未更新为使用新的spring-cloud-kubernetes项目)在 spring-boot-camel-config