我正在部署一项服务,该服务严格采用 YAML 配置,如下所示:
# /config/srv.yaml
#
# ...
#
tenantid: '...'
clientid: '...'
certfile: '/config/client/client.crt'
keyfile: '/config/client/client.key'
#
# ...
#
TL;博士; 我只想将, & cert 文件存储在秘密中。tenantid
clientid
k8s
我目前的解决方案是将整个 YAML 文件存储在秘密中,这似乎很浪费而且管理起来也很麻烦。
基本上我有这个 - 它适用于 2 个证书文件(/config/client/client.crt
和/config/client/client.key
):
spec:
containers:
- name: my-container
image: "my-image"
imagePullPolicy: Always
ports:
- containerPort: 50100
env:
- name: CONF_FILE
value: "/config/srv.yaml"
volumeMounts:
- name: yaml-vol
mountPath: "/config" # KLUDGY
readOnly: true
- name: certs-vol
mountPath: "/config/client"
readOnly: true
volumes:
- name: yaml-vol
secret:
secretName: my-yamls # KLUDGY
- name: certs-vol
secret:
secretName: my-certs # contains the *.crt/*.key cert files
然而,它涉及将整个存储/config/srv.yaml
在 kubernetes 机密my-yamls
中。
k8s secrets docs建议有一种方法可以为容器创建动态 YAML 配置 - 在需要的地方准确填写秘密,stringData
例如
stringData:
config.yaml: |-
apiUrl: "https://my.api.com/api/v1"
username: {{username}}
password: {{password}}
但文档以非常模糊的方式结束:
然后,您的部署工具可以在运行之前替换 {{username}} 和 {{password}} 模板变量
kubectl apply
。
我只需要在动态配置中填写两个字符串项:clientid
和tenantid
.
使用 just kubectl
,如何为容器创建动态 YAML - 将非敏感 YAML 模板存储在deploy.yaml
- 并且只包含敏感项目k8s secrets
?