用途
terraform-eks 用于以 Terraform 声明式配置在 AWS 上创建生产就绪的 EKS 集群,核心依赖官方模块 terraform-aws-modules/eks(示例中版本 ~> 21.0),并可配合 terraform-aws-modules/vpc/aws(~> 5.0)与 terraform-aws-modules/iam/aws(~> 5.0)完成网络与权限配置。
主要能力
- 集群配置:设置 cluster_name、cluster_version、VPC 与子网、集群访问方式(public/private endpoint)、KMS 加密(cluster_encryption_config)、IRSA 开关(enable_irsa)。
- 节点组:支持 EKS 托管节点组,示例包含 on-demand 与 spot 两类;可配置实例类型、min/max/desired 规模、capacity_type、ami_type、块设备映射(如 gp3、加密卷)、标签与污点(taints)。
- Fargate Profiles:按 namespace 与 label 选择器定义 Fargate 配置,例如 kube-system 下的 kube-dns 以及 production/staging 命名空间。
- IRSA:通过 iam-role-for-service-accounts-eks 模块为服务账号创建 IAM 角色,并绑定 oidc_providers 与 namespace_service_accounts,示例用于 EBS CSI 控制器,并在 Kubernetes ServiceAccount 上以 eks.amazonaws.com/role-arn 注解关联。
- EKS 插件:cluster_addons 支持 CoreDNS(可设 computeType=Fargate 与资源限制)、kube-proxy、vpc-cni(ENABLE_PREFIX_DELEGATION、ENABLE_POD_ENI)、aws-ebs-csi-driver、aws-efs-csi-driver,并可为部分插件指定 service_account_role_arn。
- VPC 集成与私有集群:示例给出私有/公有子网、NAT 网关(单/多 AZ)、EKS 所需子网标签,以及私有集群所需的 control_plane_subnet_ids、内网子网与 VPC endpoints(s3、ecr.api、ecr.dkr)。
使用方式
常用命令包括:terraform init、terraform plan、terraform apply、terraform destroy、aws eks update-kubeconfig --name <cluster>、terraform output、terraform state list。版本要求为 Terraform >= 1.11.0,provider 版本示例:aws ~> 6.0、kubernetes ~> 2.35、helm ~> 2.16。
适用场景
- 需要以 IaC 方式在 AWS 上搭建与维护 Kubernetes 集群的平台/DevOps 团队。
- 需要托管节点组与 Spot 混合、或使用 Fargate 承载部分命名空间的场景。
- 需要细粒度 Pod 级 IAM 权限(IRSA)、KMS 加密、私有集群与 VPC endpoints 的安全合规部署。
限制与注意
- 资料仅以示例代码与最佳实践形式呈现,未提供具体收费、节点实际性能或部署效果说明。
- 生产建议使用私有集群(public_access = false)、启用 IRSA、KMS 加密 secrets,并按组件拆分 state 文件;这些均为文档列出的建议,实际仍需自行验证。
- 未说明具体版本兼容矩阵、迁移步骤或故障排查细节,需参考所列官方模块与 AWS 文档。