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

Kubernetes中Kustomize无法使用集群已有Secret替换的问题求助

问题分析与解决方法

问题原因

Kustomize 的 replacements 功能仅能处理当前 kustomization 上下文内的资源——也就是通过 kustomization.yaml 里的 resources、components 字段引入的本地资源,或通过远程链接拉取的资源。你通过 ExternalSecret 在集群中创建的 Secret 并未被包含在 kustomize 的构建上下文里,因此 kustomize 无法定位到它,从而抛出 nothing selected 错误。

可行解决方案

方案1:将集群Secret临时导入到kustomize上下文(不推荐用于敏感数据)

把集群中已存在的 Secret 导出到本地,作为 kustomize 的资源之一:

  1. 导出 Secret 到本地文件:
kubectl get secret -n argocd repository-ssh-argocd -o yaml > ./argocd-secret.yaml
  1. 在 kustomization.yaml 中添加该文件到 resources 列表:
resources:
  - ./argocd-secret.yaml
  1. 重新执行 kustomize build

⚠️ 注意:这种方法会将敏感的 Secret 数据写入本地文件,绝对不要将该文件提交到版本控制系统,建议将其加入 .gitignore。

方案2:使用环境变量注入(纯命令行方式)

绕过 kustomize 的 replacements 限制,用环境变量传递 Secret 的值:

  1. 先从集群中提取并解码 Secret 的 url 值:
export ARGOCD_REPO_URL=$(kubectl get secret -n argocd repository-ssh-argocd -o jsonpath='{.data.url}' | base64 -d)
  1. 将 Application 资源中的 repoURL 先设为占位符(比如 REPLACE_REPO_URL),再通过 sed 替换构建结果:
kustomize build . | sed "s|REPLACE_REPO_URL|$ARGOCD_REPO_URL|g"

方案3:基于Argo CD参数化引用(生产环境推荐)

既然你用 ExternalSecret 管理 Secret,可直接借助 Argo CD 的参数化能力完成取值,无需依赖 kustomize 构建:

  1. 修改 Application 资源的 repoURL 为参数占位符:
spec:
  source:
    repoURL: '{{ .Values.repoURL }}'
    # 其他配置...
  1. 在 Argo CD 中为该 Application 配置参数:通过 UI 或 CLI 设置参数值,来源选择集群中 repository-ssh-argocd Secret 的 url 字段。

补充说明

如果坚持使用 kustomize 的 replacements,必须确保被引用的资源(即目标 Secret)存在于 kustomize 的构建上下文内。方案1是最直接的适配方式,但要严格注意敏感数据的安全;方案2和3更适合生产环境的敏感数据管理场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:50:22