|
对于最新稳定版本,请使用Spring Cloud Kubernetes 5.0.0! |
秘密 属性来源
Kubernetes 有 Secrets 的概念用于存储
敏感数据,如密码、OAuth Tokens等。该项目提供与秘密去秘密
可通过 Spring Boot 应用程序访问。您可以通过设置spring.cloud.kubernetes.secrets.enabled财产。
启用后,Fabric8SecretsPropertySource查一下Kubernetes,有什么秘密以下来源:
-
递归读取秘密挂载
-
以应用程序命名(定义如下)
spring.application.name) -
匹配部分标签
注意:
默认情况下,出于安全原因,不启用通过API消费秘密(上述第2和第3点)。密钥的权限“列表”允许客户端检查指定命名空间中的秘密值。 此外,我们建议容器通过挂载的卷共享秘密。
如果您启用通过API消费秘密,建议使用授权策略(如RBAC)限制秘密访问。 有关通过API使用秘密时的风险和最佳实践的更多信息,请参阅本文档。
如果找到了这些秘密,其数据将被提供给应用程序。
假设我们有一个名为 的 Spring Boot 应用程序演示利用属性读取其数据库
配置。我们可以通过以下命令创建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
注意,数据包含了由创造命令。
你的应用程序随后可以使用这个秘密——例如,通过将秘密的值导出为环境变量:
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
如同配置地图,也可以配置更高级,可以使用多个秘密实例。这spring.cloud.kubernetes.secrets.sources清单让这成为可能。
例如,你可以定义以下内容秘密实例:
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.cloud.kubernetes.secrets.fail-fast=true.
也可以启用重试秘密地产来源比如配置地图.
与配置地图属性源,首先你需要设置Spring.cloud.kubernetes.secrets.fail-fast=true.
然后你需要添加春季重试和Spring Boot启动 AOP去你的班级路径。
重试行为秘密属性源可以通过设置spring.cloud.kubernetes.secrets.retry.*性能。
如果你已经有过春季重试和Spring Boot启动 AOP不知为何在 classpath 上
并且希望启用 fail-fast,但不希望重试被启用;你可以禁用重试秘密 地产来源按环境分类Spring.cloud.kubernetes.secrets.retry.enabled=false. |
由于来自Secrets的数据通常被视为敏感的执行器端点/环境和/configprops可以被设置为净化数据,使其不以纯文本形式显示。为此,你需要设置:
spring.cloud.kubernetes.sanitize.secrets=true
支持此设置3.0.6向上。
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
|
|
|
启用秘密 |
|
|
|
设置秘密名称以查找 |
|
|
客户端命名空间 |
设置 Kubernetes 的命名空间,查找在哪里 |
|
|
|
设置用于查找秘密的标签 |
|
|
|
设置秘密挂载的路径(示例1) |
|
|
|
通过API启用或禁用获取密钥(示例2和3) |
|
|
|
在加载 a 时发生错误时,启用或禁用应用程序启动失败 |
|
|
|
启用或禁用秘密重试。 |
|
|
|
初始重试间隔以毫秒计。 |
|
|
|
最多尝试次数。 |
|
|
|
最大后退间隔。 |
|
|
|
下一个间隔的乘数。 |
笔记:
你可以找到一个使用秘密的应用程序示例(尽管它尚未更新以使用新的春云库伯内特斯Project)在 spring-boot-camel-config