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

EKS 1.22升级至1.23后,Terraform配置kubernetes_annotations报错求助

问题分析与解决方案

问题原因

EKS 1.23对应的Kubernetes版本中,ServiceAccount的API版本确实是v1,但报错核心原因在于:

  • 你使用的hashicorp/kubernetes Provider版本(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:30:42