Skip to content

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

VMIPPapelGerenciado por
VyOS192.168.0.1Firewall, NAT, DNS, DHCPAnsible (config/vyos/)
debian-proxy192.168.0.5Traefik reverse proxy (TLS, roteamento HTTPS)ArgoCD (rotas), Ansible (infra base)
vm-cpps-02192.168.0.51K3s cluster — todas as apps rodam aquiArgoCD (apps/argocd/)
vm-cpps-03192.168.0.52Disponivel

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.org
2. 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 header
5. 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 cluster

Para apps TCP (ex: MongoDB):

1. Client conecta em 200.145.122.96:27017
2. 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.

CamadaO que configuraFerramentaQuando mexer
VyOSFirewall, NAT, DNS, portas externasAnsible (config/vyos/)Novo protocolo nao-HTTP, nova porta externa
TraefikRotas HTTP/HTTPS, TLS, middlewaresArgoCD → IngressRoute CRDs (config/traefik/routes/)Novo app web, novo dominio, novo middleware
K3sApps, pods, services, volumesArgoCD → 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

CenarioVyOSTraefikK3s
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 existenteSim (Host rule)
Atualizar versao de appSim (values/tag)
Expor nova porta externamenteSim (NAT)DependeDepende
Bloquear IP/rangeSim (firewall) ou CrowdSec bouncer

Ferramentas e seus papeis

FerramentaPapelOnde roda
ArgoCDGitOps — sincroniza manifests do Git para o(s) cluster(s) K3svm-cpps-02 (gerencia vm-cpps-02 + debian-proxy)
TraefikReverse proxy — TLS, roteamento HTTPS, middlewaresdebian-proxy (K3s local)
AnsibleConfiguracao de VMs — VyOS, infra base da debian-proxyExecutado da maquina do operador
RancherUI operacional — dashboard de clusters, pods, logs, shellvm-cpps-02
OpenObserve + OTelObservabilidade — logs, metricas, tracesvm-cpps-02
gitleaksPre-commit hook — impede credenciais no GitMaquina do operador
MakeInterface padrao — make configure, make verify, make backupMaquina 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-proxy

selfHeal: 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 dados

Principios

  1. Zero SSH manual — toda mudanca e um commit no Git
  2. Git e a fonte unica de verdade — ArgoCD sincroniza, drift e revertido
  3. selfHeal: true — edicao manual no cluster e revertida automaticamente
  4. 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)
  5. Documentar decisoes — se nao esta escrito, nao foi decidido

RecursoURL
ArgoCD UIhttps://argocd.colabh.org
Rancher UIhttps://rancher.colabh.org
OpenObservehttps://o2.colabh.org
Traefik dashboardhttps://traefik.cppsunesp.org
LMS (Open edX)https://lms.colabh.org
CMS (Studio)https://cms.lms.colabh.org
Repositorio Githttps://github.com/colabhd/devops