{"id":29101019,"url":"https://github.com/tech-preta/platform-with-incus","last_synced_at":"2025-06-28T19:08:21.587Z","repository":{"id":298159457,"uuid":"999061409","full_name":"Tech-Preta/platform-with-incus","owner":"Tech-Preta","description":"Uma plataforma de infraestrutura como código completa para deploy e gerenciamento de aplicações usando Incus, Vault, Kubernetes e outras tecnologias modernas.","archived":false,"fork":false,"pushed_at":"2025-06-17T19:06:11.000Z","size":855,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-26T22:40:40.622Z","etag":null,"topics":["kubernetes","plataform","terraform"],"latest_commit_sha":null,"homepage":"https://nataliagranato.xyz","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tech-Preta.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"nataliagranato","ko_fi":"nataliagranato","buy_me_a_coffee":"nataliagranato","pix":"fada126d-7311-495f-bda2-55ec79b0a39b"}},"created_at":"2025-06-09T17:17:33.000Z","updated_at":"2025-06-21T18:23:58.000Z","dependencies_parsed_at":"2025-06-26T22:40:46.306Z","dependency_job_id":"cac77559-c648-43b5-b730-d91e67e76bf4","html_url":"https://github.com/Tech-Preta/platform-with-incus","commit_stats":null,"previous_names":["tech-preta/plataform-control","tech-preta/platform-with-incus"],"tags_count":1,"template":false,"template_full_name":"Tech-Preta/terraform-sample","purl":"pkg:github/Tech-Preta/platform-with-incus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tech-Preta%2Fplatform-with-incus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tech-Preta%2Fplatform-with-incus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tech-Preta%2Fplatform-with-incus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tech-Preta%2Fplatform-with-incus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tech-Preta","download_url":"https://codeload.github.com/Tech-Preta/platform-with-incus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tech-Preta%2Fplatform-with-incus/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262482449,"owners_count":23318141,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kubernetes","plataform","terraform"],"created_at":"2025-06-28T19:08:20.789Z","updated_at":"2025-06-28T19:08:21.579Z","avatar_url":"https://github.com/Tech-Preta.png","language":"HCL","funding_links":["https://github.com/sponsors/nataliagranato","https://ko-fi.com/nataliagranato","https://buymeacoffee.com/nataliagranato","fada126d-7311-495f-bda2-55ec79b0a39b"],"categories":[],"sub_categories":[],"readme":"# Platform Control\n\nUma plataforma de infraestrutura como código completa para deploy e gerenciamento de aplicações usando Incus, Vault, Kubernetes e outras tecnologias modernas.\n\n```mermaid\nflowchart TD\n  subgraph Infraestrutura\n    INCUS[Incus-LXD]\n    VAULT[HashiCorp-Vault]\n    GLAUTH[GLAuth-LDAP]\n    NET[RedesVirtuais]\n  end\n\n  subgraph ProvisionamentoTerraform\n    INCUSMOD[000-incus]\n    INFRAMOD[001-infra-services]\n    VAULTMOD[002-vault]\n    K8SMOD[010-kubernetes-cluster]\n    CRDSMOD[011-kubernetes-crds]\n    K8SCORE[012-kubernetes-core]\n    K8SSERV[013-kubernetes-services]\n    MOD[modules]\n  end\n\n  subgraph ClusterKubernetes\n    K8S[Kubernetes]\n    CILIUM[Cilium]\n    TRAEFIK[Traefik]\n    PROM[Prometheus-Grafana]\n    CERTMAN[Cert-Manager]\n    METALLB[MetalLB]\n    COREDNS[CoreDNS]\n    EXTDNS[ExternalDNS]\n    METRICS[MetricsServer]\n  end\n\n  subgraph Documentacao\n    DOCS[docs]\n  end\n\n  INCUS --\u003e NET\n  INCUSMOD --\u003e INCUS\n  INFRAMOD --\u003e VAULT\n  INFRAMOD --\u003e GLAUTH\n  VAULTMOD --\u003e VAULT\n  K8SMOD --\u003e K8S\n  CRDSMOD --\u003e K8S\n  K8SCORE --\u003e K8S\n  K8SSERV --\u003e K8S\n  MOD --\u003e INCUSMOD\n  MOD --\u003e INFRAMOD\n  MOD --\u003e VAULTMOD\n  MOD --\u003e K8SMOD\n  MOD --\u003e CRDSMOD\n  MOD --\u003e K8SCORE\n  MOD --\u003e K8SSERV\n  K8S --\u003e CILIUM\n  K8S --\u003e TRAEFIK\n  K8S --\u003e PROM\n  K8S --\u003e CERTMAN\n  K8S --\u003e METALLB\n  K8S --\u003e COREDNS\n  K8S --\u003e EXTDNS\n  K8S --\u003e METRICS\n\n  DOCS -.-\u003e INCUSMOD\n  DOCS -.-\u003e INFRAMOD\n  DOCS -.-\u003e VAULTMOD\n  DOCS -.-\u003e K8SMOD\n  DOCS -.-\u003e CRDSMOD\n  DOCS -.-\u003e K8SSERV\n```\n\n## 🎯 Visão Geral\n\nEste projeto implementa uma infraestrutura completa de desenvolvimento e produção usando:\n\n- **🏠 Incus (LXD)**: Containerização e virtualização\n- **🔐 HashiCorp Vault**: Gerenciamento de segredos e PKI\n- **📁 GLAuth**: Servidor LDAP leve\n- **☸️ Kubernetes**: Orquestração de containers\n- **🌐 Cilium**: Networking e observabilidade\n- **🚀 Traefik**: Ingress Controller e Load Balancer\n- **📊 Prometheus + Grafana**: Monitoramento e métricas\n\n## 📁 Estrutura do Projeto\n\n```\nplataform-control/\n├── docs/                           # Documentação\n│   ├── incus_install.md            # Instalação do Incus\n│   ├── incus_init.md               # Configuração inicial\n│   ├── incus-ui-setup.md           # Interface web\n│   ├── ovn_configure.md            # Networking OVN\n│   └── packer_build.md             # Build de imagens\n├── terraform/                      # Infraestrutura como código\n│   ├── 000-incus/                  # Configuração base do Incus\n│   ├── 001-infra-services/         # Vault + GLAuth (LDAP)\n│   ├── 002-vault/                  # Configuração do Vault\n│   ├── 010-kubernetes-cluster/     # Cluster Kubernetes\n│   ├── 011-kubernetes-crds/        # CRDs do Kubernetes\n│   ├── 012-kubernetes-core/        # Componentes core (Cilium, etc)\n│   ├── 013-kubernetes-services/    # Serviços de aplicação\n│   └── modules/                    # Módulos reutilizáveis\n└── README.md                       # Este arquivo\n```\n\n## 🚀 Quick Start\n\n### Pré-requisitos\n\n- Ubuntu/Debian Linux\n- Terraform \u003e= 1.12.0\n- Incus/LXD instalado e configurado\n- Acesso sudo\n\n### 1. Instalação e Configuração Inicial\n\n```bash\n# Clone o repositório\ngit clone https://github.com/Tech-Preta/plataform-control.git\ncd plataform-control\n\n# Siga a documentação para instalar o Incus\ncat docs/incus_install.md\ncat docs/incus_init.md\n```\n\n### 2. Deploy da Infraestrutura Base\n\n```bash\n# 1. Configurar redes e storage do Incus\ncd terraform/000-incus\ncp terraform.tfvars.example terraform.tfvars\n# Edite as variáveis conforme seu ambiente\nterraform init\nterraform plan\nterraform apply\n\n# 2. Deploy dos serviços de infraestrutura (Vault + LDAP)\ncd ../001-infra-services\ncp terraform.tfvars.example terraform.tfvars\n# Configure suas credenciais\nterraform init\nterraform plan\nterraform apply\n\n# 3. Configurar o Vault\ncd ../002-vault\ncp terraform.tfvars.example terraform.tfvars\n# Configure o token do Vault obtido na etapa anterior\nterraform init\nterraform plan\nterraform apply\n```\n\n### 3. Deploy do Cluster Kubernetes\n\n```bash\n# 4. Criar cluster Kubernetes\ncd ../010-kubernetes-cluster\nterraform init\nterraform apply\n\n# 5. Instalar CRDs\ncd ../011-kubernetes-crds\nterraform init\nterraform apply\n\n# 6. Componentes core (Cilium, Traefik, etc)\ncd ../012-kubernetes-core\nterraform init\nterraform apply\n\n# 7. Serviços de aplicação\ncd ../013-kubernetes-services\nterraform init\nterraform apply\n```\n\n## 🔧 Configuração\n\n### Variáveis de Ambiente\n\nCrie um arquivo `.env` na raiz do projeto (não commitado):\n\n```bash\n# Vault\nexport VAULT_ADDR=\"https://10.191.1.101:8200\"\nexport VAULT_TOKEN=\"seu-vault-token-aqui\"\nexport VAULT_SKIP_VERIFY=true\n\n# LDAP\nexport LDAP_URL=\"ldap://10.191.1.100:3893\"\nexport LDAP_BIND_DN=\"cn=granato,dc=nataliagranato,dc=xyz\"\nexport LDAP_BIND_PASSWORD=\"sua-senha-aqui\"\n```\n\n**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.\n\n### Redes\n\nA plataforma usa as seguintes redes:\n\n- **infra-unified**: `10.191.1.0/24` - Serviços de infraestrutura\n- **kubernetes**: `10.191.0.0/24` - Cluster Kubernetes\n- **lxdbr0**: `10.0.0.0/24` - Rede padrão do Incus\n\n## 🏗️ Componentes\n\n### 000-incus\nConfiguração base do Incus incluindo:\n- Projetos (infra, apps)\n- Redes OVN\n- Storage pools\n- Perfis de containers/VMs\n\n### 001-infra-services\nDeploy dos serviços essenciais:\n- **HashiCorp Vault**: Gerenciamento de segredos\n- **GLAuth**: Servidor LDAP para autenticação\n- **Certificados TLS**: Para comunicação segura\n\n### 002-vault\nConfiguração avançada do Vault:\n- Autenticação LDAP\n- Políticas RBAC\n- PKI Infrastructure\n- Secret engines (KV)\n\n### 010-kubernetes-cluster\nDeploy do cluster Kubernetes:\n- Control plane (HA opcional)\n- Worker nodes\n- Kubeconfig gerado automaticamente\n\n### 011-kubernetes-crds\nCustom Resource Definitions:\n- Traefik CRDs\n- Prometheus Operator CRDs\n- Outros operadores\n\n### 012-kubernetes-core\nComponentes essenciais:\n- **Cilium**: CNI + Service Mesh\n- **Traefik**: Ingress Controller\n- **Cert-Manager**: Gerenciamento de certificados\n- **MetalLB**: Load Balancer\n- **CoreDNS**: DNS\n- **Metrics Server**: Métricas de recursos\n\n### 013-kubernetes-services\nServiços de aplicação:\n- Integração com Vault\n- Monitoramento (Prometheus/Grafana)\n- Logging centralizado\n\n## 🌐 Acesso aos Serviços\n\nApós o deploy completo:\n\n### Vault\n- **URL**: https://10.191.1.101:8200\n- **Autenticação**: LDAP ou token\n- **Usuários padrão**: granato, vaultadmin\n\n### LDAP (GLAuth)\n- **URL**: ldap://10.191.1.100:3893\n- **Base DN**: dc=nataliagranato,dc=xyz\n- **Usuários**: ou=admin,ou=users,dc=nataliagranato,dc=xyz\n\n### Kubernetes\n- **Kubeconfig**: `terraform/010-kubernetes-cluster/kubeconfig`\n- **API Server**: https://10.191.0.3:6443\n\n### Traefik Dashboard\n- **URL**: http://traefik.local (configure DNS local)\n- **API**: https://10.191.0.3:9000\n\n## 🛠️ Operações\n\n### Backup\n\n```bash\n# Backup do Vault\nvault operator raft snapshot save vault-backup-$(date +%Y%m%d).snap\n\n# Backup do estado do Terraform\nfind terraform/ -name \"terraform.tfstate\" -exec cp {} backups/ \\;\n\n# Backup do Kubernetes\nkubectl get all --all-namespaces -o yaml \u003e k8s-backup-$(date +%Y%m%d).yaml\n```\n\n### Monitoramento\n\n```bash\n# Status dos serviços\nincus list --all-projects\nkubectl get nodes\nkubectl get pods --all-namespaces\n\n# Logs\nincus exec vault-01 -- journalctl -u vault\nkubectl logs -n kube-system -l app=cilium\n```\n\n### Destruição Completa\n\n⚠️ **CUIDADO**: Isto removerá toda a infraestrutura!\n\n```bash\n# Remover em ordem reversa\ncd terraform/013-kubernetes-services \u0026\u0026 terraform destroy -auto-approve\ncd ../012-kubernetes-core \u0026\u0026 terraform destroy -auto-approve\ncd ../011-kubernetes-crds \u0026\u0026 terraform destroy -auto-approve\ncd ../010-kubernetes-cluster \u0026\u0026 terraform destroy -auto-approve\ncd ../002-vault \u0026\u0026 terraform destroy -auto-approve\ncd ../001-infra-services \u0026\u0026 terraform destroy -auto-approve\ncd ../000-incus \u0026\u0026 terraform destroy -auto-approve\n\n# Limpeza manual se necessário\nincus delete --all --force\nincus network delete infra-unified kubernetes\n```\n\n## 🐛 Troubleshooting\n\n### Problemas Comuns\n\n1. **Vault não responde**\n   ```bash\n   incus exec vault-01 -- systemctl status vault\n   incus exec vault-01 -- journalctl -u vault -f\n   ```\n\n2. **Kubernetes pods em CrashLoop**\n   ```bash\n   kubectl describe pod \u003cpod-name\u003e\n   kubectl logs \u003cpod-name\u003e --previous\n   ```\n\n3. **Cilium não inicializa**\n   ```bash\n   kubectl -n kube-system get pods -l k8s-app=cilium\n   cilium status --wait\n   ```\n\n4. **Problemas de rede**\n   ```bash\n   incus network list\n   incus network show infra-unified\n   ovn-nbctl show\n   ```\n\n### Logs Importantes\n\n- **Vault**: `/opt/vault/audit.log`\n- **GLAuth**: `journalctl -u glauth`\n- **Cilium**: `kubectl -n kube-system logs -l k8s-app=cilium`\n- **Traefik**: `kubectl -n kube-system logs -l app.kubernetes.io/name=traefik`\n\n## 🤝 Contribuição\n\n1. Fork o projeto\n2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)\n3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)\n4. Push para a branch (`git push origin feature/AmazingFeature`)\n5. Abra um Pull Request\n\n## 📝 Licença\n\nEste projeto está licenciado sob a Licença GPL-3.0 - Veja mais informações em [LICENSE](LICENSE).\n\n\n## 🙏 Agradecimentos\n\n- **Jonatas Ferreira** - *Trabalho inicial* - [@jonatas-lima](https://github.com/jonatas-lima)\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftech-preta%2Fplatform-with-incus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftech-preta%2Fplatform-with-incus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftech-preta%2Fplatform-with-incus/lists"}