--- title: 인프라 호스트 및 네트워크 updated: 2026-03-18 tags: [infra, network, kr-zone, openwrt] --- ## SSH 접속 정보 인프라 호스트 SSH 접속 정보: incus-jp1 (공인 42.125.196.116, Tailscale 100.109.123.1), incus-kr1 (공인 220.120.65.245, Tailscale 100.84.111.28), incus-hp2 (Tailscale 100.100.52.34), osaka(gw) (ssh root@100.108.39.107, 공인 172.233.93.180), Synology NAS (SSH 불가, Tailscale 100.126.100.82) ## 서버 상세 | SSH 호스트 | Tailscale IP | 역할 | 비고 | |-----------|-------------|------|------| | apisix-osaka | 100.108.39.107 | [[apisix]] API Gateway (오사카) | SSH 직접 접속 | | incus-jp1 | 100.109.123.1 | Incus 호스트 (도쿄) | agents, db, default, monitoring 프로젝트 | | incus-kr1 | 100.84.111.28 | Incus+K3s 호스트 (서울) | GTX 1080 Ti, K3s control-plane (LAN 192.168.9.214), default 프로젝트 | | incus-kr2 | 100.119.109.41 | Incus+K3s 호스트 (서울) | K3s control-plane (LAN 192.168.9.135), default, inbest 프로젝트 | | incus-hp2 | 100.100.52.34 | Incus+K3s 호스트 (서울) | Xeon E5-2670 32코어, 188GB RAM, K3s control-plane (LAN 192.168.9.134), default, inbest 프로젝트 | | openwrt-gw | 100.66.60.66 | OpenWrt 라우터 (서울) | HAProxy: 80/443 → APISIX hostNetwork 9080/9443 (3노드 roundrobin) | | sandbox-tokyo | 100.79.87.48 | 테스트 서버 (도쿄, Linode) | vault-prod, wg-easy, nginx-tcp-proxy (Docker) | | relay4wd | 100.103.161.4 | APISIX Gateway (서울, AWS Lightsail) | inbest 전용, Docker APISIX 3.15.0, Debian 12, nano $5/월, SSH: admin + lightsail.pem | | synology | 100.126.100.82 | NAS (시놀로지) | | ## 서울 K3s 클러스터 서울존 3대(hp2, kr1, kr2)를 K3s v1.34.5+k3s1 클러스터로 구성. 모두 control-plane 역할. | 노드 | LAN IP | OS | |------|--------|----| | incus-hp2 | 192.168.9.134 | Debian 13 (trixie) | | incus-kr1 | 192.168.9.214 | Debian 13 (trixie) | | incus-kr2 | 192.168.9.135 | Debian 13 (trixie) | 주요 네임스페이스: anvil, apisix, argocd, cert-manager, db, gitea, ironclad, kroki, longhorn-system, openmemory, safeline, system-upgrade, tools, vault Traefik: DaemonSet (3노드), LoadBalancer 192.168.9.134/135/214:80,443 APISIX: Deployment (replicas 3, hostNetwork, strategy Recreate), 3노드 :9080/:9443 바인딩 트래픽 흐름: 외부 → OpenWrt HAProxy (TCP 80/443) + nftables (UDP 443) → APISIX hostNetwork (9080/9443, 3노드) → K3s 서비스 → pods ### Helm 릴리스 | Release | Namespace | Chart | App Version | |---------|-----------|-------|-------------| | apisix | apisix | apisix-2.13.0 | 3.15.0 | | argocd | argocd | argo-cd-9.4.14 | v3.3.4 | | cert-manager | cert-manager | cert-manager-v1.20.0 | v1.20.0 | | gitea | gitea | gitea-12.5.0 | 1.25.4 | | longhorn | longhorn-system | longhorn-1.8.2 | v1.8.2 | | reflector | kube-system | reflector-10.0.18 | 10.0.18 | | safeline | safeline | safeline-10.1.0 | 9.3.2 | | traefik | kube-system | traefik-39.0.201 | v3.6.9 | | traefik-crd | kube-system | traefik-crd-39.0.201 | v3.6.9 | | vault | vault | vault-0.32.0 | 1.21.2 | ### ArgoCD Applications | App | Namespace | Repo | |-----|-----------|------| | anvil | anvil | infra-apps (anvil-hosting) | | ironclad | ironclad | infra-apps | | bunnycdn-mcp | tools | bunnycdn-mcp | | cf-bouncer-manager | tools | cf-bouncer-manager | | cloud-api-emulator | tools | cloud-api-emulator | | n8n | tools | infra-apps | | namecheap-api | tools | namecheap-api | | nocodb | tools | infra-apps | | pgcat | tools | infra-apps | | vultr-api | tools | vultr-api | ### kubectl 직접 관리 (Helm/ArgoCD 미적용) db, kroki, openmemory, system-upgrade ### TCP 튜닝 (3노드 공통) - BBR 혼잡 알고리즘 + fq qdisc (`/etc/sysctl.d/99-bbr.conf`, `/etc/modules-load.d/bbr.conf`) - tcp_fin_timeout=15, tcp_fastopen=3, netdev_max_backlog=8192, tcp_max_syn_backlog=8192, tcp_keepalive_time=600, ip_local_port_range=1024-65535 (`/etc/sysctl.d/99-tcp-tuning.conf`) ## 서비스 위치 | 서비스 | 위치 | 접근 방법 | |--------|------|-----------| | [[apisix]] (오사카) | apisix-osaka (Linode, Docker) | SSH / Admin API | | [[apisix]] (서울) | K3s 클러스터 (apisix ns, hostNetwork 3노드) | kubectl / Admin API (ClusterIP 10.43.70.216:9180) | | Anvil | K3s 클러스터 (anvil ns): nginx(x2), php-fpm(x5), redis, ssh-server, proxysql | kubectl | | ArgoCD | K3s 클러스터 (argocd ns) | kubectl / NodePort 30080 | | cert-manager | K3s 클러스터 (cert-manager ns) | kubectl | | [[gitea]] | K3s 클러스터 (gitea ns): gitea, postgresql, valkey | kubectl, gitea.anvil.it.com | | Ironclad | K3s 클러스터 (ironclad ns): nginx, php-fpm, redis, ssh-server, proxysql | kubectl / NodePort 30297 | | Kroki | K3s 클러스터 (kroki ns) | kubectl | | Longhorn | K3s 클러스터 (longhorn-system ns): 분산 스토리지 v1.8.2 | kubectl | | n8n | K3s 클러스터 (tools ns) | kubectl | | NocoDB | K3s 클러스터 (tools ns) | kubectl, nocodb.inouter.com | | OpenMemory | K3s 클러스터 (openmemory ns): mcp, ui, qdrant | kubectl | | PgCat | K3s 클러스터 (tools ns): PostgreSQL pooler | kubectl | | ProxySQL | K3s 클러스터 (db ns) | kubectl | | SafeLine WAF | K3s 클러스터 (safeline ns): detector, mgt, fvm, chaos, luigi, pg | kubectl, safeline.inouter.com | | [[vault]] | K3s 클러스터 (vault ns): HA 3노드(vault-0/1/2), agent-injector, mcp-server | kubectl / vault CLI / MCP | | Vault (legacy) | sandbox-tokyo (Docker, vault-prod) | vault CLI | | WireGuard | sandbox-tokyo (wg-easy Docker) | | | BunnyCDN MCP | K3s 클러스터 (tools ns) | kubectl | | cfb-manager | K3s 클러스터 (tools ns): CrowdSec-Firewall-Bouncer 관리 | kubectl | | cloud-api-emulator | K3s 클러스터 (tools ns): Linode/Vultr/Namecheap API | kubectl | | Prometheus, Grafana | jp1 (monitoring 프로젝트) | incus exec --project monitoring | | DB 서버 | jp1 (db 프로젝트) | incus exec --project db | | DB (분산) | etcd+mariadb+postgres 각 서울 노드 Incus 컨테이너 | incus exec | | etcd (relay4wd용) | jp1 (db), etcd-1 (10.253.102.11) | etcd 2379 | | BunnyCDN | 외부 SaaS | BunnyCDN MCP 서버 / API | | [[backup]] | kr2 → NAS → R2 | systemd timer, rclone | ## Incus 프로젝트 - **jp1**: agents, db, default, monitoring - **kr1**: default - **kr2**: default, inbest - **hp2**: default, inbest ### jp1 컨테이너 **agents 프로젝트**: anvil, awl, blacksmith, cloak, courier, flux, forge, irondesk, irondesk-openmemory, openclaw, rabbitmq, smelt, stamp, tally, web **db 프로젝트**: etcd-1 (10.253.102.11), mariadb-1 (10.253.101.133), mariadb-2 (10.253.103.48), mariadb-3 (10.253.100.132), postgres-1 (10.253.102.35), postgres-2 (10.253.101.173), postgres-3 (10.253.103.116) **default 프로젝트**: baserow, crowdsec (10.253.100.240), cs-cf-worker-bouncer, dev-web, gitea-runner, hey, iac-route, infra-tool, juice-shop, k8s, pricing-api, ssh-test, sshpiper, telegram-web-client, tor-server, vaultwarden, voice-api **monitoring 프로젝트**: grafana (10.253.103.199), prometheus (10.253.100.193) ### kr1 컨테이너 **default 프로젝트**: etcd (10.100.3.7), mariadb-2 (10.100.3.64), postgres-2 (10.100.3.185) ### kr2 컨테이너 **default 프로젝트**: etcd (10.100.1.198), mariadb-3 (10.100.1.162), postgres-3 (10.100.1.83), cloudflared (10.100.1.95) - safeline VM: 셧다운 (K3s safeline ns로 이전, 삭제 예정) **inbest 프로젝트**: mariadb10, nginx, php5, php8, phpmyadmin, sftp ### hp2 컨테이너 **default 프로젝트**: etcd (10.100.2.11), mariadb-1 (10.100.2.234), postgres-1 (10.100.2.5), trader (10.100.2.9) ## GPU kr1에 NVIDIA GeForce GTX 1080 Ti (11GB VRAM) 장착. 호스트 드라이버 550.163.01, CUDA 12.4. ### Incus GPU 이미지 | 이미지 | 설명 | 크기 | |--------|------|------| | docker-gpu | Debian trixie + Docker CE + NVIDIA Container Toolkit | 295MB | | podman-gpu | Debian trixie + Podman + NVIDIA Container Toolkit (CDI) | 277MB | ### GPU 컨테이너 사용법 ```bash # 컨테이너 생성 incus launch docker-gpu my-container # GPU 패스스루 + 호스트 드라이버 자동 주입 incus config set my-container nvidia.runtime true incus config device add my-container gpu gpu # 컨테이너 안에서 GPU 확인 incus exec my-container -- nvidia-smi ``` `nvidia.runtime=true` 설정 시 호스트의 NVIDIA 드라이버 라이브러리가 컨테이너에 자동 마운트됨. 컨테이너 안에 드라이버 설치 불필요. Docker: `--runtime=nvidia` 또는 `--gpus all`로 GPU 사용. Podman: CDI 방식, `--device nvidia.com/gpu=all`로 GPU 사용. ## KR존 네트워크 토폴로지 ``` 인터넷 └── OpenWrt 라우터 (공인 IP: 220.120.65.245, 내부: 192.168.9.1) ├── incus-kr1 (192.168.9.214) ← K3s control-plane ├── incus-kr2 (192.168.9.135, br-uplink 고정) ← K3s control-plane └── incus-hp2 (192.168.9.134) ← K3s control-plane 외부 트래픽 흐름 (TCP): 인터넷 → OpenWrt HAProxy(:80/:443) → APISIX hostNetwork(:9080/:9443, 3노드 roundrobin) → K3s svc → pods 외부 트래픽 흐름 (QUIC/HTTP3): 인터넷 → OpenWrt nftables DNAT(UDP :443) → APISIX hostNetwork(:9443, numgen mod 3 roundrobin) → K3s svc → pods 내부 트래픽 흐름: LAN → K3s/Traefik(192.168.9.x:80/443) → pods 직접 ``` - **게이트웨이**: OpenWrt 라우터 (root@192.168.9.1, SSH user: root) - **OpenWrt HAProxy** (TCP, mode tcp, 3노드 로드밸런싱): - frontend ft_http :80 → backend bk_apisix_http (roundrobin) - frontend ft_https :443 → backend bk_apisix_https (roundrobin) - backend 서버: hp2(192.168.9.134:9080/9443), kr1(192.168.9.214:9080/9443), kr2(192.168.9.135:9080/9443) - stats: :9999 (admin/admin) - **OpenWrt QUIC/HTTP3** (UDP, nftables DNAT): - UDP 443 → numgen inc mod 3 → hp2/kr1/kr2 :9443 roundrobin - CDN IP 필터도 UDP 443에 적용됨 - **K3s datastore**: Incus etcd 3노드 클러스터 (192.168.9.214, 192.168.9.135, 192.168.9.134) - `/registry/` — K3s 클러스터 백엔드 스토어 - `/patroni/nocodb-cluster` — NocoDB PostgreSQL HA - **APISIX etcd** (K3s 내부): apisix-etcd StatefulSet (ClusterIP 10.43.20.100:2379, prefix `/apisix`) - **OVN 네트워크**: ovn1 (10.165.246.0/24) — hp2↔kr2 간 오버레이 - **CDN IP 필터**: BunnyCDN + Cloudflare IP만 80/443 허용, 그 외 WAN 차단 - 스크립트: `/etc/cdn-filter-update.sh` - nftables: `/etc/nftables.d/10-cdn-filter.nft` - 크론: 매일 04:00 업데이트 - **Tailscale 광고 대역**: 10.100.1.0/24 (kr2), 10.100.2.0/24 (hp2), 10.100.3.0/24 (kr1), 192.168.9.0/24 (LAN) - **DNS rebind 예외**: inouter.com (OpenWrt dnsmasq) - 공인 IP `220.120.65.245`는 OpenWrt 라우터의 IP ## 네트워크 대역 네트워크 대역: 100.0.0.0/8 (Tailscale VPN), 10.253.0.0/16 (incus-jp1 내부), 10.100.3.0/24 (incus-kr1 incusbr0), 10.100.1.0/24 (incus-kr2 incusbr0), 10.100.2.0/24 (incus-hp2 incusbr0), 10.179.99.0/24 (incus-kr2 APISIX 전용), 10.42.0.0/16 (k8s 파드), 10.43.0.0/16 (k8s 서비스 ClusterIP), 172.17.0.0/16 (Docker 브릿지, 무시), 192.168.9.0/24 (kaffa 로컬 LAN) ## K3s 클러스터 노드 | 노드명 | K3s Internal IP | 역할 | 호스트 위치 | |--------|----------------|------|------------| | incus-hp2 | 192.168.9.134 | control-plane | — | | incus-kr1 | 192.168.9.214 | control-plane | 서울 | | incus-kr2 | 192.168.9.135 | control-plane | 서울 | ## IPv6 prefix jp1 prefix는 2400:8905:e002:1d02 ## web 컨테이너 web 컨테이너 (incus agents 프로젝트, IP 10.253.100.159): Caddy :80으로 /var/www/sites 서빙, btrfs-pool/shared-sites 볼륨을 stamp과 공유. ironclad.it.com 랜딩페이지 서빙 용도. ## 대시보드 사용 중인 대시보드는 dashboard.inouter.com(내부용) ## Xray Xray VLESS+XHTTP 스텔스 구성 ## 네트워크 정책 실사용: 국내 트래픽은 직접, 해외는 프록시, 광고는 차단