🚀 Tier0 完整架构文档

AWS 云环境一键部署方案

EKS

集群

HA

高可用

Multi

多租户

100%

Linux

最后更新: 2026-01-19 04:21:08

Tier0 EKS 集群完整架构文档


版本: v2.1 | 更新时间: 2026-01-18

一、系统架构总览


1.1 整体架构图


graph TB Internet[Internet] NLB[AWS NLB] Ingress[Ingress Nginx] Frontend[Frontend :3000] Admin[Admin :3000] Grafana[Grafana :3000] Gateway[API Gateway gwsvr :8795] Syssvr[syssvr :9540] Ressvr[ressvr :5726] Unssvr[unssvr :9623] Internet --> NLB NLB --> Ingress Ingress --> Frontend Ingress --> Admin Ingress --> Grafana Frontend --> Gateway Admin --> Gateway Gateway --> Syssvr Gateway --> Ressvr Gateway --> Unssvr style NLB fill:#fff4e6 style Gateway fill:#f3e5f5

1.2 租户服务架构


graph TB Gateway["gwsvr 网关服务
解析租户ID"] T1["tenant-***
租户1"] T2["tenant-***
租户2"] T3["tenant-***
租户3"] N1["NodeRED :1880"] E1["EventFlow :1889"] B1["Notebook :2718"] N2["NodeRED :1880"] E2["EventFlow :1889"] B2["Notebook :2718"] N3["NodeRED :1880"] E3["EventFlow :1889"] B3["Notebook :2718"] Gateway --> T1 Gateway --> T2 Gateway --> T3 T1 --> N1 T1 --> E1 T1 --> B1 T2 --> N2 T2 --> E2 T2 --> B2 T3 --> N3 T3 --> E3 T3 --> B3 style Gateway fill:#f3e5f5 style T1 fill:#e8f5e9 style T2 fill:#e8f5e9 style T3 fill:#e8f5e9

二、请求流转链路


2.1 用户访问前端


graph TB Browser["用户浏览器"] DNS["Route 53
DNS 解析"] NLB["AWS NLB
L4 负载均衡
TCP:80/443"] Ingress["Ingress Nginx
L7 路由
Host: tier0-eks-frontend.tier0.dev
Path: /"] Frontend["Frontend
React/Vue 前端
静态资源 + API 代理
:3000"] Browser -->|HTTPS| DNS DNS --> NLB NLB --> Ingress Ingress --> Frontend style DNS fill:#e1f5ff style NLB fill:#fff4e6 style Ingress fill:#f3e5f5 style Frontend fill:#e8f5e9

2.2 API 请求链路


graph TB API["前端 API 请求
POST /api/v1/device/list"] Ingress["Ingress Nginx"] Gateway["gwsvr 网关"] Auth["JWT验证
租户ID提取
权限校验
限流熔断"] Syssvr["syssvr"] Ressvr["ressvr"] Unssvr["unssvr"] Tenant["tenant service"] subgraph DataLayer["数据层"] PG["PostgreSQL"] Redis["Redis"] ETCD["ETCD"] end API --> Ingress Ingress --> Gateway Gateway --> Auth Auth --> Syssvr Auth --> Ressvr Auth --> Unssvr Auth --> Tenant Syssvr --> PG Ressvr --> PG Unssvr --> PG Tenant --> PG Syssvr --> Redis Ressvr --> Redis Syssvr --> ETCD style Gateway fill:#f3e5f5 style Auth fill:#fff3e0 style DataLayer fill:#e8f5e9

2.3 租户服务请求链路


graph TB User["用户请求 NodeRED
GET /nodered/tenant-***/"] Ingress["Ingress Nginx
匹配规则"] Gateway["gwsvr 网关"] Parse["解析路径
提取租户ID
验证权限
构建目标
代理请求"] NodeRED["NodeRED :1880
流程编辑器"] EMQX["EMQX :1883
mid命名空间"] User --> Ingress Ingress --> Gateway Gateway --> Parse Parse -->|内部路由| NodeRED NodeRED -->|MQTT连接| EMQX style Gateway fill:#f3e5f5 style Parse fill:#fff3e0 style NodeRED fill:#e8f5e9

2.4 IoT 设备数据链路


graph TB Device["IoT 设备"] NLB["AWS NLB"] EMQX["EMQX MQTT Broker"] Auth["认证插件"] PG["PostgreSQL"] Rule["规则引擎"] Webhook["Webhook"] NodeRED["NodeRED"] TS["TimescaleDB"] Device -->|MQTT| NLB NLB --> EMQX EMQX --> Auth Auth --> PG EMQX --> Rule Rule --> Webhook Webhook --> NodeRED NodeRED --> TS style EMQX fill:#fff4e6 style Rule fill:#f3e5f5


三、基础设施详情


3.1 网络架构


graph TB Internet["Internet"] IGW["Internet Gateway"] NLB["Network Load Balancer"] subgraph VPC["VPC vpc-***"] subgraph Public1["Public Subnet AZ1"] NAT1["NAT Gateway"] end subgraph Public2["Public Subnet AZ2"] NAT2["NAT Gateway"] end subgraph Private1["Private Subnet AZ1"] EKS1["EKS Nodes"] PG1["PostgreSQL Primary"] end subgraph Private2["Private Subnet AZ2"] EKS2["EKS Nodes"] PG2["PostgreSQL Standby"] end end Internet --> IGW IGW --> NLB NLB --> EKS1 NLB --> EKS2 EKS1 --> NAT1 EKS2 --> NAT2 NAT1 --> IGW NAT2 --> IGW style VPC fill:#e3f2fd style Public1 fill:#fff3e0 style Public2 fill:#fff3e0 style Private1 fill:#f3e5f5 style Private2 fill:#f3e5f5

3.2 EKS 集群配置


配置项 说明
集群名称 tier0-eks-pre 预生产环境
K8s 版本 1.34 最新稳定版
节点组 managed AWS 托管节点组
节点数量 6 跨 3 个 AZ
节点类型 t3.medium/large 按需调整
OIDC 已启用 IAM Roles for Service Accounts
CNI AWS VPC CNI 原生 VPC 网络
CSI EBS CSI, EFS CSI 存储驱动

3.3 EC2 PostgreSQL HA 集群


graph TB NLB["Internal NLB
postgres-nlb-***.elb.ap-southeast-1.amazonaws.com
:5432"] subgraph Primary["Primary 主库
IP: 172.31.x.x
Instance: t3.medium"] PG1["PostgreSQL :5432"] Node1["Node Exporter :9100"] PGExp1["PG Exporter :9187"] end subgraph Standby["Standby 从库
IP: 172.31.x.x
Instance: t3.medium"] PG2["PostgreSQL :5432"] Node2["Node Exporter :9100"] PGExp2["PG Exporter :9187"] end K8S1["K8s Service
postgres-leader
ExternalName"] K8S2["K8s Service
postgres-replica
ClusterIP 只读"] NLB --> PG1 NLB --> PG2 PG1 -->|流复制| PG2 K8S1 --> NLB K8S2 --> PG2 style Primary fill:#e8f5e9 style Standby fill:#fff3e0 style NLB fill:#e3f2fd

四、服务详情


4.1 业务服务矩阵


服务 端口 功能 依赖
gwsvr 8795 API 网关、路由、认证 Redis, ETCD, PostgreSQL
syssvr 9540 系统管理、用户、权限 PostgreSQL, Redis
ressvr 5726 资源管理、设备、产品 PostgreSQL, Redis, EMQX
unssvr 9623/9633 通用服务、文件、通知 PostgreSQL, S3
timedjob 3256 定时任务执行 PostgreSQL, Redis
timedscheduler 9284 任务调度 PostgreSQL, ETCD
frontend 3000 Web 前端 gwsvr (API)
platform-admin 3000 管理后台 gwsvr (API)

4.2 中间件服务


组件 命名空间 端口 说明
Redis default 6379 缓存、会话、分布式锁
ETCD default 2379 配置中心、服务发现
EMQX mid 1883/8883 MQTT Broker
PostgreSQL EC2 5432 主数据库

4.3 租户服务


服务 端口 功能
NodeRED 1880 可视化流程编辑器
EventFlow 1889 事件流处理引擎
Notebook 2718 数据分析笔记本

五、监控系统


5.1 监控架构


graph TB subgraph Exporters["数据采集层"] Node["Node Exporter :9100"] PGExp["PG Exporter :9187"] RedisExp["Redis Exporter :9121"] EMQXExp["EMQX Metrics :18083"] CWExp["CloudWatch Exporter :9106"] end Prom["Prometheus
7天存储 50Gi
121条告警规则"] Grafana["Grafana
7个面板
实时监控"] Alert["Alertmanager
飞书通知
告警路由"] Loki["Loki
日志聚合
7天保留"] Node --> Prom PGExp --> Prom RedisExp --> Prom EMQXExp --> Prom CWExp --> Prom Prom --> Grafana Prom --> Alert Prom --> Loki style Prom fill:#fff4e6 style Grafana fill:#e8f5e9 style Alert fill:#ffebee style Loki fill:#f3e5f5

5.2 Grafana 面板列表


面板名称 说明 关键指标
PostgreSQL EC2 HA - Complete 数据库完整监控 QPS, 连接数, 缓存命中率, 复制延迟
Production Overview 生产环境总览 节点状态, Pod 状态, 资源使用
SLA Monitoring SLA 监控 可用性, 响应时间, 错误率
Business Monitoring 业务监控 API QPS, 延迟, 错误
Tenant Details 租户详情 租户资源使用, 请求量
Logs Dashboard 日志监控 日志量, 错误日志, 级联筛选
Business Logs 业务日志 业务服务日志

5.3 告警规则分类


类别 数量 示例
Critical 7 NodeDown, PodCrashLooping, PostgreSQLDown
Warning 14 HighCPU, HighMemory, HighDiskUsage
Info 3 PodRestarted, DeploymentUpdated
Recording 8 预计算规则

六、域名与入口


域名 服务 端口 说明
tier0-eks-frontend.tier0.dev Frontend 3000 用户前端
tier0-admin-dev.tier0.dev Platform Admin 3000 管理后台
grafana.tier0.dev Grafana 3000 监控面板
locust.tier0.dev Locust 8089 压测工具
emqx-dashboard (NLB) EMQX Dashboard 18083 MQTT 管理
emqx-service (NLB) EMQX 1883/8883 MQTT 服务

七、运维手册


7.1 常用命令



# 查看所有服务状态
kubectl get pods -A | grep -v Running

# 查看业务服务日志
kubectl logs -n default -l app=gwsvr --tail=100 -f

# 查看租户服务
kubectl get pods -n tenant-tenant-***

# 扩缩容
kubectl scale deployment -n default gwsvr --replicas=2

# 启动压测
kubectl scale deployment -n locust locust-master --replicas=1
kubectl scale deployment -n locust locust-worker --replicas=3

# 查看监控 targets
kubectl port-forward -n monitoring svc/prometheus-operated 9090:9090

7.2 故障排查



# Pod 异常
kubectl describe pod  -n 
kubectl logs  -n  --previous

# 网络问题
kubectl exec -it  -- curl -v http://service:port

# 数据库连接
kubectl exec -it  -- psql -h postgres-leader -U *** -d ***

# 查看事件
kubectl get events -n  --sort-by='.lastTimestamp'

八、目录结构



/data/cdk-kiro/
├── tier0/                          # 一键部署
│   ├── config/
│   │   └── env.template            # 环境变量模板
│   ├── infrastructure/
│   │   └── terraform/              # Terraform 模块
│   │       ├── main.tf
│   │       ├── variables.tf
│   │       └── modules/
│   │           ├── vpc/
│   │           ├── eks/
│   │           ├── efs/
│   │           ├── s3/
│   │           └── iam/
│   ├── business/
│   │   ├── services/               # 业务服务 YAML
│   │   ├── tenants/                # 租户配置
│   │   ├── configmaps/             # ConfigMap
│   │   └── ingress/                # Ingress 配置
│   ├── monitoring/
│   │   ├── postgres-complete-monitoring.yaml
│   │   └── production-monitoring-rules.yaml
│   └── scripts/
│       ├── deploy.sh               # 主部署脚本
│       ├── deploy-infrastructure.sh
│       ├── deploy-business.sh
│       └── common.sh
├── monitoring/                     # 监控配置
├── locust/                         # 压测工具
│   ├── k8s/
│   │   └── locust-deployment.yaml
│   └── scripts/
│       └── database_load_test.py
├── docs/                           # 文档
│   ├── v2-current/
│   │   └── tier0-complete-architecture.md
│   └── v1-archive/
└── backups/


九、连接信息与凭证


9.1 数据库连接


PostgreSQL (EC2 HA)


配置项
主库地址 `postgres-leader.default.svc.cluster.local:5432`
从库地址 `postgres-replica.default.svc.cluster.local:5432`
NLB 地址 `postgres-nlb-***.elb.ap-southeast-1.amazonaws.com:5432`
数据库名 `***`
用户名 `***`
密码 `***`
DSN `postgres://***:***@postgres-leader:5432/***?sslmode=disable`


# K8s 内部连接
psql -h postgres-leader -U *** -d ***

# 外部连接 (通过 NLB)
psql -h postgres-nlb-***.elb.ap-southeast-1.amazonaws.com -U *** -d ***

Redis


配置项
地址 `redis.default.svc.cluster.local:6379`
密码 无 (内网访问)


# 连接测试
kubectl exec -it deployment/redis -n default -- redis-cli ping

ETCD


配置项
地址 `etcd.default.svc.cluster.local:2379`
Endpoints `http://etcd.default.svc.cluster.local:2379`


# 连接测试
kubectl exec -it etcd-0 -n default -- etcdctl endpoint health

9.2 消息队列


EMQX (MQTT Broker)


配置项
MQTT 地址 `k8s-ingressn-***.elb.ap-southeast-1.amazonaws.com`
MQTT 端口 `1883` (TCP), `8883` (TLS), `8083` (WebSocket)
Dashboard `k8s-ingressn-***.elb.ap-southeast-1.amazonaws.com:18083`
用户名 `***`
密码 `***`


# MQTT 连接测试
mosquitto_pub -h k8s-mid-emqxserv-*.elb.ap-southeast-1.amazonaws.com -p 1883 -t test -m "hello"

9.3 监控系统


Grafana


配置项
地址 `https://grafana.tier0.dev`
用户名 `***`
密码 `Admin@123456`

Prometheus


配置项
内部地址 `prometheus-operated.monitoring.svc.cluster.local:9090`
端口转发 `kubectl port-forward -n monitoring svc/prometheus-operated 9090:9090`

Alertmanager


配置项
内部地址 `alertmanager-operated.monitoring.svc.cluster.local:9093`

9.4 AWS 云组件


S3 存储桶


存储桶名称 用途 Region
`tier0-upload-pre` 用户上传文件 ap-southeast-1
`tier0-upload-public-pre` 公开资源 ap-southeast-1
`tier0-upload-temp-pre` 临时文件 ap-southeast-1


# 访问示例
aws s3 ls s3://tier0-upload-pre/ --region ap-southeast-1

EFS 文件系统


文件系统 ID 名称 用途
`fs-05278dec70d98abd2` tier0-efs 业务数据持久化
`fs-0b8b9744472f565f8` monitoring-efs 监控数据存储


# 挂载点
mount -t efs fs-05278dec70d98abd2:/ /mnt/efs

NLB 负载均衡器


名称 DNS 类型 用途
k8s-ingressn-ingressn `k8s-ingressn-***.elb.ap-southeast-1.amazonaws.com` internet-facing Ingress 入口
k8s-mid-emqxserv `k8s-ingressn-***.elb.ap-southeast-1.amazonaws.com` internet-facing MQTT 服务
k8s-mid-emqxdash `k8s-ingressn-***.elb.ap-southeast-1.amazonaws.com` internet-facing EMQX Dashboard
postgres-nlb `postgres-nlb-***.elb.ap-southeast-1.amazonaws.com` internal PostgreSQL
k8s-locust-locustma `k8s-ingressn-***.elb.ap-southeast-1.amazonaws.com` internet-facing Locust 压测

EC2 实例


名称 实例 ID 私有 IP 用途
postgres-ha-primary i-*** 172.31.x.x PostgreSQL 主库
postgres-ha-standby i-*** 172.31.x.x PostgreSQL 从库


# SSH 连接 (通过 SSM)
aws ssm start-session --target i-*** --region ap-southeast-1

9.5 业务服务端口


服务 ClusterIP 端口 说明
gwsvr 8795 API 网关
syssvr 9540 系统服务
ressvr 5726 资源服务
unssvr 9623, 9633 通用服务
timedjob 3256 定时任务
timedscheduler 9284, 3256 任务调度
frontend 3000 前端
platform-admin 3000 管理后台

9.6 租户服务端口


服务 端口 说明
nodered 1880 NodeRED 编辑器
eventflow 1889 事件流处理
notebook 2718 数据分析笔记本

9.7 监控 Exporter 端口


Exporter 端口 目标
Node Exporter 9100 EC2 主机指标
PostgreSQL Exporter 9187 PostgreSQL 指标
Redis Exporter 9121 Redis 指标
EMQX Metrics 18083 EMQX 指标
CloudWatch Exporter 9106 AWS 指标

十、环境变量配置


10.1 业务服务环境变量



# 数据库配置
dbType: pgsql
dbDSN: postgres://***:***@postgres-leader:5432/***?sslmode=disable
dbIsInitTable: true

# Redis 配置
REDIS_ADDR: redis.default.svc.cluster.local:6379

# ETCD 配置
ETCD_ENDPOINTS: http://etcd.default.svc.cluster.local:2379

# EMQX 配置
MQTT_BROKER: tcp://emqx.mid.svc.cluster.local:1883

# S3 配置
AWS_REGION: ap-southeast-1
S3_BUCKET: tier0-upload-pre
S3_PUBLIC_BUCKET: tier0-upload-public-pre

10.2 环境变量模板位置



/data/cdk-kiro/tier0/config/env.template