kubernetes - 将多个 k8s 机密组合到一个环境变量中
问题描述
我的 k8s 命名空间包含一个Secret
在部署时创建的 (by svcat
),因此这些值是事先不知道的。
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: my-database-credentials
data:
hostname: ...
port: ...
database: ...
username: ...
password: ...
ADeployment
需要以稍微不同的格式注入这些值:
...
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
数据库”组成。
有没有办法做这个组合?
解决方案
Kubernetes 允许您将先前定义的环境变量用作配置中其他地方的后续环境变量的一部分。来自Kubernetes API 参考文档:
变量引用 $(VAR_NAME) 使用容器中先前定义的环境变量和任何服务环境变量进行扩展。
因此,您可以首先将所需的秘密值提取到环境变量中,然后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因变量表示法。
推荐阅读
- ray - ray tune 中是否有“initial_workers”(cluster.yaml)替换机制?
- php - 如何在laravel中获取关系计数的关系?
- paypal - PayPal 订单 v2:TRANSACTION_REFUSED 和 UNPROCESSABLE_ENTITY
- audio - agora audio vdo 解决方案在阿曼的移动应用程序中是否有效?
- java - 检查一个目标的所有任务是否完成
- r - 在 R 中使用 recipeselectors 函数出现“未使用的参数”错误
- shell - 禁用远程登录后,我的 shell 脚本如何登录远程服务器并通过 shell 脚本输入密码?
- react-native - React Native 将边框半径添加到活动标签栏
- python - 如何为 Scikit-learn 分类器添加加权损失?
- javascript - 遍历 JSON 文件以使用 JavaScript 在 HTML 模式中显示正确链接的数据