Skip to content

architecture control data plane

JJong-03 edited this page Jun 17, 2026 · 4 revisions

제어 플레인 & 데이터 플레인

Aegis-Pi는 배포/운영 제어, telemetry 수집, 사용자 API, 실시간 push를 서로 다른 경로로 분리한다.


경계 원칙

구분 담당 통과 경로 직접 접근 금지
제어 플레인 배포, rollback, Spoke 등록 GitHub Actions -> ECR -> Hub ArgoCD -> Tailscale -> K3s API Dashboard Backend가 ArgoCD/K3s/EKS/Tailscale API를 직접 읽지 않음
데이터 플레인 telemetry 수집, 정규화, risk/read model Edge outbox -> IoT Core -> Lambda data processor -> DynamoDB/S3 배포 경로가 telemetry 수집을 운반하지 않음
사용자/API 플레인 SPA, 인증, REST API, WebSocket Browser -> Cognito/CloudFront/ALB/ECS 사용자가 Tailscale 또는 Hub EKS에 접속하지 않음
Push 플레인 상태 변경 fan-out DynamoDB Streams -> notifier -> Redis -> WebSocket 브라우저가 DynamoDB Streams나 Redis에 직접 붙지 않음

Control / Management VPC와 Data / Dashboard VPC 사이에는 VPC peering, Transit Gateway, 사설 라우팅을 두지 않는다. 공유해야 할 상태는 DynamoDB, S3, CloudWatch 같은 managed/global service의 IAM 권한으로 전달한다.


1. 배포 / 제어 경로

Developer / Operator
  -> GitHub Repository
  -> GitHub Actions
       - test
       - image build
       - ECR push
       - manifest / Helm values update
  -> Amazon ECR
  -> Hub ArgoCD (Control / Management VPC, EKS)
  -> Tailscale Connector / Operator
  -> factory-a K3s API
  -> factory-b K3s API
  -> factory-c K3s API
  -> workload rollout

이 경로는 배포 상태를 관리한다. MQTT 데이터 수집과 Dashboard 사용자 API는 이 경로에 의존하지 않는다. Hub 또는 Tailscale 장애가 발생하면 신규 sync/rollback은 중단되지만, 이미 실행 중인 K3s Pod, Longhorn, InfluxDB, edge workload는 계속 동작한다.

factory별 정책

Factory 성격 Sync 정책
factory-a 운영형 Raspberry Pi Spoke manual sync 우선, prune/self-heal 보수적
factory-b Mac mini VM 테스트베드 자동 sync 허용 가능
factory-c Windows VM 테스트베드 자동 sync 허용 가능

2. MQTT / 데이터 경로

factory-a Safe-Edge workload
  -> InfluxDB / Kubernetes API / local outbox
  -> factory-a-log-adapter
  -> edge-iot-publisher
  -> MQTT mTLS over Public Internet
  -> AWS IoT Core / Rules
  -> Lambda data processor
  -> DynamoDB
       - LATEST
       - HISTORY#STATE
       - GRAPH#5M
       - CLOUD#infra
  -> S3
       - raw/
       - processed/
       - processed_agg/
       - reports/
factory-b/c VM 테스트베드
  -> dummy-data-generator
  -> edge-iot-publisher
  -> MQTT mTLS over Public Internet
  -> AWS IoT Core / Rules
  -> 동일한 data processor와 read model

Tailscale은 이 경로에 포함되지 않는다. MQTT는 AWS IoT Core 공개 ATS endpoint와 X.509 인증서를 사용한다. Factory별 분리는 topic과 S3 prefix, DynamoDB key의 factory_id로 수행한다.


3. 사용자 / API 경로

Browser
  -> Route 53 DNS
  -> CloudFront (+ WAF/IP 제한은 선택·계획 구성)
  -> S3 SPA dashboard-web
  -> Cognito Hosted UI
  -> ALB HTTPS api.<도메인>
  -> ECS Fargate Backend
  -> DynamoDB / S3 / RDS PostgreSQL / Redis

Backend는 Cognito JWT를 검증하고, RDS PostgreSQL의 사용자/공장 권한 메타데이터로 응답 범위를 제한한다.

대표 read path는 아래와 같다.

화면 / API Read source
공장 latest DynamoDB LATEST
공장 history DynamoDB HISTORY#STATE
장기 그래프 DynamoDB GRAPH#5M
일간 보고서 S3 reports/daily/
Cloud infra DynamoDB CLOUD#infra
사용자/RBAC RDS PostgreSQL
캐시 ElastiCache Redis

Dashboard Backend는 Spoke K3s API, Hub EKS API, ArgoCD API, Tailscale Admin API를 직접 조회하지 않는다. CloudInfraSlowCollector가 EKS/ArgoCD/S3 freshness를 읽는 경우도 Hub namespace workload가 아니라 외부 Lambda가 제한된 권한으로 read model을 갱신하는 경로다.


4. WebSocket Push 경로

Lambda data processor
  -> DynamoDB item write
  -> DynamoDB Streams
  -> Lambda notifier (Data / Dashboard VPC attach)
  -> ElastiCache Redis Pub/Sub
  -> ECS Fargate Backend
  -> WebSocket /ws/factories/{factory_id}
  -> Browser state update

WebSocket은 상태 변경을 빠르게 반영하기 위한 push 경로다. 연결 실패 시 Dashboard는 REST polling으로 degrade할 수 있다. Redis는 브라우저가 직접 접근하는 저장소가 아니라 ECS task 간 fan-out과 cache-aside 용도다.


5. 인프라 책임 경계

도구 담당
Terraform VPC, subnet, NAT, EKS, IAM/OIDC/IRSA, ECR, IoT Core, Lambda/Scheduler, DynamoDB, S3, Dashboard VPC, ALB, ECS, RDS, Redis, Cognito, CloudFront
Ansible EKS bootstrap, namespace/LimitRange, ArgoCD, Grafana, AWS Load Balancer Controller, Tailscale Operator, 검증
GitHub Actions test, image build, ECR push, manifest/value update
GitHub + ArgoCD Application/ApplicationSet sync, Spoke workload rollout, runtime drift control

Terraform은 AWS 인프라의 source of truth이고, 장기 운영 애플리케이션의 Kubernetes 상태는 GitHub + ArgoCD가 담당한다. GitHub Actions는 운영 클러스터에 직접 kubectl apply하지 않는다.


관련 문서

Aegis-Pi Wiki

· 대표 문서 목록은 홈의 문서 탐색 표 참조

시작하기

요구사항

핵심 개념

아키텍처

컴포넌트 (Edge → Cloud → Dashboard)

Dashboard & 운영

시나리오 · 사례 · 참조

Clone this wiki locally