我有一个生成的 kubernetes 机密,如下所示,例如在 argocd 中显示:
apiVersion: v1
data:
ES_GUEST_PASSWORD: ++++++++
ES_GUEST_USERNAME: ++++++++
kind: Secret
我现在想将其用作 Kibana 用户名和密码设置的输入。我知道如何在容器部分内使用环境变量来实现这一点,但如何在容器外做到这一点?
在我的例子中,它是 Elasticsearch/Kibana ECK Operator 配置:
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
name: kibana
spec:
version: 8.11.1
count: 2
elasticsearchRef:
name: elasticsearch
config:
xpack.security.authc.providers:
anonymous.anonymous1:
order: 0
credentials:
username: ES_GUEST_USERNAME
password: ES_GUEST_PASSWORD
basic.basic1:
order: 1
在这种情况下,ES_GUEST_USERNAME 和 ES_GUEST_PASSWORD 仅用作纯文本,并没有被替换。
答案1
简短的回答是“你不能”,除非 API 模式支持Pod 规范中可用的envFrom
/属性之类的东西。valueFrom
更长的答案是,你可以使用变异 Admission Webhook可以做任何你想做的事情,包括在创建时将机密注入资源。你可以自己编写,但现有的实现可以做这样的事情。例如,银行金库使用此技术从 Hashicorp Vault 实例注入机密。补丁操作员是执行此类转换的通用工具。