Terraform AWS EKS 模块常见问题深度解析
terraform-aws-eks 项目地址: https://gitcode.com/gh_mirrors/te/terraform-aws-eks
前言
在使用 Terraform 部署和管理 AWS EKS 集群时,开发者经常会遇到各种配置和运维问题。本文针对 Terraform AWS EKS 模块中的常见问题进行深度解析,帮助开发者更好地理解和使用该模块。
1. 磁盘大小和远程访问配置问题
问题现象:设置 disk_size
或 remote_access
参数后没有生效。
原因分析:
- 这两个参数仅在使用 EKS 托管节点组默认启动模板时有效
- 该模块默认提供自定义启动模板,以实现安全组自定义、标签传播等高级功能
解决方案:
use_custom_launch_template = false # 禁用自定义启动模板
技术建议:
- 自定义启动模板提供了更灵活的配置选项,建议优先使用
- 如需简单配置,再考虑禁用自定义启动模板
2. 安全组标签冲突问题
错误信息: expect exactly one securityGroup tagged with kubernetes.io/cluster/<NAME>
问题本质:
- EKS 会自动创建一个主安全组并添加特定标签
- 当同时附加主安全组和模块创建的共享节点安全组时会产生冲突
解决方案:
方案一:仅使用集群主安全组
create_node_security_group = false
attach_cluster_primary_security_group = true
方案二:使用模块提供的共享节点安全组(推荐)
attach_cluster_primary_security_group = false # 默认值
安全建议:
- 集群主安全组权限范围较大
- 模块提供的安全组遵循最小权限原则,更安全
- 根据实际需求逐步开放必要权限
3. 节点注册失败问题
常见原因:
-
集群端点配置问题
- 必须启用至少一个端点(公共或私有)
- 推荐同时启用两者,并通过
cluster_endpoint_public_access_cidrs
限制公共端点访问
-
网络连接问题
- 私有子网节点:需要配置 NAT 网关和正确路由
- 公有子网节点:确保分配了公网 IP
-
私有端点特殊配置
- 启用 VPC DNS 解析和主机名功能
cluster_endpoint_private_access = true
-
AWS 服务访问问题
- 节点需要访问 EC2、ECR、S3 等服务
- 若无公网访问,需配置 VPC 端点
排查步骤:
- 检查端点配置
- 验证网络连通性
- 检查安全组规则
- 查看节点系统日志
4. 节点组期望数量修改无效
问题原因:
- Terraform 故意忽略
desired_size
的变化 - 这是为了不与集群自动扩缩器(如 Cluster Autoscaler 或 Karpenter)产生冲突
解决方案:
- 通过 Kubernetes 自动扩缩机制管理节点数量
- 或使用 AWS 控制台/CLI 手动调整
设计理念:
- 基础设施即代码(IaC)负责资源创建
- 运行时扩缩交给专门的自动扩缩组件
5. 计算资源属性访问
示例代码:
- 访问 EKS 托管节点组 IAM 角色 ARN:
eks_managed_role_arns = [for group in module.eks_managed_node_group : group.iam_role_arn]
- 访问自管理节点组属性:
self_managed_role_arns = [for group in module.self_managed_node_group : group.iam_role_arn]
- 访问 Fargate 配置文件属性:
fargate_profile_pod_execution_role_arns = [for group in module.fargate_profile : group.fargate_profile_pod_execution_role_arn]
6. EKS 插件系统详解
可用插件列表
AWS EKS 提供多种官方插件,包括但不限于:
- CoreDNS
- kube-proxy
- VPC CNI
- AWS Load Balancer Controller
- EBS CSI Driver
插件配置查询
使用 AWS CLI 查询插件配置架构:
aws eks describe-addon-configuration \
--addon-name coredns \
--addon-version v1.11.1-eksbuild.8 \
--query 'configurationSchema' \
--output text | jq
典型配置项:
- 资源请求/限制
- 节点亲和性
- Pod 反亲和性
- 副本数量
- 容忍度配置
- 拓扑分布约束
最佳实践建议
-
网络设计:
- 生产环境建议同时启用公私端点
- 严格控制公共端点访问 CIDR
- 为私有节点配置适当的 NAT 方案
-
安全组管理:
- 优先使用模块提供的最小权限安全组
- 谨慎附加集群主安全组
-
节点管理:
- 生产环境建议使用自动扩缩方案
- 合理设置节点组最大最小数量
-
插件管理:
- 定期更新插件版本
- 根据工作负载特点调整插件配置
通过理解这些常见问题及其解决方案,开发者可以更高效地使用 Terraform AWS EKS 模块部署和管理 Kubernetes 集群。
terraform-aws-eks 项目地址: https://gitcode.com/gh_mirrors/te/terraform-aws-eks
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考