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

ArgoCD:如何避免在清单中存储半敏感信息?

ArgoCD替代envsubst处理半敏感配置的方案

ArgoCD本身确实没有内置类似envsubst的直接变量插值功能,但有几个实用的替代方案可以解决你的问题,避免把半敏感信息(比如域名)暴露在GitHub仓库里:

1. 使用ArgoCD配置管理插件(Config Management Plugins)

你可以自定义一个插件让ArgoCD执行envsubst来处理模板文件,变量来源可以是ArgoCD内部的Secret或者集群中的K8s Secret:

  • 首先在ArgoCD的argocd-cm ConfigMap中定义插件,指定处理逻辑:
    data:
      configManagementPlugins: |
        - name: envsubst-plugin
          init:
            command: ["/bin/sh", "-c"]
            args: ["export DOMAIN=$(kubectl get secret domain-secret -o jsonpath='{.data.domain}' | base64 -d)"]
          generate:
            command: ["/bin/sh", "-c"]
            args: ["cat apps/whoami/whoami.yaml | envsubst"]
    
  • 然后在ArgoCD的Application配置中指定使用这个插件,同步时ArgoCD会自动执行envsubst替换变量,域名存在集群的Secret里,不会出现在GitHub代码中。

2. 用Kustomize(ArgoCD原生支持)

Kustomize是ArgoCD默认支持的配置工具,非常适合处理这种变量替换场景:

  • 第一步,在本地创建一个secret-generator.yaml(该文件不上传GitHub),内容如下:
    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: SecretGenerator
    metadata:
      name: domain-secret
    literals:
      - domain=your-custom-domain.com
    
  • 然后在kustomization.yaml中引用这个生成器,并在你的whoami.yaml里用变量引用,比如Ingress的host字段写成$(domain),Kustomize会自动替换成Secret里的值。
  • 你也可以通过ArgoCD的Application配置传递参数,或者把Secret提前创建在集群中,Kustomize直接引用现有Secret的值。

3. 直接使用K8s Secret+字段引用

如果不想用模板工具,也可以直接把域名存在K8s Secret里,然后在资源中通过字段引用或者环境变量注入:

  • 先创建Secret:
    kubectl create secret generic domain-secret --from-literal=domain=your-custom-domain.com
    
  • 然后在Ingress或者其他需要域名的资源中,使用ArgoCD支持的变量引用(结合Kustomize或Helm),比如用Kustomize的patches功能动态替换host字段,或者用Helm模板引用Secret的值。

这三个方案里,Kustomize是最轻量化的,因为ArgoCD原生支持,不需要额外配置插件,推荐优先尝试。

内容的提问来源于stack exchange,提问作者Logan M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:01:05