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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:39:03