온프레미스
dev 환경, 개발과 공개 데모
노트북 1대(RAM 32GB)에 Proxmox VM으로 k3s 노드 3대(HA)와 OPNsense 방화벽을 구성. 네트워크와 로드밸런서, 스토리지는 k3s 기본값 대신 직접 선택. 노드는 방화벽 뒤 격리망에 두고, 서비스는 Cloudflare를 거쳐 공개(443), 관리 UI는 WireGuard VPN으로만 접근(51820).
온프레미스 구조
설계 결정
쿠버네티스 층
| 항목 | 선택 | 이유 |
|---|---|---|
| 배포판 | k3s. 3대 모두 컨트롤 플레인과 etcd 겸임 | 단일 바이너리라 8GB 노드에 서비스 메모리를 확보. 대신 k3s가 멈추면 컨트롤 플레인과 kubelet이 함께 멈춤 |
| 파드 네트워크 | Calico | 기본 Flannel은 NetworkPolicy를 집행하지 않아, 규칙이 있어도 통신이 허용됨 |
| 로드밸런서와 인그레스 | MetalLB와 Traefik 별도 설치 | 기본 ServiceLB는 노드 IP를 써서 그 노드가 멈추면 접속 불가. 번들 Traefik은 재기동하면 설정이 초기화됨 |
| 스토리지 | 정적 PV로 용도별 디스크를 따로 마운트 | 기본 local-path는 한 디스크 안 폴더라 디스크 지표로 용도를 구분할 수 없음. 대신 파드가 그 노드에 고정됨 |
격리와 공개
| 항목 | 선택 | 이유 |
|---|---|---|
| 격리 | OPNsense 방화벽 VM과 물리 NIC 없는 브리지 | 노드와 데스크탑이 같은 망이면 한쪽이 침해됐을 때 다른 쪽까지 닿음. 격리망 출입 경로를 방화벽 하나로 제한 |
| 관리 접근 | WireGuard 터널 | 관리 UI(Grafana, ArgoCD)를 인터넷에 공개하지 않고, 키를 등록한 기기만 접근 |
| 공개 경로 | Cloudflare 프록시에 방화벽 출발지를 엣지 대역으로 제한, 인증서는 cert-manager | 서비스 도메인에서 집 공인 IP를 숨기고 방문자 연결은 엣지에서 종료. 엣지에서 Traefik까지도 TLS |
| 파드 간 통신 | NetworkPolicy 24개로 네임스페이스별 기본 차단 | 기본값이 파드 간 전체 허용이라, 앱 하나가 침해되면 다른 네임스페이스 DB까지 연결됨 |
트러블슈팅
| 증상 | 원인 | 조치 |
|---|---|---|
외부 443 요청의 Host 헤더만 바꾸면 ArgoCD 로그인 화면 응답 | Traefik이 Host 헤더로만 라우팅하는데 예매 서비스와 Grafana, ArgoCD가 같은 80, 443을 공유 | 관리 UI 라우터를 80 전용으로 분리. 80은 인터넷에 열지 않음 |
| kubelet이 보고한 파드 할당 가능 메모리가 실제보다 큼 | 컨트롤 플레인이 파드가 아닌 k3s 프로세스라 집계에서 1,783Mi 누락 | k3s 2Gi와 OS 512Mi를 예약해 노드당 파드 할당 5,081Mi |
| 데스크탑에서 격리망으로 응답 없음. 방화벽 로그는 통과(pass) | WAN 규칙에 자동으로 붙은 reply-to가 데스크탑(같은 대역)으로 갈 응답을 공유기로 보냄 | 그 규칙의 reply-to를 해제해 패킷 손실 0% |
결과
- 노트북 1대에 k3s HA 클러스터를 구축하고 대기열 예매 서비스를 외부에 공개:
ticket.subinhong.dev - 노드 1대 중단 시험에서 클러스터 유지: etcd 3대 중 남은 2대가 과반
- 공개 경로 외 외부 접근 차단 확인: 포트 20개 스캔에 응답 0, Cloudflare를 거치지 않은 443 직접 접속은 타임아웃
- 파드 출구를 목적지 단위로 제한: booking은 MySQL, Redis, Kafka, 수집기 4곳만 허용
- 클러스터 구성 전부 코드로 관리: k3s
config.yaml, 부트스트랩 9단계, Helm 차트
한계
- 노드 RAM이 부하 상한: 3만 명 부하에서 k3s 재시작, 이후 부하 측정은 stg(EKS)
- 외부 경로 전부가 OPNsense VM 1대에 집중: VM이 멈추면 서비스 공개와 VPN, 격리망 인터넷이 함께 중단
- VPN 접속용 도메인은 집 공인 IP 노출: WireGuard는 UDP라 HTTP만 중계하는 Cloudflare 프록시를 쓸 수 없음
기술 스택
Proxmox VE, k3s, Calico, MetalLB, Traefik, Helm, OPNsense, WireGuard, Cloudflare, cert-manager, Let’s Encrypt