我遵循这个指南来使用秘密:https://docs.spring.io/spring-cloud-kubernetes/docs/current/reference/html/index.html#secrets-propertysource.
大致说来。
-
保存秘密
-
在部署中引用机密。yml文件
containers: - env: - name: DB_USERNAME valueFrom: secretKeyRef: name: db-secret key: username - name: DB_PASSWORD valueFrom: secretKeyRef: name: db-secret key: password
-
然后显示"您可以通过多种方式选择要使用的秘密:"并给出了3个例子。然而,不做这些步骤,我仍然可以完美地看到我的嫉妒的秘密。此外,步骤1和步骤2中的操作独立于spring引导(将秘密保存并移动到环境变量中)
我的问题:
- 如果我在步骤3中建议的更改,它对我的容器/应用程序/pod有什么更改/改进? 有没有办法能够避免所有的映射在步骤1和把所有的秘密在一个环境?
- 他们写- spring.cloud.kubernetes.secrets。路径=/etc/secrets来获取所有的秘密,他们怎么知道秘密在一个叫做/etc/ 的文件夹里呢?
您可以通过以下方式从secret挂载所有的env变量:
containers:
- name: app
envFrom:
- secretRef:
name: db-secret
至于Spring的秘密从何而来——我不是Spring的专家,但在你提供的链接中似乎已经有了解释:
当启用时,Fabric8SecretsPropertySource查找Kubernetes以下来源的秘密:
从秘密挂载递归读取
以应用程序命名(由spring.application.name定义)
匹配一些标签
所以它从秘密挂载中获取秘密(如果您将它们挂载为卷)。它还扫描Kubernetes API的秘密(我猜在相同的命名空间的应用程序运行)。它可以通过使用Kubernetes服务帐户令牌来实现,默认情况下,该令牌总是挂载到pod中。这取决于Kubernetes RBAC权限赋予pod的serviceaccount的权限。
所以它尝试使用Kubernetes API搜索秘密,并将它们与应用程序名称或应用程序标签进行匹配。