Kustomize覆盖层替换ConfigMap值后ExternalSecret未同步更新
解决Kustomize Overlay替换ConfigMap后Replacements未同步到ExternalSecret的问题
问题核心
在Kustomize v4.5.7中,base目录定义的replacements会优先读取base环境下的ConfigMap值,之后才会应用overlay的behavior: replace配置替换ConfigMap,导致ExternalSecret的remoteRef.key无法同步到overlay的新值。
解决步骤
将replacements逻辑从base迁移到overlay中,确保ConfigMap替换完成后再执行值同步:
- 移除
base/kustomization.yaml中的replacements配置 - 在
overlay/kustomization.yaml中添加replacements配置,示例如下:
resources: - ../base # 替换ConfigMap(需与base中ConfigMapGenerator的name一致) configMapGenerator: - name: my-config files: - env.properties behavior: replace # 同步ConfigMap值到ExternalSecret replacements: - source: kind: ConfigMap name: my-config fieldPath: data.KEY targets: - select: kind: ExternalSecret name: my-external-secret fieldPaths: - spec.remoteRef.key - source: kind: ConfigMap name: my-config fieldPath: data.KEY2 targets: - select: kind: ExternalSecret name: my-external-secret fieldPaths: - spec.remoteRef.key2 - source: kind: ConfigMap name: my-config fieldPath: data.KEY3 targets: - select: kind: ExternalSecret name: my-external-secret fieldPaths: - spec.remoteRef.key3
原理说明
Kustomize的执行顺序为:
- 加载base目录下的所有资源和transformers(包括replacements)
- 加载overlay目录下的资源和transformers,并覆盖base配置
将replacements移到overlay后,会在overlay替换ConfigMap完成后再执行值同步,此时读取的是替换后的ConfigMap数据,就能正确更新ExternalSecret的remoteRef.key字段。
内容的提问来源于stack exchange,提问作者FerronSW
相关产品推荐
相关产品推荐

