Tia*_*ans 9 kubernetes kubernetes-helm kubernetes-secrets
我想使用 helm charts 在 kubernetes 中进行一些部署。这是我使用的示例覆盖值 yaml:
imageRepository: ""
ocbb:
imagePullPolicy: IfNotPresent
TZ: UTC
logDir: /oms_logs
tnsAdmin: /oms/ora_k8
LOG_LEVEL: 3
wallet:
client:
server:
root:
db:
deployment:
imageName: init_db
imageTag:
host: 192.168.88.80
port:
service:
alias:
schemauser: pincloud
schemapass:
schematablespace: pincloud
indextablespace: pincloudx
nls_lang: AMERICAN_AMERICA.AL32UTF8
charset: AL32UTF8
pipelineschemauser: ifwcloud
pipelineschemapass:
pipelineschematablespace: ifwcloud
pipelineindextablespace: ifwcloudx
pipelinealias:
queuename:
Run Code Online (Sandbox Code Playgroud)
在此文件中,我必须设置一些涉及凭据的值,例如 schemapass、pipelineschemapass...文档说明我必须生成 kubernetes 机密才能执行此操作,并将此密钥添加到具有相同路径层次结构的 yaml 文件中。
我生成了一些 kubernetes 的秘密,例如:
kubectl create secret generic schemapass --from-literal=password='pincloud'
Run Code Online (Sandbox Code Playgroud)
现在我不知道如何在我的 yaml 文件中引用这个新生成的秘密。关于如何在 yaml 图表中设置 schemapass 字段以引用 kubernetes 秘密的任何提示?
Raf*_*zko 18
您不能在values.yaml. 在values.yaml您只指定头盔图表的输入参数,所以它可能是秘密的名字,但不是秘密本身(或任何其解决)。
如果要在容器中使用机密,则可以将其作为环境变量插入:
env:
- name: SECRET_VALUE_ENV
valueFrom:
secretKeyRef:
name: schemapass
key: password
Run Code Online (Sandbox Code Playgroud)
您可以在Hazelcast Enterprise Helm Chart 中查看更多信息。我们正是这样做的。您在中指定机密名称values.yaml,然后使用环境变量将机密注入容器。
您可以通过在容器中将 K8S 值指定为环境变量来在 Helm 中引用 K8S 值(无论是否为机密)。
让您的部署为 mongo.yml
--
kind: Deployment
--
--
containers:
--
env:
- name: DB_URL
valueFrom:
configMapKeyRef:
name: mongo-config
key: mongo-url
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongo-secret
key: mongo-password
Run Code Online (Sandbox Code Playgroud)
mongo-secret 在哪里
apiVersion: v1
kind: Secret
metadata:
name: mongo-secret
type: Opaque
data:
mongo-user: bW9uZ291c2Vy
mongo-password: bW9uZ29wYXNzd29yZA==
Run Code Online (Sandbox Code Playgroud)
和 mongo-config 是
apiVersion: v1
kind: ConfigMap
metadata:
name: mongo-config
data:
mongo-url: mongo-service
Run Code Online (Sandbox Code Playgroud)
实际上有一个lookup函数,但它充满争议并且调试起来可能很棘手
lookup apiVersion, kind, namespace, name -> resource or resource list
Run Code Online (Sandbox Code Playgroud)
我只是设法让它工作引用同一个图表中的秘密(毫无意义);理想情况下,我希望获得事先通过其他方式部署的秘密的价值。
该应用程序使用一个配置文件(它就是它的本质),我试图通过 helm 模板动态管理该文件,将整个文件存储在图表的秘密中,并将其卷安装在部署模板中。
我很可能会开一个SO帖子
ESO 很好地分离了输入秘密和输出秘密的关注点。
凭借其可插拔设计,您可以从 Kubernetes(本质上是内部机密)获取 Secret(和 ConfigMap),或从 AWS(例如 Secrets Manager、Parameter Store)和其他云提供商(外部机密)获取敏感数据。
根据输入的机密,您可以:
因此,通过 ESO,您的 Helm Chartvalues.yaml可以免费为熟悉 Helm 使用的用户提供用户体验支持。
专业提示:不要将应用程序的配置结构泄漏到您的 中
values.yaml,从而将两者紧密耦合;利用后者为您提供的“外观”机会。
现在,您可以在 中定义您想要的任何符号values.yaml,以指示/引用应该使用的秘密(以及从何处使用)。
想法:可能的参考格式可能是:
secret://external-secret-store/external/secret/path/or/name#key-within-external-secret
这采用了熟悉的 URI 样式,它早于 Kubernetes/Helm,因此对于开箱即用的用户来说应该相当直观
然后您templates/*.yaml可以解释这些引用以生成:
values.yaml:imageRepository: ""
ocbb:
...
db:
...
schemauser: secret://my-parameter-store/ocbb/db/schema-credentials#username
schemapass: secret://my-parameter-store/ocbb/db/schema-credentials#password
Run Code Online (Sandbox Code Playgroud)
洞察力:
values.yaml具有您选择的结构ocbb.db.schemapass,并且您知道等是凭据并且可能引用秘密,因此您可以相应地进行模板化。
my-parameter-store:ESO 概念,设置为指向 AWS Parameter Store/ocbb/db/schema-credentials:一个AWS概念,AWS Parameter Store中参数的路径username, password: JSON 对象中的键,即 AWS Parameter Store 中的参数| 归档时间: |
|
| 查看次数: |
20752 次 |
| 最近记录: |