如何让Kustomize覆盖层生成的Secret继承Base层的标签?
Kustomize环境Secret标签继承问题解决方法
问题原因
Base层定义的LabelTransformer仅会作用于Base目录下的静态资源,而des环境通过SecretGenerator动态生成的Secret属于覆盖层新增资源,默认不会被Base的Transformer处理,因此只带有覆盖层generatorOptions中定义的stage: development标签。
解决方法
方案一:复用Base的通用标签Transformer
- 将Base层的通用标签配置抽成独立的Transformer文件,比如
base/common-labels.yaml:
apiVersion: builtin kind: LabelTransformer metadata: name: common-labels labels: app: my-service team: devops fieldSpecs: - path: metadata/labels create: true
- 修改Base层
kustomization.yaml,引用该Transformer:
resources: - deployment.yaml transformers: - common-labels.yaml
- 在des覆盖层的
kustomization.yaml中,显式引用Base的通用标签Transformer,同时保留环境专属标签:
bases: - ../base secretGenerator: - name: my-secret literals: - DB_PASSWORD=dev-pass transformers: - ../base/common-labels.yaml generatorOptions: labels: stage: development
这种方式能保证通用标签的统一维护,修改Base的标签配置后,所有引用该Transformer的环境都会同步更新。
方案二:在覆盖层GeneratorOptions中合并通用标签
如果通用标签数量较少,可直接在des覆盖层的generatorOptions中把Base的通用标签和环境标签一起定义:
bases: - ../base secretGenerator: - name: my-secret literals: - DB_PASSWORD=dev-pass generatorOptions: labels: app: my-service team: devops stage: development
优点是配置简单,缺点是Base通用标签修改时需要手动同步到des环境配置中。
方案三:升级Kustomize版本(v4.5+)
Kustomize在v4.5及以后的版本中,优化了Transformer的作用范围,Base层的Transformer会默认作用于覆盖层通过Generator生成的资源。如果当前使用的版本较低,可以尝试升级到对应版本,无需额外修改配置即可实现标签继承。
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

