EKS基础设施即代码

使用Terraform在AWS上部署生产级Amazon EKS集群的基础设施即代码解决方案,支持多可用区部署、自动扩展和安全最佳实践。

  • by VitalisCode
  • HCL
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 VitalisCode/Infracode-Github-MCP

使用说明

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证书管理

先决条件

在部署此基础架构之前,请确保:

  1. AWS-CLI 配置了适当的凭据
  2. 地形 (>=1.0)已安装
  3. kubectl 的 已安装用于群集管理
  4. 适当的 IAM权限 用于EKS、VPC和EC2资源

所需的AWS权限

您的AWS凭据需要以下权限:

  • EKS集群管理
  • VPC和子网创建
  • EC2实例管理
  • IAM角色和政策管理
  • 安全组管理

快速开始

  1. 克隆存储库:

    git clone https://github.com/VitalisCode/Infracode-Github-MCP.git
    cd Infracode-Github-MCP
    
  2. 配置变量:

    cp terraform.tfvars.example terraform.tfvars
    # Edit terraform.tfvars with your desired configuration
    
  3. 初始化并部署:

    terraform init
    terraform plan
    terraform apply
    
  4. 配置kubectl:

    aws eks --region <your-region> update-kubeconfig --name <cluster-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 ID
  • kubectl_config_command:配置kubectl访问权限的命令

附加组件和集成

AWS负载均衡器控制器

自动配置为具有适当IAM角色的入口管理。

群集自动缩放器

预先配置IAM角色,用于根据pod要求自动扩展节点。

EBS CSI驱动程序

默认情况下启用持久卷支持。

可选附加组件

  • 外部dns:用于Route53 DNS管理
  • 证书管理器:用于SSL证书自动化
  • 法尔盖特:适用于无服务器容器工作负载

安全考虑

  • 网络隔离:工作节点的专用子网
  • IAM最低权限:所需的最小权限
  • 安全组:限制性网络访问规则
  • 加密:EKS秘密加密处于静止状态
  • 专用API访问:可针对生产环境进行配置

监控和日志记录

考虑启用:

  • CloudWatch容器洞察 用于监控
  • AWS CloudTrail 用于API日志记录
  • VPC流日志 用于网络监控
  • EKS控制平面测井 用于审计跟踪

成本优化

  • 使用 竞价实例 适用于非关键工作负载
  • 启用 群集自动缩放器 尺寸合适
  • 考虑 法尔盖特 适用于可变工作负载
  • 使用 单一NAT网关 用于开发环境

故障排除

常见问题

  1. 节点组无法加入群集:

    • 检查IAM角色和策略
    • 验证安全组规则
    • 确保子网具有正确的路由
  2. 无法访问群集:

    • 从输出中运行kubectl config命令
    • 检查API访问的安全组规则
    • 验证IAM权限
  3. Pod无法连接互联网:

    • 检查NAT网关配置
    • 验证路由表关联
    • 确保安全组允许出口

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 彻底测试
  5. 提交拉取请求

许可证

该项目是开源的,可在 MIT许可证.

支持

对于问题和疑问:


由...创建:维生素D 由...维护:基础设施团队 最后更新:2025年11月