Infraestrutura CPPS
Infraestrutura CPPS
Visao geral
Internet │ ┌─────┴─────┐ │ VyOS │ 192.168.0.1 │ firewall │ NAT, DNS, DHCP │ (VM) │ IP publico: 200.145.122.96 └──┬─────┬──┘ │ │ ┌──────────┘ └──────────┐ ▼ ▼ ┌───────────┐ ┌───────────┐ │ debian- │ .5 │ vm-cpps-02│ .51 │ proxy │ │ │ │ Traefik │ ──────────► │ K3s │ │ (proxy │ proxy HTTP │ (apps) │ │ reverso) │ │ │ └───────────┘ └───────────┘ ┌───────────┐ │ vm-cpps-03│ .52 │ (disponivel)│ └───────────┘VMs
| VM | IP | Papel | Gerenciado por |
|---|---|---|---|
| VyOS | 192.168.0.1 | Firewall, NAT, DNS, DHCP | Ansible (config/vyos/) |
| debian-proxy | 192.168.0.5 | Traefik reverse proxy (TLS, roteamento HTTPS) | ArgoCD (rotas), Ansible (infra base) |
| vm-cpps-02 | 192.168.0.51 | K3s cluster — todas as apps rodam aqui | ArgoCD (apps/argocd/) |
| vm-cpps-03 | 192.168.0.52 | Disponivel | — |
Por que VyOS e Traefik ficam em VMs separadas
- VyOS: e um appliance de rede. Se o cluster K3s cai, a rede (firewall, NAT, DNS) continua funcionando
- Traefik: e o ponto de entrada da internet. Se o cluster K3s cai, o proxy pode servir uma pagina de manutencao em vez de connection refused. Tambem isola a superficie de ataque (CrowdSec bouncer roda aqui)
Ambos sao componentes estrategicos que nao devem depender do cluster de apps.
Como o trafego chega ate um app
1. Usuario acessa https://airflow.cppsunesp.org2. DNS resolve para 200.145.122.96 (IP publico)3. VyOS NAT encaminha porta 443 → debian-proxy (192.168.0.5:443)4. Traefik (debian-proxy) termina TLS (Let's Encrypt), olha o Host header5. Traefik encaminha para o NodePort do app em vm-cpps-02 (192.168.0.51:PORTA)6. K3s roteia para o pod correto dentro do clusterPara apps TCP (ex: MongoDB):
1. Client conecta em 200.145.122.96:270172. VyOS NAT encaminha porta 27017 → debian-proxy (192.168.0.5:27017)3. Traefik (IngressRouteTCP) encaminha para vm-cpps-02:30000 (NodePort MongoDB)As 3 camadas de configuracao
Cada camada tem seu dominio. Saber onde mexer e tao importante quanto saber o que mexer.
| Camada | O que configura | Ferramenta | Quando mexer |
|---|---|---|---|
| VyOS | Firewall, NAT, DNS, portas externas | Ansible (config/vyos/) | Novo protocolo nao-HTTP, nova porta externa |
| Traefik | Rotas HTTP/HTTPS, TLS, middlewares | ArgoCD → IngressRoute CRDs (config/traefik/routes/) | Novo app web, novo dominio, novo middleware |
| K3s | Apps, pods, services, volumes | ArgoCD → manifests/Helm (apps/) | Novo app, atualizar versao, mudar config |
Regra pratica: a maioria dos novos apps so precisa de Traefik + K3s. VyOS so muda quando tem protocolo nao-HTTP ou porta nova exposta externamente.
Quando cada camada precisa mudar
| Cenario | VyOS | Traefik | K3s |
|---|---|---|---|
| Novo app web (ex: Grafana) | — | Sim (rota) | Sim (deploy) |
| Novo servico TCP (ex: PostgreSQL externo) | Sim (NAT) | Sim (IngressRouteTCP) | Sim (deploy) |
| Mudar dominio de app existente | — | Sim (Host rule) | — |
| Atualizar versao de app | — | — | Sim (values/tag) |
| Expor nova porta externamente | Sim (NAT) | Depende | Depende |
| Bloquear IP/range | Sim (firewall) ou CrowdSec bouncer | — | — |
Ferramentas e seus papeis
| Ferramenta | Papel | Onde roda |
|---|---|---|
| ArgoCD | GitOps — sincroniza manifests do Git para o(s) cluster(s) K3s | vm-cpps-02 (gerencia vm-cpps-02 + debian-proxy) |
| Traefik | Reverse proxy — TLS, roteamento HTTPS, middlewares | debian-proxy (K3s local) |
| Ansible | Configuracao de VMs — VyOS, infra base da debian-proxy | Executado da maquina do operador |
| Rancher | UI operacional — dashboard de clusters, pods, logs, shell | vm-cpps-02 |
| OpenObserve + OTel | Observabilidade — logs, metricas, traces | vm-cpps-02 |
| gitleaks | Pre-commit hook — impede credenciais no Git | Maquina do operador |
| Make | Interface padrao — make configure, make verify, make backup | Maquina do operador |
Fluxo GitOps
Developer │ ▼ git push │ ▼ArgoCD (vm-cpps-02) detecta mudanca (~3 min) │ ├── apps/argocd/*.yaml mudou? │ └── Sincroniza app no K3s de vm-cpps-02 │ └── config/traefik/routes/*.yaml mudou? └── Sincroniza rota no K3s da debian-proxyselfHeal: se alguem fizer kubectl edit direto no cluster, ArgoCD reverte automaticamente (~5 min).
prune: se um arquivo for removido do Git, ArgoCD remove o recurso do cluster.
Estrutura do repositorio
devops/├── infra/ ← Pulumi: provisiona VMs no Proxmox├── config/ ← Configuracao de VMs│ ├── vyos/ ← Ansible: firewall, NAT, DNS│ └── traefik/│ └── routes/ ← IngressRoute CRDs (ArgoCD sincroniza para debian-proxy)├── apps/ ← Workloads K3s│ ├── airflow/ ← values/manifests de cada app│ ├── authentik/│ ├── tutor-openedx/ ← Open edX (Kustomize, gerado pelo Tutor)│ ├── ...│ └── argocd/ ← Applications ArgoCD (1 por app + traefik-routes)├── docs/ ← Documentacao│ ├── infraestrutura.md ← Este documento│ ├── novo-app.md ← Como subir um novo app│ ├── tutor-openedx.md ← Guia de manutencao Open edX│ ├── docker-vs-k8s.md ← Quando usar Docker vs K8s│ └── rede.md ← Topologia de rede detalhada└── roadmap/ ← Planejamento tecnico ├── iac.md ← Roadmap unificado (IaC, IAM, rede, obs) ├── gpu-platform.md ← Plataforma GPU └── data-platform.md← Plataforma de dadosPrincipios
- Zero SSH manual — toda mudanca e um commit no Git
- Git e a fonte unica de verdade — ArgoCD sincroniza, drift e revertido
- selfHeal: true — edicao manual no cluster e revertida automaticamente
- Segredos no Git com cuidado — hoje as credenciais estao nos values (necessario para ArgoCD selfHeal). gitleaks tem allowlist temporario para esses arquivos. Fase 1 do roadmap: migrar para SOPS/age (encripta no repo, ArgoCD decripta no deploy)
- Documentar decisoes — se nao esta escrito, nao foi decidido
Links uteis
| Recurso | URL |
|---|---|
| ArgoCD UI | https://argocd.colabh.org |
| Rancher UI | https://rancher.colabh.org |
| OpenObserve | https://o2.colabh.org |
| Traefik dashboard | https://traefik.cppsunesp.org |
| LMS (Open edX) | https://lms.colabh.org |
| CMS (Studio) | https://cms.lms.colabh.org |
| Repositorio Git | https://github.com/colabhd/devops |