met*_*bed 2 kubernetes kubernetes-helm
我的k8s命名空间包含一个Secret在部署时(由svcat)创建的,因此这些值事先未知。
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: my-database-credentials
data:
hostname: ...
port: ...
database: ...
username: ...
password: ...
Run Code Online (Sandbox Code Playgroud)
A Deployment需要以略有不同的格式注入这些值:
...
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
Run Code Online (Sandbox Code Playgroud)
在DATABASE_URL需要的组成了hostname,port从以前定义的秘密“database`。
有什么办法可以做这个组合吗?
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)
...
Run Code Online (Sandbox Code Playgroud)
请注意$(...)用于变量扩展的圆括号。
| 归档时间: |
|
| 查看次数: |
551 次 |
| 最近记录: |