← 返回目录

LiteLLM 生产级部署:基于 AWS ECS/EKS 的 AI Gateway 架构

摘要:本文介绍如何在 AWS 上以生产级标准部署 LiteLLM AI Gateway,涵盖 ECS Fargate 和 EKS 两种方案,并结合 LiteLLM 的 Control Plane / Data Plane 分离架构实现多区域高可用部署。


1. 为什么需要 LiteLLM AI Gateway

随着企业大规模采用大语言模型(LLM),团队面临以下挑战:

LiteLLM 作为开源 AI Gateway,提供统一的 OpenAI 兼容 API 代理 200+ LLM 模型,内置 Key 管理、预算控制、缓存、负载均衡等企业级功能。


2. 整体架构

两种部署方案均采用以下核心设计原则:


3. 方案一:ECS Fargate 部署(CloudFormation 一键部署)

📦 部署代码:https://github.com/zhangzhenhuajack/aws-builder/tree/main/litellm/litellm-ecs-cloudformation

3.1 架构概览

ECS Fargate 架构图

3.2 核心组件

组件 规格 用途
ECS Fargate 2 vCPU / 4 GB,2+ 副本 LiteLLM 容器运行
Aurora PostgreSQL 16 Serverless v2 (0.5–8 ACU) 用户/Key/用量元数据
ElastiCache Redis 7.2 Serverless,TLS 加密 响应缓存
Internal ALB 仅 VPC 内可访问 内网负载均衡
CloudFront + WAF HTTPS-only,6 条 WAF 规则 全球加速 + 应用层防护
VPC Endpoints Bedrock PrivateLink + S3 Gateway LLM 调用不出 VPC
DynamoDB On-Demand,TTL + PITR 会话/缓存存储

3.3 CloudFormation 模板结构

部署采用分层 CloudFormation 栈,按依赖顺序部署:

模板 说明
vpc.yaml VPC + 公私子网 + NAT Gateway × 2 + VPC Endpoints (Bedrock PrivateLink + S3 Gateway)
s3.yaml 配置文件 + 日志存储桶,Intelligent-Tiering
database.yaml Aurora Serverless v2 + Redis Serverless + DynamoDB
bedrock.yaml Bedrock IAM 用户 + 凭证存入 Secrets Manager
ecs.yaml ECS Cluster + Task + Service + Internal ALB + Auto Scaling
cloudfront-waf.yaml CloudFront 分发 + WAF 规则(可选)

3.4 一键部署

chmod +x deploy.sh

# 部署全部组件
./deploy.sh deploy-all

# 或分步部署
./deploy.sh deploy-vpc
./deploy.sh deploy-s3
./deploy.sh deploy-db
./deploy.sh deploy-bedrock
./deploy.sh upload-config    # 上传 litellm_config.yaml 到 S3
./deploy.sh deploy-ecs
./deploy.sh deploy-cloudfront

3.5 安全特性

层级 安全措施
入口 CloudFront + WAF(SQL 注入、速率限制、IP 信誉、Geo 白名单)
传输 全链路 TLS 1.2+,CloudFront 强制 HTTPS
ALB Internal(无公网 IP),仅接受 CloudFront VPC Origin 流量
ECS 私有子网,无公网 IP,仅接受 ALB Security Group 流量
Bedrock VPC Endpoint (PrivateLink),流量不出 VPC
数据库 私有子网,Security Group 仅允许 VPC 内端口访问
密钥 Secrets Manager 自动生成,ECS Task Definition 引用

3.6 验证测试

# 健康检查
curl https://<cloudfront-domain>/health/liveliness

# 获取 Master Key
MASTER_KEY=$(aws secretsmanager get-secret-value \
  --secret-id litellm/litellm/master-key \
  --query SecretString --output text | jq -r .LITELLM_MASTER_KEY)

# 调用 Bedrock Claude
curl -s https://<cloudfront-domain>/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $MASTER_KEY" \
  -d '{
    "model": "bedrock-claude-opus-4-6-v1",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

3.7 ECS 方案特点

优势: - ✅ CloudFormation 一键部署,运维简单 - ✅ 无需管理 Kubernetes 集群 - ✅ Fargate Serverless,无需管理节点 - ✅ CloudFront VPC Origin 内网回源,零公网暴露 - ✅ 自动扩缩(CPU 70% / Memory 80%) - ✅ VPC Endpoint 确保 Bedrock 调用不出 VPC

适用场景: - 团队无 Kubernetes 经验 - 希望最小化运维负担 - 单区域部署为主 - 快速上线


4. 方案二:EKS 部署(Kubernetes 原生)

📦 部署代码:https://github.com/kk137/litellm-eks-public

4.1 架构概览

EKS 架构图

4.2 核心组件

组件 规格 用途
EKS K8s 1.35, 3 AZ 容器编排
系统节点组 2× m7g.large Graviton (Managed NG) Karpenter, CoreDNS
工作负载节点 Karpenter 自动扩缩 r7g/r6g (Spot + On-Demand) LiteLLM Pod
LiteLLM 3 副本,HPA 3-20 LLM 代理网关
Aurora PostgreSQL Serverless v2 (0.5–8 ACU) 元数据存储
ElastiCache Redis cache.r7g.large × 2, TLS+Auth 响应缓存
ALB + WAFv2 Internet-facing, HTTPS (ACM) 入口 + 防护
External Secrets Operator Helm chart Secrets Manager → K8s Secret

4.3 Kubernetes 资源清单

litellm-eks/
├── eksctl-cluster.yaml          # EKS 集群定义
├── iam-policy.json              # IRSA IAM 权限策略
├── 00-namespace.yaml            # Namespace
├── 01-serviceaccount.yaml       # ServiceAccount (IRSA)
├── 02-secretstore.yaml          # ESO SecretStore
├── 03-externalsecret.yaml       # ESO ExternalSecret (12 个密钥)
├── 04-configmap.yaml            # LiteLLM 配置(模型、路由、缓存)
├── 05-deployment.yaml           # Deployment (3 副本, 反亲和, 探针)
├── 06-service.yaml              # ClusterIP Service
├── 07-ingress.yaml              # ALB Ingress (HTTPS, WAF, CIDR 限制)
├── 08-hpa.yaml                  # HPA (CPU 65% / Memory 75%, 3-20 副本)
├── 09-pdb.yaml                  # PDB (最少 2 可用)
├── 10-networkpolicy.yaml        # NetworkPolicy (零信任)
└── 11-karpenter-nodepool.yaml   # Karpenter NodePool + EC2NodeClass

4.4 关键部署步骤

# 1. 创建 EKS 集群
eksctl create cluster -f eksctl-cluster.yaml

# 2. 安装 Karpenter + 创建节点池
helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \
  --version "1.3.0" --namespace kube-system \
  --set "settings.clusterName=$CLUSTER_NAME" \
  --set "settings.clusterEndpoint=$CLUSTER_ENDPOINT" ...
kubectl apply -f 11-karpenter-nodepool.yaml

# 3. 创建 ElastiCache Redis + Aurora PostgreSQL (AWS CLI)

# 4. 写入 Secrets Manager
aws secretsmanager create-secret --name litellm/master-key --secret-string "$MASTER_KEY"
aws secretsmanager create-secret --name litellm/database-url --secret-string "$DATABASE_URL"

# 5. 安装 Helm 组件
helm install aws-load-balancer-controller eks/aws-load-balancer-controller ...
helm install external-secrets external-secrets/external-secrets ...

# 6. 部署 K8s 资源
kubectl apply -f 00-namespace.yaml
kubectl apply -f 01-serviceaccount.yaml
# ... 依次 apply 所有 YAML

# 7. 配置 Route53 DNS → ALB
# 8. 验证
curl -sk https://$DOMAIN/health/readiness

4.5 支持的模型

EKS 方案支持多 Provider 混合部署:

Provider 模型示例 认证方式
AWS Bedrock Claude Sonnet 4.6, Opus 4.6, Nova Pro IRSA(无需 API Key)
Google Gemini 2.0 Flash, Gemini 2.5 Pro API Key
OpenAI GPT-4o, o3-mini API Key
Azure OpenAI GPT-4o API Key + Endpoint

4.6 SSO 集成(Cognito OIDC)

管理界面通过 AWS Cognito SSO 认证:

Cognito 组 LiteLLM 角色 权限
admin proxy_admin 完全管理
viewer proxy_admin_viewer 只读
users internal_user 管理自己的 Key

4.7 EKS 方案特点

优势: - ✅ Kubernetes 原生,生态丰富 - ✅ Karpenter 智能扩缩,Spot 实例降低 60%+ 成本 - ✅ Graviton (ARM) 节点,性价比更高 - ✅ NetworkPolicy 零信任网络 - ✅ External Secrets Operator 自动同步密钥 - ✅ SSO 集成(Cognito OIDC) - ✅ 多 Provider 支持(Bedrock + Gemini + OpenAI + Azure) - ✅ PodDisruptionBudget 保证滚动更新零停机

适用场景: - 团队有 Kubernetes 经验 - 需要精细化的资源调度和网络策略 - 多 LLM Provider 混合使用 - 需要 SSO 集成 - 追求极致成本优化(Spot + Graviton)


5. 安全最佳实践

两种方案均遵循以下安全原则:

5.1 网络安全对比

层级 ECS 方案 EKS 方案
入口防护 CloudFront + WAF (6 规则) ALB + WAFv2 (3 规则)
传输加密 TLS 1.2+ 全链路 TLS 1.2+ 全链路
内网隔离 Internal ALB + 私有子网 ClusterIP + NetworkPolicy
Bedrock 调用 VPC Endpoint (PrivateLink) IRSA 直连
数据库访问 Security Group 限制 Security Group + NetworkPolicy

5.2 密钥管理

方案 密钥存储 注入方式
ECS AWS Secrets Manager ECS Task Definition 环境变量引用
EKS AWS Secrets Manager External Secrets Operator → K8s Secret

5.3 IAM 最小权限

5.4 数据加密

组件 加密方式
Aurora PostgreSQL 存储加密 (AES-256) + 删除保护
Redis TLS 传输加密 + Auth Token
DynamoDB KMS 加密 + 时间点恢复 (PITR)
S3 AES-256 服务端加密 + 强制 HTTPS

6. 可观测性与审计

6.1 日志架构

API Request
    ├──▶ CloudWatch Logs        — 应用运行日志(30 天保留)
    ├──▶ S3                     — 完整 request/response JSON(Intelligent-Tiering)
    ├──▶ Aurora PostgreSQL      — 费用追踪、用量统计、审计日志
    └──▶ LiteLLM UI Dashboard  — 可视化监控

6.2 S3 审计日志

每次 API 调用生成 JSON 文件,包含: - 完整的用户输入(prompt)和模型输出(completion) - 使用的模型、调用费用、Token 用量 - 调用者 Key 别名、请求来源 IP - 延迟指标(startTime / endTime / response_time)

6.3 LiteLLM Dashboard

通过 /ui 访问管理界面: - Request Logs:每次调用的 request/response 详情 - Usage:按用户/Key/模型的用量统计 - Spend:费用追踪和预算管理 - Models:模型配置和健康状态


7. 方案对比

两种方案采用不同的技术栈,适配不同的团队技术背景:

维度 ECS Fargate EKS
部署方式 CloudFormation 模板 Kubernetes YAML + Helm
计算平台 Fargate Serverless 容器 EC2 节点(Managed NG + Karpenter)
节点管理 无需管理(Serverless) Karpenter 自动扩缩 + Spot/Graviton
入口层 CloudFront + Internal ALB ALB Ingress Controller
网络隔离 Security Group Security Group + NetworkPolicy
密钥注入 ECS Task Definition 引用 Secrets Manager External Secrets Operator → K8s Secret
Bedrock 认证 IAM User + VPC Endpoint (PrivateLink) IRSA (Pod 级 IAM Role)
扩缩容 ECS Auto Scaling (Target Tracking) HPA + Karpenter (节点级 + Pod 级)
多 Provider 支持 支持(IRSA 原生集成)
SSO 集成 支持 Cognito OIDC 集成
成本模式 Serverless 按需付费 Serverless + Spot 按需付费
IaC 工具 CloudFormation eksctl + kubectl + Helm

两种方案本质上是容器编排平台的选择差异,核心能力(高可用、弹性扩缩、安全合规、可观测性)完全一致,团队可根据现有技术栈自由选择。


8. 成本优势:Serverless 按需付费

两种方案均大量采用 AWS Serverless 组件,核心优势是按需付费、无需预置容量

组件 Serverless 特性
Aurora Serverless v2 按 ACU 秒级计费,空闲时自动缩至 0.5 ACU,无需预估数据库规格
ElastiCache Redis Serverless 按实际存储和请求量计费,零流量时接近零成本
ECS Fargate 按容器运行时间计费,无需管理 EC2 实例
DynamoDB On-Demand 按请求次数计费,无需预置读写容量
CloudFront 按请求数和流量计费,无最低消费
Karpenter + Spot(EKS) 自动选择最优实例类型,Spot 实例可节省 60%+ 计算成本

关键设计原则: - 🔄 弹性伸缩:所有组件随业务负载自动扩缩,高峰期自动扩容,低谷期自动缩容 - 💰 零浪费:不使用时不产生费用(或仅产生极低的基础费用) - 📈 线性增长:成本与实际 LLM 调用量线性相关,无阶梯式跳变


9. 进阶:Control Plane / Data Plane 分离的多区域架构

✨ 此功能需要 LiteLLM Enterprise License。

当业务扩展到多区域时,可以采用 LiteLLM 的 Control Plane / Data Plane 分离架构,将管理面和数据面解耦,实现全球多区域部署。

9.1 架构设计

                    ┌─────────────────────────────────────────────────────┐
                    │              Admin Instance (Control Plane)          │
                    │              admin.company.com                       │
                    │              - Key 管理、用户管理                     │
                    │              - 配置变更、监控 Dashboard               │
                    │              DISABLE_LLM_API_ENDPOINTS=true          │
                    └──────────────────────┬──────────────────────────────┘
                                           │
                              共享 Aurora Global Database
                                           │
              ┌────────────────────────────┼────────────────────────────┐
              │                            │                            │
    ┌─────────▼─────────┐      ┌──────────▼──────────┐     ┌──────────▼──────────┐
    │  US Worker (ECS)  │      │  EU Worker (EKS)    │     │  APAC Worker (ECS)  │
    │  us.company.com   │      │  eu.company.com     │     │  apac.company.com   │
    │  DISABLE_ADMIN=true│      │  DISABLE_ADMIN=true │     │  DISABLE_ADMIN=true │
    │  → Bedrock us-east│      │  → Bedrock eu-west  │     │  → Bedrock ap-north │
    └───────────────────┘      └─────────────────────┘     └─────────────────────┘

9.2 核心理念

组件 职责 环境变量
Admin Instance 用户管理、Key 生成、配置变更、Dashboard DISABLE_LLM_API_ENDPOINTS=true
Worker Instance 处理 LLM 请求、路由、缓存、负载均衡 DISABLE_ADMIN_UI=true + DISABLE_ADMIN_ENDPOINTS=true

所有实例共享同一个数据库,Admin 实例创建的 Key/用户/配置自动对所有 Worker 生效。

9.3 配置方式

Admin Instance(管理面)

DISABLE_LLM_API_ENDPOINTS=true      # 禁用 LLM API,仅保留管理端点
DATABASE_URL=postgresql://user:pass@global-db:5432/litellm
LITELLM_MASTER_KEY=your-master-key

Worker Instance(数据面)

DISABLE_ADMIN_UI=true               # 禁用管理 UI
DISABLE_ADMIN_ENDPOINTS=true        # 禁用管理 API
DATABASE_URL=postgresql://user:pass@global-db:5432/litellm
LITELLM_MASTER_KEY=your-master-key

9.4 架构优势

  1. 降低管理开销:仅一个实例需要管理能力
  2. 区域性能优化:用户就近访问 Worker 节点,低延迟
  3. 集中控制:所有管理操作通过单一界面完成
  4. 安全隔离:Worker 节点禁用管理端点,减少攻击面
  5. 灵活混合:不同区域可自由选择 ECS 或 EKS 部署

9.5 客户端使用

from openai import OpenAI

# 美国用户 → US Worker
client_us = OpenAI(base_url="https://us.company.com/v1", api_key="sk-xxx")

# 欧洲用户 → EU Worker
client_eu = OpenAI(base_url="https://eu.company.com/v1", api_key="sk-xxx")

# 管理操作 → Admin Instance
import requests
requests.post("https://admin.company.com/key/generate",
              headers={"Authorization": "Bearer sk-master"},
              json={"duration": "30d"})

9.6 Worker 端点说明

Worker 实例禁用管理端点后,仅保留以下 API: - /chat/completions — LLM 请求 - /v1/* — OpenAI 兼容 API - /bedrock/* — Bedrock 透传 API - /vertex_ai/* — Vertex AI 透传 API - /health — 健康检查 - /metrics — Prometheus 指标


10. 总结

LiteLLM 作为生产级 AI Gateway,在 AWS 上有两种成熟的部署路径:

  1. ECS Fargate部署代码):适合追求简单运维的团队,CloudFormation 一键部署,Serverless 免管理节点
  2. EKS部署代码):适合需要精细控制的团队,Kubernetes 原生生态,Karpenter + Spot 优化成本

两种方案均支持: - ✅ 高可用(多 AZ 部署) - ✅ 弹性扩缩(Auto Scaling / HPA + Karpenter) - ✅ 安全合规(WAF + TLS + VPC Endpoint + IAM 最小权限) - ✅ 完整可观测性(CloudWatch + S3 审计 + Dashboard)

对于多区域场景,可进一步采用 LiteLLM Enterprise 的 Control Plane / Data Plane 分离架构,在保持集中管理的同时为各区域用户提供低延迟的 LLM 访问体验,且各区域可自由选择 ECS 或 EKS 作为部署方式。


参考资源