72602
Scope
This section is the single source of truth for 72602 cluster operations.
Topology
- Public ECS:
47.110.67.161(2C4G, Aliyun Hongkong) - Active ingress domain:
72602.space; legacy.72602.onlineroutes are retired - ArgoCD host:
argocd.72602.space - k3s node:
72602-minipc(192.168.0.25, MiniPC N100 28G+1TB NVMe) - SSH reverse tunnel:
:10021(main),:10022(backup, also carries80/443) - Ingress NodePort:
32080(HTTP),32443(HTTPS) - Ingress class:
nginx - Ingress namespace:
basic-components - cert-manager issuer:
lets-encrypt - Storage class:
local-path(default, RWO) - OS: Ubuntu 26.04 LTS (minipc)
- k3s version: v1.34.6+k3s1 (installed via install.sh)
Traffic Path
Internet -> ECS(sshd reverse tunnel) -> minipc:k3s ingress-nginx
ECS Port Forwarding
All traffic reaches ECS via SSH reverse tunnel established from minipc. ECS side ports:
10021 -> minipc:22(72602 main SSH)10022 -> minipc:22(72602 backup SSH, also carries80→32080,443→32443)80 -> minipc:32080(HTTP via SSH reverse tunnel on 10022)443 -> minipc:32443(HTTPS via SSH reverse tunnel on 10022)
DNS Setup
Active service records use 72602.space and point to 47.110.67.161:
| Host | Type | Value | Service |
|---|---|---|---|
argocd.72602.space | A | 47.110.67.161 | ArgoCD UI |
ops.docs.72602.space | A | 47.110.67.161 | Hugo Docs |
sub2api.72602.space | A | 47.110.67.161 | AI API proxy |
port.72602.space | A | 47.110.67.161 | Homepage dashboard |
n8n.72602.space | A | 47.110.67.161 | N8N workflow |
webhook.n8n.72602.space | A | 47.110.67.161 | N8N webhook receiver |
ops.agent.72602.space | A | 47.110.67.161 | OpenCode operations agent |
uptime.72602.space | A | 47.110.67.161 | Uptime Kuma |
clash.72602.space | A | 47.110.67.161 | Clash/mihomo panel |
api.minio.72602.space | A | 47.110.67.161 | MinIO S3 API |
console.minio.72602.space | A | 47.110.67.161 | MinIO Console |
txt2img.agent.72602.online is retired. Its DNS record, certificate, TLS Secret, and unreferenced ai data claims have been removed.
DNS is managed via Cloudflare / Aliyun DNS (add A record → ECS IP).
Deployed ArgoCD Apps
| App | Namespace | Type | Source | Ingress |
|---|---|---|---|---|
| argocd | argocd | Helm (arco-cd) | argo-cd 9.5.4 | argocd.72602.space |
| cert-manager | basic-components | Helm (Jetstack) | cert-manager 1.20.2 | internal |
| ingress-nginx | basic-components | Helm | ingress-nginx 4.15.1 | shared ingress controller |
| ops-docs | application | manifests (Git) | docs.git/main | ops.docs.72602.space |
| homepage | monitor | manifests (Git) | docs.git/main | port.72602.space |
| uptime-kuma | monitor | manifests (Git) | docs.git/main | uptime.72602.space |
| sub2api | application | Helm (ghcr) | sub2api 0.1.1 | sub2api.72602.space |
| postgresql | database | Helm (Bitnami) | postgresql 18.1.8 | internal |
| redis-shared | storage | Helm (Bitnami) | redis 18.16.0 | internal |
| minio | storage | Helm | minio 16.0.10 | console.minio.72602.space, api.minio.72602.space |
| n8n | n8n | Helm (community) | n8n 1.16.36 | n8n.72602.space, webhook.n8n.72602.space |
Non-ArgoCD (手动部署)
| Deployment | Namespace | Image | Ingress |
|---|---|---|---|
| ops-agent | application | ay-dev/ops-agent:0.2.2 | ops.agent.72602.space |
Network Proxy
Egress Proxy Architecture
k8s Pod (10.42.x.x) --HTTP_PROXY--> 192.168.0.25:17890 (socat) --forward--> 127.0.0.1:7890 (mihomo/clash) --tunnel--> upstream proxies- mihomo (clash): listens on
127.0.0.1:7890(HTTP),127.0.0.1:7891(SOCKS5)- Config:
/home/aaron/clashctl/resources/runtime.yaml - Key setting:
allow-lan: false(只监听 localhost)
- Config:
- socat bridge:
0.0.0.0:17890→127.0.0.1:7890(桥接使 k8s Pod 可达)- 进程:
socat -d -d TCP-LISTEN:17890,fork,reuseaddr,bind=0.0.0.0 TCP:127.0.0.1:7890
- 进程:
- k8s Service:
argocd-egress-proxy.argocd.svc.cluster.local(ClusterIP:10.43.42.223:17890) → Host192.168.0.25:17890 - App proxy env: 应统一使用
http://192.168.0.25:17890(不是192.168.0.25:7890,因为 mihomo 仅绑定127.0.0.1)
关键约束
- mihomo
allow-lan: false意味着 不能 直接用192.168.0.25:7890作为代理地址 - 必须通过 socat 桥接 (
192.168.0.25:17890) 或argocd-egress-proxyService 访问 - GitHub acceleration:
ghfast.topURL rewrite +NO_PROXYbypass - Image mirror:
m.daocloud.io/docker.io,m.daocloud.io/ghcr.io
Known Incident Pattern
Symptom: HTTPS handshake fails for
argocd.72602.online(tls alert internal error).Root cause: ECS Docker/derper occupies public
443, traffic never reaches k3s ingress.Fix baseline: derper must expose
8443:443, keep public443for ingress NodePort32443.Symptom: n8n 所有 workflow 报
connect ECONNREFUSED 192.168.0.25:7890。Root cause: HTTP_PROXY 指向
192.168.0.25:7890,但 mihomo 只监听127.0.0.1:7890(allow-lan: false)。Pod 无法直连 mihomo 的 LAN IP。Fix baseline: HTTP_PROXY/HTTPS_PROXY 必须使用 socat 桥接端口
192.168.0.25:17890(或 k8s Service10.43.19.4:17890),该端口由 socat 转发至127.0.0.1:7890。
Host-Level Services
| Service | Port | Bind | Description |
|---|---|---|---|
| mihomo (clash) HTTP proxy | 7890 | 127.0.0.1 | Egress proxy, allow-lan: false |
| mihomo (clash) SOCKS5 | 7891 | 127.0.0.1 | SOCKS5 proxy |
| mihomo external controller | 9090 | 0.0.0.0 | Clash API/UI, exposed via clash.72602.space |
| socat bridge | 17890 | 0.0.0.0 | Forwards to 127.0.0.1:7890, k8s pod accessible |
| autossh tunnel (main) | 10021→ECS | - | Reverse tunnel to ECS |
| autossh tunnel (backup) | 10022→ECS | - | Reverse tunnel + HTTP/HTTPS forwarding |
| k3s ingress HTTP | 32080 | 0.0.0.0 | NodePort for ingress HTTP |
| k3s ingress HTTPS | 32443 | 0.0.0.0 | NodePort for ingress HTTPS |
Notes
- Keep
derperaway from public443(use8443). - Keep app ingress aligned with ArgoCD ingress pattern:
ingressClassName: nginxcert-manager.io/cluster-issuer: lets-encrypt- TLS secret per host.
argocd-egress-proxy由ops-docsArgoCD Application 管理,并为 repo-server 提供 Git/Helm 出站代理。- mihomo
allow-lan: false意味着 Pod 代理地址必须是 socat 桥接端口17890,不能用7890。 - SSH 隧道依赖
loginctl enable-linger保持用户级 systemd 服务运行。
Recent Operations
2026-07-16: reset csst and update N8N webhook host
- Deleted and recreated the
csstnamespace. Only the namespace default ServiceAccount andkube-root-ca.crtConfigMap remain. - Changed N8N
WEBHOOK_URL, webhook worker URL, Ingress rule, and TLS DNS name fromwebhook.72602.onlinetowebhook.n8n.72602.online. - Synced ArgoCD application
argocd/n8n; main, webhook, MCP webhook, and worker rollouts completed. - cert-manager completed HTTP-01 validation and issued the updated certificate.
2026-07-16: migrate OpenCode web to k3s
- Replaced the host systemd process and static EndpointSlice with the
application/ops-agentworkload. - The Pod mounts
/home/aaron/Ops/docsat/workspace, loads the project.opencode/opencode.json, and persists sessions in theopencode-dataPVC. - Image
ay-dev/ops-agent:0.2.2uses glibc and contains OpenCode 1.18.2, kubectl 1.34.6, Argo CD CLI 3.3.8, VibeGuard, DCP, and Goal Mode. - OpenCode native Basic Auth protects both Ingress and cluster-internal access. Anonymous HTTPS returns
401; authenticated HTTPS returns200. - An Nginx sidecar publishes the
Ops Agentbrowser title and proxies Terminal WebSocket and event streams.
2026-07-16: remove Langfuse and refresh Homepage
- Permanently removed the seven unused Langfuse PVCs (56 GiB) and six residual Secrets from
monitor. - Removed Langfuse and pgAdmin from Homepage and added the OpenCode operations agent.
- Restored the ArgoCD Homepage widget by binding the
readonlyAPI account torole:readonly.
2026-07-17: align Ops resource names
- Renamed the Hugo workload and its Service, ConfigMap, build Job, and Ingress resources to
ops-docs; retainedhugo-docs-pvcto preserve generated content. - Renamed the OpenCode-based workload, Service, Ingress, proxy ConfigMap, manifest directory, and Dockerfile to
ops-agent; retained existingopencode-*PVC and Secrets to preserve sessions and credentials. - Replaced the manual
local-proxy-bridgewith the GitOps-managedargocd-egress-proxy; ArgoCD repo-server uses its cluster Service while applications can continue using host port17890.
Default Verification Commands
# 公网入口
curl -vI http://argocd.72602.space
curl -vkI https://argocd.72602.space
# k8s 资源
kubectl get ingress -A -o wide
kubectl get svc -A -o wide
kubectl get pods -A -o wide
kubectl get certificate,certificaterequest,order,challenge -A
# 主机端口
sudo ss -lntp | grep -E ':80|:443|:8443|:32080|:32443|:7890|:17890|:9090'
# ECS 转发
sudo iptables -t nat -L PREROUTING -n -v --line-numbers
sudo iptables -t nat -L DOCKER -n -v --line-numbers
# Egress proxy 完整性
curl -s --connect-timeout 3 -x http://127.0.0.1:17890 http://httpbin.org/ip
kubectl exec -n n8n deploy/n8n -- env | grep -E 'HTTP_PROXY|HTTPS_PROXY'
# SSH 隧道
journalctl --user -u reverse-tunnel-ecs-10021.service --since "1 hour ago" --no-pager
journalctl --user -u reverse-tunnel-ecs-10022.service --since "1 hour ago" --no-pager