EKS 1.22升级至1.23后,Terraform配置kubernetes_annotations报错求助
问题分析与解决方案
问题原因
EKS 1.23对应的Kubernetes版本中,ServiceAccount的API版本确实是v1,但报错核心原因在于:
- 你使用的
hashicorp/kubernetesProvider版本(v2.21.1)对Kubernetes 1.23的兼容性不足,导致kubernetes_annotations资源无法正确识别v1版本下的ServiceAccount类型。 kubernetes_annotations作为通用注解管理资源,在处理核心API组的资源时,逻辑存在兼容性偏差,不如直接使用对应资源的原生字段管理注解可靠。
可行解决方案
方案1:升级Terraform Kubernetes Provider版本
hashicorp/kubernetes Provider v2.21.1对Kubernetes 1.23的支持不完善,官方文档显示v2.23.0及以上版本已全面支持Kubernetes 1.23,建议升级到该版本区间:
修改Terraform的provider配置:
terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">= 2.23.0" } } }
执行命令升级Provider:
terraform init -upgrade
方案2:改用原生资源管理注解
放弃使用kubernetes_annotations资源,直接通过对应原生资源管理注解,这是更符合Kubernetes资源管理规范的方式。
情况A:ServiceAccount由你的Terraform代码创建
直接在kubernetes_service_account资源中定义注解:
resource "kubernetes_service_account" "ebs-csi-sa" { metadata { name = "ebs-csi-controller-sa" namespace = "kube-system" annotations = { "eks.amazonaws.com/role-arn" = module.ebs-csi-irsa[0].iam_role_arn } } }
情况B:ServiceAccount由第三方模块创建
使用gavinbunney/kubectl Provider的kubectl_manifest资源更新注解:
resource "kubectl_manifest" "ebs-csi-sa-annotations" { yaml_body = <<YAML apiVersion: v1 kind: ServiceAccount metadata: name: ebs-csi-controller-sa namespace: kube-system annotations: eks.amazonaws.com/role-arn: ${module.ebs-csi-irsa[0].iam_role_arn} YAML }
验证操作
修改配置后,先执行terraform plan确认配置无报错,再执行terraform apply应用变更。
内容的提问来源于stack exchange,提问作者Dhaval Shah
相关产品推荐
相关产品推荐

