https://github.com/tech-preta/platform-incus
Uma plataforma de infraestrutura como código completa para deploy e gerenciamento de aplicações usando Incus, Vault, Kubernetes e outras tecnologias modernas.
https://github.com/tech-preta/platform-incus
kubernetes plataform terraform
Last synced: about 2 months ago
JSON representation
Uma plataforma de infraestrutura como código completa para deploy e gerenciamento de aplicações usando Incus, Vault, Kubernetes e outras tecnologias modernas.
- Host: GitHub
- URL: https://github.com/tech-preta/platform-incus
- Owner: Tech-Preta
- License: gpl-3.0
- Created: 2025-06-09T17:17:33.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-10-20T14:09:02.000Z (8 months ago)
- Last Synced: 2025-10-20T16:13:50.811Z (8 months ago)
- Topics: kubernetes, plataform, terraform
- Language: HCL
- Homepage: https://nataliagranato.xyz
- Size: 793 KB
- Stars: 1
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
- Security: SECURITY.md
Awesome Lists containing this project
README
# Platform Control
Uma plataforma de infraestrutura como código completa para deploy e gerenciamento de aplicações usando Incus, Vault, Kubernetes e outras tecnologias modernas.
```mermaid
flowchart TD
subgraph Infraestrutura
INCUS[Incus-LXD]
VAULT[HashiCorp-Vault]
GLAUTH[GLAuth-LDAP]
NET[RedesVirtuais]
end
subgraph ProvisionamentoTerraform
INCUSMOD[000-incus]
INFRAMOD[001-infra-services]
VAULTMOD[002-vault]
K8SMOD[010-kubernetes-cluster]
CRDSMOD[011-kubernetes-crds]
K8SCORE[012-kubernetes-core]
K8SSERV[013-kubernetes-services]
MOD[modules]
end
subgraph ClusterKubernetes
K8S[Kubernetes]
CILIUM[Cilium]
TRAEFIK[Traefik]
PROM[Prometheus-Grafana]
CERTMAN[Cert-Manager]
METALLB[MetalLB]
COREDNS[CoreDNS]
EXTDNS[ExternalDNS]
METRICS[MetricsServer]
end
subgraph Documentacao
DOCS[docs]
end
INCUS --> NET
INCUSMOD --> INCUS
INFRAMOD --> VAULT
INFRAMOD --> GLAUTH
VAULTMOD --> VAULT
K8SMOD --> K8S
CRDSMOD --> K8S
K8SCORE --> K8S
K8SSERV --> K8S
MOD --> INCUSMOD
MOD --> INFRAMOD
MOD --> VAULTMOD
MOD --> K8SMOD
MOD --> CRDSMOD
MOD --> K8SCORE
MOD --> K8SSERV
K8S --> CILIUM
K8S --> TRAEFIK
K8S --> PROM
K8S --> CERTMAN
K8S --> METALLB
K8S --> COREDNS
K8S --> EXTDNS
K8S --> METRICS
DOCS -.-> INCUSMOD
DOCS -.-> INFRAMOD
DOCS -.-> VAULTMOD
DOCS -.-> K8SMOD
DOCS -.-> CRDSMOD
DOCS -.-> K8SSERV
```
## 🎯 Visão Geral
Este projeto implementa uma infraestrutura completa de desenvolvimento e produção usando:
- **🏠 Incus (LXD)**: Containerização e virtualização
- **🔐 HashiCorp Vault**: Gerenciamento de segredos e PKI
- **📁 GLAuth**: Servidor LDAP leve
- **☸️ Kubernetes**: Orquestração de containers
- **🌐 Cilium**: Networking e observabilidade
- **🚀 Traefik**: Ingress Controller e Load Balancer
- **📊 Prometheus + Grafana**: Monitoramento e métricas
## 📁 Estrutura do Projeto
```
plataform-control/
├── docs/ # Documentação
│ ├── incus_install.md # Instalação do Incus
│ ├── incus_init.md # Configuração inicial
│ ├── incus-ui-setup.md # Interface web
│ ├── ovn_configure.md # Networking OVN
│ └── packer_build.md # Build de imagens
├── terraform/ # Infraestrutura como código
│ ├── 000-incus/ # Configuração base do Incus
│ ├── 001-infra-services/ # Vault + GLAuth (LDAP)
│ ├── 002-vault/ # Configuração do Vault
│ ├── 010-kubernetes-cluster/ # Cluster Kubernetes
│ ├── 011-kubernetes-crds/ # CRDs do Kubernetes
│ ├── 012-kubernetes-core/ # Componentes core (Cilium, etc)
│ ├── 013-kubernetes-services/ # Serviços de aplicação
│ └── modules/ # Módulos reutilizáveis
└── README.md # Este arquivo
```
## 🚀 Quick Start
### Pré-requisitos
- Ubuntu/Debian Linux
- Terraform >= 1.12.0
- Incus/LXD instalado e configurado
- Acesso sudo
### 1. Instalação e Configuração Inicial
```bash
# Clone o repositório
git clone https://github.com/Tech-Preta/plataform-control.git
cd plataform-control
# Siga a documentação para instalar o Incus
cat docs/incus_install.md
cat docs/incus_init.md
```
### 2. Deploy da Infraestrutura Base
```bash
# 1. Configurar redes e storage do Incus
cd terraform/000-incus
cp terraform.tfvars.example terraform.tfvars
# Edite as variáveis conforme seu ambiente
terraform init
terraform plan
terraform apply
# 2. Deploy dos serviços de infraestrutura (Vault + LDAP)
cd ../001-infra-services
cp terraform.tfvars.example terraform.tfvars
# Configure suas credenciais
terraform init
terraform plan
terraform apply
# 3. Configurar o Vault
cd ../002-vault
cp terraform.tfvars.example terraform.tfvars
# Configure o token do Vault obtido na etapa anterior
terraform init
terraform plan
terraform apply
```
### 3. Deploy do Cluster Kubernetes
```bash
# 4. Criar cluster Kubernetes
cd ../010-kubernetes-cluster
terraform init
terraform apply
# 5. Instalar CRDs
cd ../011-kubernetes-crds
terraform init
terraform apply
# 6. Componentes core (Cilium, Traefik, etc)
cd ../012-kubernetes-core
terraform init
terraform apply
# 7. Serviços de aplicação
cd ../013-kubernetes-services
terraform init
terraform apply
```
## 🔧 Configuração
### Variáveis de Ambiente
Crie um arquivo `.env` na raiz do projeto (não commitado):
```bash
# Vault
export VAULT_ADDR="https://10.191.1.101:8200"
export VAULT_TOKEN="seu-vault-token-aqui"
export VAULT_SKIP_VERIFY=true
# LDAP
export LDAP_URL="ldap://10.191.1.100:3893"
export LDAP_BIND_DN="cn=granato,dc=nataliagranato,dc=xyz"
export LDAP_BIND_PASSWORD="sua-senha-aqui"
```
**Importante:** O arquivo `.env` contém informações sensíveis e **não deve ser commitado** no repositório Git. Certifique-se de que ele esteja listado no seu arquivo `.gitignore`. Para ambientes de produção, considere o uso de um sistema de gerenciamento de segredos mais robusto integrado ao seu pipeline de CI/CD.
### Redes
A plataforma usa as seguintes redes:
- **infra-unified**: `10.191.1.0/24` - Serviços de infraestrutura
- **kubernetes**: `10.191.0.0/24` - Cluster Kubernetes
- **lxdbr0**: `10.0.0.0/24` - Rede padrão do Incus
## 🏗️ Componentes
### 000-incus
Configuração base do Incus incluindo:
- Projetos (infra, apps)
- Redes OVN
- Storage pools
- Perfis de containers/VMs
### 001-infra-services
Deploy dos serviços essenciais:
- **HashiCorp Vault**: Gerenciamento de segredos
- **GLAuth**: Servidor LDAP para autenticação
- **Certificados TLS**: Para comunicação segura
### 002-vault
Configuração avançada do Vault:
- Autenticação LDAP
- Políticas RBAC
- PKI Infrastructure
- Secret engines (KV)
### 010-kubernetes-cluster
Deploy do cluster Kubernetes:
- Control plane (HA opcional)
- Worker nodes
- Kubeconfig gerado automaticamente
### 011-kubernetes-crds
Custom Resource Definitions:
- Traefik CRDs
- Prometheus Operator CRDs
- Outros operadores
### 012-kubernetes-core
Componentes essenciais:
- **Cilium**: CNI + Service Mesh
- **Traefik**: Ingress Controller
- **Cert-Manager**: Gerenciamento de certificados
- **MetalLB**: Load Balancer
- **CoreDNS**: DNS
- **Metrics Server**: Métricas de recursos
### 013-kubernetes-services
Serviços de aplicação:
- Integração com Vault
- Monitoramento (Prometheus/Grafana)
- Logging centralizado
## 🌐 Acesso aos Serviços
Após o deploy completo:
### Vault
- **URL**: https://10.191.1.101:8200
- **Autenticação**: LDAP ou token
- **Usuários padrão**: granato, vaultadmin
### LDAP (GLAuth)
- **URL**: ldap://10.191.1.100:3893
- **Base DN**: dc=nataliagranato,dc=xyz
- **Usuários**: ou=admin,ou=users,dc=nataliagranato,dc=xyz
### Kubernetes
- **Kubeconfig**: `terraform/010-kubernetes-cluster/kubeconfig`
- **API Server**: https://10.191.0.3:6443
### Traefik Dashboard
- **URL**: http://traefik.local (configure DNS local)
- **API**: https://10.191.0.3:9000
## 🛠️ Operações
### Backup
```bash
# Backup do Vault
vault operator raft snapshot save vault-backup-$(date +%Y%m%d).snap
# Backup do estado do Terraform
find terraform/ -name "terraform.tfstate" -exec cp {} backups/ \;
# Backup do Kubernetes
kubectl get all --all-namespaces -o yaml > k8s-backup-$(date +%Y%m%d).yaml
```
### Monitoramento
```bash
# Status dos serviços
incus list --all-projects
kubectl get nodes
kubectl get pods --all-namespaces
# Logs
incus exec vault-01 -- journalctl -u vault
kubectl logs -n kube-system -l app=cilium
```
### Destruição Completa
⚠️ **CUIDADO**: Isto removerá toda a infraestrutura!
```bash
# Remover em ordem reversa
cd terraform/013-kubernetes-services && terraform destroy -auto-approve
cd ../012-kubernetes-core && terraform destroy -auto-approve
cd ../011-kubernetes-crds && terraform destroy -auto-approve
cd ../010-kubernetes-cluster && terraform destroy -auto-approve
cd ../002-vault && terraform destroy -auto-approve
cd ../001-infra-services && terraform destroy -auto-approve
cd ../000-incus && terraform destroy -auto-approve
# Limpeza manual se necessário
incus delete --all --force
incus network delete infra-unified kubernetes
```
## 🐛 Troubleshooting
### Problemas Comuns
1. **Vault não responde**
```bash
incus exec vault-01 -- systemctl status vault
incus exec vault-01 -- journalctl -u vault -f
```
2. **Kubernetes pods em CrashLoop**
```bash
kubectl describe pod
kubectl logs --previous
```
3. **Cilium não inicializa**
```bash
kubectl -n kube-system get pods -l k8s-app=cilium
cilium status --wait
```
4. **Problemas de rede**
```bash
incus network list
incus network show infra-unified
ovn-nbctl show
```
### Logs Importantes
- **Vault**: `/opt/vault/audit.log`
- **GLAuth**: `journalctl -u glauth`
- **Cilium**: `kubectl -n kube-system logs -l k8s-app=cilium`
- **Traefik**: `kubectl -n kube-system logs -l app.kubernetes.io/name=traefik`
## 🤝 Contribuição
1. Fork o projeto
2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
4. Push para a branch (`git push origin feature/AmazingFeature`)
5. Abra um Pull Request
## 📝 Licença
Este projeto está licenciado sob a Licença GPL-3.0 - Veja mais informações em [LICENSE](LICENSE).
## 🙏 Agradecimentos
- **Jonatas Ferreira** - *Trabalho inicial* - [@jonatas-lima](https://github.com/jonatas-lima)
---