gpt4 book ai didi

kubernetes - 将多个 k8s secret 组合到一个环境变量中

转载 作者:行者123 更新时间:2023-12-02 11:24:48 26 4
gpt4 key购买 nike

我的 k8s 命名空间包含一个 Secret它是在部署时创建的(由 svcat ),因此事先不知道这些值。

apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: my-database-credentials
data:
hostname: ...
port: ...
database: ...
username: ...
password: ...

一个 Deployment需要以稍微不同的格式注入(inject)这些值:
...

containers:
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: my-database-credentials
key: jdbc:postgresql:<hostname>:<port>/<database> // ??

- name: DATABASE_USERNAME
valueFrom:
secretKeyRef:
name: my-database-credentials
key: username

- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: my-database-credentials
key: password
DATABASE_URL需要由 hostname 组成, port , 'database' 来自先前定义的 secret 。

有没有办法做这个组合?

最佳答案

Kubernetes 允许您将先前定义的环境变量用作配置中其他地方的后续环境变量的一部分。来自 Kubernetes API reference docs :

Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables.


这个 $(...)语法定义 interdependent environment variables为容器。
因此,您可以先将所需的 secret 值提取到环境变量中,然后编写 DATABASE_URL与这些变量。
...

containers:
env:
- name: DB_URL_HOSTNAME // part 1
valueFrom:
secretKeyRef:
name: my-database-credentials
key: hostname

- name: DB_URL_PORT // part 2
valueFrom:
secretKeyRef:
name: my-database-credentials
key: port

- name: DB_URL_DBNAME // part 3
valueFrom:
secretKeyRef:
name: my-database-credentials
key: database

- name: DATABASE_URL // combine
value: jdbc:postgresql:$(DB_URL_HOSTNAME):$(DB_URL_PORT)/$(DB_URL_DBNAME)

...

关于kubernetes - 将多个 k8s secret 组合到一个环境变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54173581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com