如何在容器部分之外设置 kubernetes 机密

如何在容器部分之外设置 kubernetes 机密

我有一个生成的 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 实例注入机密。补丁操作员是执行此类转换的通用工具。

相关内容