EKS基础设施代码
此存储库包含用于在AWS上部署生产就绪的Amazon EKS(弹性Kubernetes服务)集群的Terraform配置,演示了基础设施即代码最佳实践和GitHub MCP集成。
架构概述
基础设施包括:
- EKS 集群:托管Kubernetes控制平面
- 虚拟私有云:具有跨多个AZ的公共和私有子网的自定义虚拟私有云
- 节点组:具有自动扩展功能的托管工作节点
- 安全组:正确的网络安全配置
- IAM角色:服务帐户和IRSA(服务帐户的IAM角色)设置
- 附加组件:核心DNS、VPC CNI、EBS CSI驱动程序等基本集群插件
特性
- ✅ 多AZ部署:跨多个可用区的高可用性
- ✅ 受管节点组:自动缩放具有可配置实例类型的工作节点
- ✅ 安全最佳实践:最低权限IAM角色和安全组
- ✅ 附加组件支持:预配置的基本集群插件
- ✅ Fargate支持:可选的无服务器容器计算
- ✅ 负载平衡器控制器:AWS负载均衡器控制器集成
- ✅ 群集自动缩放器:根据工作负载需求自动扩展节点
- ✅ 外部dns:可选Route53 DNS管理
- ✅ 证书管理器:可选SSL证书管理
先决条件
在部署此基础架构之前,请确保:
- AWS-CLI 配置了适当的凭据
- 地形 (>=1.0)已安装
- kubectl 的 已安装用于群集管理
- 适当的 IAM权限 用于EKS、VPC和EC2资源
所需的AWS权限
您的AWS凭据需要以下权限:
- EKS集群管理
- VPC和子网创建
- EC2实例管理
- IAM角色和政策管理
- 安全组管理
快速开始
- 克隆存储库:
git clone https://github.com/VitalisCode/Infracode-Github-MCP.git
cd Infracode-Github-MCP- 配置变量:
cp terraform.tfvars.example terraform.tfvars
# Edit terraform.tfvars with your desired configuration- 初始化并部署:
terraform init
terraform plan
terraform apply- 配置kubectl:
aws eks --region update-kubeconfig --name
kubectl get nodes配置
核心变量
| 变量 | 描述 | 默认值 | 必填 |
|---|---|---|---|
project_name | 项目名称 | "infracode-eks" | 没有 |
environment | 环境(开发/测试/生产) | "dev" | 没有 |
aws_region | AWS部署区域 | "us-west-2" | 没有 |
kubernetes_version | Kubernetes版本 | "1.28" | 没有 |
节点组配置
| 变量 | 描述 | 默认值 |
|---|---|---|
node_instance_types | 节点的EC2实例类型 | ["m5.large"] |
node_group_min_size | 最小节点数 | 1 |
node_group_max_size | 最大节点数 | 3 |
node_group_desired_size | 所需节点数 | 2 |
node_capacity_type | 容量类型(ON_DEMAND/SOT) | "ON_DEMAND" |
网络配置
| 变量 | 描述 | 默认值 |
|---|---|---|
single_nat_gateway | 使用单个NAT网关 | true |
cluster_endpoint_public_access | 启用公共API访问 | true |
部署示例
开发环境
project_name = "myapp-eks"
environment = "dev"
aws_region = "us-west-2"
node_instance_types = ["t3.medium"]
node_group_desired_size = 1
single_nat_gateway = true生产环境
project_name = "myapp-eks"
environment = "prod"
aws_region = "us-east-1"
kubernetes_version = "1.28"
cluster_endpoint_public_access = false
node_instance_types = ["m5.xlarge"]
node_group_min_size = 2
node_group_max_size = 10
node_group_desired_size = 3
single_nat_gateway = false
enable_fargate = true
enable_external_dns = true
enable_cert_manager = true输出
部署后,可获得以下输出:
cluster_name:EKS群集名称cluster_endpoint:Kubernetes API服务器终结点vpc_id:集群所在的VPC IDkubectl_config_command:配置kubectl访问权限的命令
附加组件和集成
AWS负载均衡器控制器
自动配置为具有适当IAM角色的入口管理。
群集自动缩放器
预先配置IAM角色,用于根据pod要求自动扩展节点。
EBS CSI驱动程序
默认情况下启用持久卷支持。
可选附加组件
- 外部dns:用于Route53 DNS管理
- 证书管理器:用于SSL证书自动化
- 法尔盖特:适用于无服务器容器工作负载
安全考虑
- 网络隔离:工作节点的专用子网
- IAM最低权限:所需的最小权限
- 安全组:限制性网络访问规则
- 加密:EKS秘密加密处于静止状态
- 专用API访问:可针对生产环境进行配置
监控和日志记录
考虑启用:
- CloudWatch容器洞察 用于监控
- AWS CloudTrail 用于API日志记录
- VPC流日志 用于网络监控
- EKS控制平面测井 用于审计跟踪
成本优化
- 使用 竞价实例 适用于非关键工作负载
- 启用 群集自动缩放器 尺寸合适
- 考虑 法尔盖特 适用于可变工作负载
- 使用 单一NAT网关 用于开发环境
故障排除
常见问题
- 节点组无法加入群集:
- 检查IAM角色和策略 - 验证安全组规则 - 确保子网具有正确的路由
- 无法访问群集:
- 从输出中运行kubectl config命令 - 检查API访问的安全组规则 - 验证IAM权限
- Pod无法连接互联网:
- 检查NAT网关配置 - 验证路由表关联 - 确保安全组允许出口
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 彻底测试
- 提交拉取请求
许可证
该项目是开源的,可在 MIT许可证.
支持
对于问题和疑问:
- 创建一个 问题
- 检查 文档
- 审查 Terraform AWS提供商 文档
______________________________________________________________________
由...创建:维生素D 由...维护:基础设施团队 最后更新:2025年11月
