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

如何在ArgoCD Application中引用ConfigMap/Secret的值(对标FluxCD valuesFrom)

在ArgoCD中引用Secret/ConfigMap值到Helm或Kustomize配置

方法1:使用ArgoCD原生的Helm Values From(推荐)

ArgoCD 2.1及以上版本支持类似FluxCD valuesFrom的原生功能,可直接在Application的Helm配置中引用Secret或ConfigMap的内容,合并到Helm values里。

适用于你的场景:External Secret Operator(ESO)生成的Secret是标准Kubernetes Secret,可直接被ArgoCD引用。

示例Application配置:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  destination:
    server: https://kubernetes.default.svc
    namespace: my-app-namespace
  project: default
  source:
    chart: my-chart
    repoURL: https://your-helm-repo.com/charts
    targetRevision: 1.0.0
    helm:
      # 基础静态values配置
      values: |
        replicaCount: 2
        service:
          type: ClusterIP
      # 从Secret/ConfigMap加载动态values
      valuesFrom:
        # 引用ESO管理的Secret中的YAML片段
        - secretKeyRef:
            name: eso-managed-token-secret # ESO生成的Secret名称
            namespace: my-app-namespace # Secret所在命名空间
            key: helm-values # Secret中存储YAML格式配置的Key,内容例如:token: "xxx"
        # 可选:引用ConfigMap中的配置
        - configMapKeyRef:
            name: app-config-map
            key: environment-values.yaml

注意事项:

  • Secret/ConfigMap中的目标Key必须存储合法的YAML内容,ArgoCD会自动将其与基础values合并。
  • 若Secret与Application不在同一命名空间,需显式指定namespace字段,同时确保ArgoCD的ServiceAccount有权限读取该命名空间的Secret/ConfigMap。

方法2:通过Kustomize Vars与补丁注入值

如果使用Kustomize作为ArgoCD的配置源,可通过vars引用Secret/ConfigMap的值,再用补丁将值注入到部署资源中。

示例Kustomization配置:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

# 引用远程Helm Chart的模板(或本地Chart目录)
resources:
  - https://your-helm-repo.com/charts/my-chart/1.0.0?subpath=templates

# 引用已存在的ESO生成的Secret(不生成新Secret,仅引用)
secretGenerator:
  - name: eso-managed-token-secret
    behavior: merge
    files:
      - token=eso-managed-token-secret/token # 从现有Secret提取token字段

# 定义变量引用Secret中的值(自动处理Base64解码)
vars:
  - name: APP_AUTH_TOKEN
    objref:
      kind: Secret
      name: eso-managed-token-secret
      apiVersion: v1
    fieldref:
      fieldpath: data.token
    varreference: "{.data.token}"

# 用补丁将变量注入到Deployment的环境变量或Helm模板参数中
patchesStrategicMerge:
  - |-
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app
    spec:
      template:
        spec:
          containers:
            - name: my-app
              env:
                - name: AUTH_TOKEN
                  value: $(APP_AUTH_TOKEN)

方法3:自定义ArgoCD配置管理插件(进阶)

如果以上方法无法满足复杂需求,可自定义ArgoCD插件,在渲染Helm Chart前从Secret读取值并注入到values中。

首先在ArgoCD中配置插件(需提前启用插件功能):

apiVersion: argoproj.io/v1alpha1
kind: ConfigManagementPlugin
metadata:
  name: secret-injector-plugin
spec:
  # 初始化步骤:从ESO Secret中读取并解码token
  init:
    command: [sh, -c, 'kubectl get secret eso-managed-token-secret -n my-app-namespace -o jsonpath="{.data.token}" | base64 -d > /tmp/auth-token']
  # 生成渲染后的资源:将token注入Helm values
  generate:
    command: [sh, -c, 'helm template my-app https://your-helm-repo.com/charts/my-chart --set auth.token=$(cat /tmp/auth-token)']

然后在Application中引用该插件:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  destination:
    server: https://kubernetes.default.svc
    namespace: my-app-namespace
  project: default
  source:
    plugin:
      name: secret-injector-plugin

注意事项:

  • 需确保ArgoCD的ServiceAccount拥有读取目标Secret的权限。
  • 插件脚本需根据实际场景调整,比如处理多个Secret值或复杂的values合并逻辑。

额外提示

  • 确保ESO已完成Secret的同步:可在ArgoCD Application中添加对ESO ExternalSecret资源的依赖,或设置同步策略为WaitForSync,避免ArgoCD在Secret生成前同步。
  • 敏感值保密:ArgoCD会在UI中隐藏Secret中的敏感内容,但需确保ArgoCD的访问权限配置合理,避免泄露。

内容的提问来源于stack exchange,提问作者Aaron Ebake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:53:10