You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过YAML文件从多键.env文件创建指定键的Kubernetes Secret

需求与实现方案

问题背景

我有一个包含多键值对的.env文件:

K1=s1
K2=s2
K3=s3
# 其他未知键值对

需要仅基于K1创建Kubernetes Secret,效果等价于执行kubectl create secret generic k1-secret --from-literal="K1=s1",但要满足:

  • 从上述多键的.env文件读取数据
  • 不能用命令式指令,必须通过k1-secret.yaml文件执行kubectl create -f k1-secret.yaml实现

另外,我在GitHub Actions步骤中会拉取GitHub Secrets并保存为.env文件,计划通过Helm Chart实现:在values.yaml里配置需要的键映射,比如:

generic_secret_keys:
    K1: K1
    k2: K2
    ....

然后在Helm模板的secrets.yaml中循环遍历这些键,从.env文件取值创建对应Secret。

实现步骤

1. 配置Helm的values.yaml

在你的Helm Chart的values.yaml中,定义需要从.env文件提取的键映射,仅保留K1的示例如下:

generic_secret_keys:
  K1: K1  # 左侧为Secret内的键名,右侧为.env文件中的对应键名

2. 编写Helm模板secrets.yaml

在Helm Chart的templates/secrets.yaml中,编写模板逻辑,循环读取values中配置的键,并从环境变量(.env文件加载的变量)中取值:

apiVersion: v1
kind: Secret
metadata:
  name: k1-secret
type: Opaque
data:
{{- range $secretKey, $envKey := .Values.generic_secret_keys }}
  {{ $secretKey }}: {{ getenv $envKey | b64enc }}
{{- end }}
  • getenv $envKey:从环境变量中读取.env文件加载的对应键值
  • b64enc:Kubernetes Secret要求值必须为Base64编码,因此用该函数完成编码

3. GitHub Actions中的执行步骤

在GitHub Actions的Workflow文件中,先加载.env文件的变量,再执行Helm模板渲染和Kubectl创建操作:

steps:
  # 拉取代码等前置步骤省略
  - name: 加载.env文件变量
    run: |
      # 将.env文件的键值对导入当前shell环境
      set -a
      source .env
      set +a
      # 可选:验证变量是否加载成功
      echo "K1的值为: $K1"

  - name: 用Helm渲染生成k1-secret.yaml
    run: helm template my-chart --values values.yaml --output-dir ./rendered
    # 注意:my-chart需替换为你的Helm Chart实际目录名

  - name: 创建Kubernetes Secret
    run: kubectl create -f ./rendered/templates/secrets.yaml

关键说明

  • 用set -a和source .env可以把.env里的键值对导入到当前shell环境,确保Helm的getenv函数能读取到对应值
  • 如果需要提取多个键,只需在values.yaml的generic_secret_keys中添加对应映射,模板会自动循环生成Secret的键值对

内容的提问来源于stack exchange,提问作者Amin Ba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 16:37:45