如何通过Kustomize替换Kubernetes资源注解中的变量?
Kustomize 多环境替换ServiceAccount变量方案
有两种常用的落地方式,都可以实现不同overlay使用不同的ACCOUNT_ID和IAM_ROLE_NAME:
方案1:直接用Json Patch(适合变量少的场景)
这是最简单的方案,不需要额外依赖,兼容性最好。
目录结构参考
. ├── base │ ├── kustomization.yaml │ └── serviceaccount.yaml # 你原本的SA配置 └── overlays ├── dev │ └── kustomization.yaml # dev环境配置 └── prod └── kustomization.yaml # prod环境配置
1. 编写base层配置
base/serviceaccount.yaml 先写通用的基础配置,注解可以先填占位值:
apiVersion: v1 kind: ServiceAccount metadata: name: app-sa # 替换成你实际的SA名称 annotations: eks.amazonaws.com/role-arn: arn:aws:iam::PLACEHOLDER:role/PLACEHOLDER
base/kustomization.yaml 引入资源:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - serviceaccount.yaml
2. 编写overlay层配置
以dev环境为例,overlays/dev/kustomization.yaml 直接写patch替换整个注解值:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base patchesJson6902: - target: version: v1 kind: ServiceAccount name: app-sa # 和base里的SA名称保持一致 patch: |- - op: replace path: /metadata/annotations/eks.amazonaws.com~1role-arn value: arn:aws:iam::111122223333:role/dev-app-role # 替换成dev环境实际值
prod环境同理,只需要把value改成对应prod的ACCOUNT_ID和IAM_ROLE_NAME即可。
方案2:使用replacements字段(适合变量多、需要统一管理的场景)
Kustomize v4.1+版本支持replacements功能,适合需要批量替换多个字段的场景。
新增dev环境变量配置overlays/dev/config.yaml
apiVersion: v1 kind: ConfigMap metadata: name: env-config data: account_id: "111122223333" iam_role_name: "dev-app-role"
修改overlays/dev/kustomization.yaml添加替换规则
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base - config.yaml replacements: # 替换ACCOUNT_ID - source: kind: ConfigMap name: env-config fieldPath: data.account_id targets: - select: kind: ServiceAccount name: app-sa fieldPaths: - metadata.annotations.[eks.amazonaws.com/role-arn] options: delimiter: ":" index: 4 # arn按:拆分后第4位为ACCOUNT_ID(索引从0开始) # 替换IAM_ROLE_NAME - source: kind: ConfigMap name: env-config fieldPath: data.iam_role_name targets: - select: kind: ServiceAccount name: app-sa fieldPaths: - metadata.annotations.[eks.amazonaws.com/role-arn] options: delimiter: "/" index: 2 # arn按/拆分后第2位为IAM_ROLE_NAME
验证效果
在对应overlay目录下执行kustomize build .即可输出替换后的完整配置,确认无误即可直接应用到集群。
内容的提问来源于stack exchange,提问作者cosmos-1905-14
相关产品推荐
相关产品推荐

