对于最新稳定版本,请使用Spring Cloud Kubernetes 5.0.0spring-doc.cadn.net.cn

秘密 属性来源

Kubernetes 有 Secrets 的概念用于存储 敏感数据,如密码、OAuth Tokens等。该项目提供与秘密去秘密 可通过 Spring Boot 应用程序访问。您可以通过设置spring.cloud.kubernetes.secrets.enabled财产。spring-doc.cadn.net.cn

启用后,Fabric8SecretsPropertySource查一下Kubernetes,有什么秘密以下来源:spring-doc.cadn.net.cn

  1. 递归读取秘密挂载spring-doc.cadn.net.cn

  2. 以应用程序命名(定义如下)spring.application.name)spring-doc.cadn.net.cn

  3. 匹配部分标签spring-doc.cadn.net.cn

默认情况下,出于安全原因,不启用通过API消费秘密(上述第2和第3点)。密钥的权限“列表”允许客户端检查指定命名空间中的秘密值。 此外,我们建议容器通过挂载的卷共享秘密。spring-doc.cadn.net.cn

如果您启用通过API消费秘密,建议使用授权策略(如RBAC)限制秘密访问。 有关通过API使用秘密时的风险和最佳实践的更多信息,请参阅本文档spring-doc.cadn.net.cn

如果找到了这些秘密,其数据将被提供给应用程序。spring-doc.cadn.net.cn

假设我们有一个名为 的 Spring Boot 应用程序演示利用属性读取其数据库 配置。我们可以通过以下命令创建Kubernetes秘密:spring-doc.cadn.net.cn

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

前面的命令会创建以下秘密(你可以用以下方式查看kubectl get secrets db-secret -o yaml):spring-doc.cadn.net.cn

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

注意,数据包含了由创造命令。spring-doc.cadn.net.cn

你的应用程序随后可以使用这个秘密——例如,通过将秘密的值导出为环境变量:spring-doc.cadn.net.cn

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

你可以通过多种方式选择秘密来消耗:spring-doc.cadn.net.cn

  1. 通过列出秘密映射的目录:spring-doc.cadn.net.cn

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

    如果你把所有秘密映射到一个共同根,你可以设置如下:spring-doc.cadn.net.cn

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets
  2. 通过设置命名秘密:spring-doc.cadn.net.cn

    -Dspring.cloud.kubernetes.secrets.name=db-secret
  3. 通过定义标签列表:spring-doc.cadn.net.cn

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

如同配置地图,也可以配置更高级,可以使用多个秘密实例。这spring.cloud.kubernetes.secrets.sources清单让这成为可能。 例如,你可以定义以下内容秘密实例:spring-doc.cadn.net.cn

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未被设定, 这秘密第一季会在应用程序运行的命名空间中查找。 参见命名空间解析以更好地理解命名空间的具体情况 申请已解决。spring-doc.cadn.net.cn

类似于配置地图;如果你想让你的申请失败,就开始 当无法加载时秘密属性来源,你可以设置Spring.cloud.kubernetes.secrets.fail-fast=true.spring-doc.cadn.net.cn

也可以启用重试秘密地产来源比如配置地图. 与配置地图属性源,首先你需要设置Spring.cloud.kubernetes.secrets.fail-fast=true. 然后你需要添加春季重试Spring Boot启动 AOP去你的班级路径。 重试行为秘密属性源可以通过设置spring.cloud.kubernetes.secrets.retry.*性能。spring-doc.cadn.net.cn

如果你已经有过春季重试Spring Boot启动 AOP不知为何在 classpath 上 并且希望启用 fail-fast,但不希望重试被启用;你可以禁用重试秘密 地产来源按环境分类Spring.cloud.kubernetes.secrets.retry.enabled=false.

由于来自Secrets的数据通常被视为敏感的执行器端点/环境/configprops可以被设置为净化数据,使其不以纯文本形式显示。为此,你需要设置:spring-doc.cadn.net.cn

spring.cloud.kubernetes.sanitize.secrets=true

支持此设置3.0.6向上。spring-doc.cadn.net.cn

表1。性能:
名称 类型 默认值 描述

spring.cloud.kubernetes.secrets.enabledspring-doc.cadn.net.cn

布尔spring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

启用秘密地产来源spring-doc.cadn.net.cn

spring.cloud.kubernetes.secrets.namespring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

${spring.application.name}spring-doc.cadn.net.cn

设置秘密名称以查找spring-doc.cadn.net.cn

Spring.cloud.kubernetes.secrets.namespacespring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

客户端命名空间spring-doc.cadn.net.cn

设置 Kubernetes 的命名空间,查找在哪里spring-doc.cadn.net.cn

Spring.cloud.kubernetes.secrets.labelsspring-doc.cadn.net.cn

地图spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

设置用于查找秘密的标签spring-doc.cadn.net.cn

Spring.cloud.kubernetes.secrets.pathsspring-doc.cadn.net.cn

列表spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

设置秘密挂载的路径(示例1)spring-doc.cadn.net.cn

spring.cloud.kubernetes.secrets.enableApispring-doc.cadn.net.cn

布尔spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

通过API启用或禁用获取密钥(示例2和3)spring-doc.cadn.net.cn

Spring.cloud.kubernetes.secrets.fail-fastspring-doc.cadn.net.cn

布尔spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

在加载 a 时发生错误时,启用或禁用应用程序启动失败秘密spring-doc.cadn.net.cn

spring.cloud.kubernetes.secrets.retry.enabledspring-doc.cadn.net.cn

布尔spring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

启用或禁用秘密重试。spring-doc.cadn.net.cn

Spring.cloud.kubernetes.secrets.retry.initial-intervalspring-doc.cadn.net.cn

spring-doc.cadn.net.cn

1000spring-doc.cadn.net.cn

初始重试间隔以毫秒计。spring-doc.cadn.net.cn

spring.cloud.kubernetes.secrets.retry.max尝试spring-doc.cadn.net.cn

整数spring-doc.cadn.net.cn

6spring-doc.cadn.net.cn

最多尝试次数。spring-doc.cadn.net.cn

spring.cloud.kubernetes.secrets.retry.max间隔spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

2000spring-doc.cadn.net.cn

最大后退间隔。spring-doc.cadn.net.cn

Spring.cloud.kubernetes.secrets.retry.multiplierspring-doc.cadn.net.cn

spring-doc.cadn.net.cn

1.1spring-doc.cadn.net.cn

下一个间隔的乘数。spring-doc.cadn.net.cn

你可以找到一个使用秘密的应用程序示例(尽管它尚未更新以使用新的春云库伯内特斯Project)在 spring-boot-camel-configspring-doc.cadn.net.cn