Terraform通过GitLab CI部署AWS EKS时出现configmaps is forbidden错误
EKS Terraform aws_auth ConfigMap权限报错解决方案
报错核心原因是你的Terraform没有使用你配置的专用kubernetes provider,而是默认调用了GitLab CI环境内置的kubeconfig对应的服务账号权限,该账号没有目标EKS集群kube-system命名空间的操作权限。
排查步骤1:确认带别名的provider已绑定到对应资源/模块
你给kubernetes provider设置了alias = "mastercluster",所有需要调用该provider的资源、模块都必须显式指定provider关联,否则会默认使用无别名的全局kubernetes provider:
- 如果是直接定义
kubernetes_config_map资源,需要在资源块内添加参数:
resource "kubernetes_config_map" "aws_auth" { provider = kubernetes.mastercluster # 其他原有配置 }
- 如果是使用terraform-aws-modules/eks社区模块,需要在模块调用时传入provider参数:
module "mastercluster" { source = "terraform-aws-modules/eks/aws" # 其他原有集群配置参数 kubernetes_provider = kubernetes.mastercluster }
排查步骤2:清理GitLab CI内置kubeconfig环境变量
GitLab绑定了Kubernetes集群的Runner会默认注入KUBECONFIG环境变量,即使provider设置了load_config_file = false,部分旧版本provider仍会优先读取该变量。在CI流水线的terraform执行步骤前添加命令:
unset KUBECONFIG
强制kubernetes provider读取你代码中写的EKS集群连接配置。
排查步骤3:确认CI执行身份的IAM权限
EKS默认仅集群创建者IAM实体拥有集群管理员权限,如果本次CI使用的IAM角色/用户和之前成功部署的场景不同,需要在集群创建配置中提前将CI身份ARN加入集群管理员列表:
module "mastercluster" { source = "terraform-aws-modules/eks/aws" # 其他原有配置 cluster_admin_arns = [ "arn:aws:iam::你的AWS账号ID:role/你的CI执行角色名称" ] }
内容的提问来源于stack exchange,提问作者Quenten Schoonderwoerd
相关产品推荐
相关产品推荐

