Ambiente de Ferramentas (Tools)¶
Este diretório contém a configuração do ambiente de ferramentas DevOps compartilhadas. Este ambiente é utilizado para hospedar serviços de suporte ao desenvolvimento que são usados por todos os outros ambientes.
Visão Geral¶
O ambiente de ferramentas (TOOLS) inclui os seguintes componentes:
- ArgoCD: Plataforma GitOps para implantação contínua de aplicações (versão 9.1.0)
- External Secrets: Integração de secrets entre Vault e Kubernetes (versão 0.17.0)
- Monitoramento: Stack com k8s-infra (versão 0.15.0) e OpenTelemetry (versão 0.99.0)
- OCI KMS: Gerenciamento de chaves de criptografia para segredos
- OKE (Oracle Kubernetes Engine): Cluster Kubernetes dedicado para ferramentas DevOps (versão v1.34.1)
- OKE Extras: Ingress NGINX (versão 4.14.0), Cert-Manager (versão v1.19.1), Kyverno (versão 3.5.2), External DNS (versão 9.0.3)
- OKE kubeconfig: Gerencia o arquivo kubeconfig para acesso ao cluster
- Sentry: Monitoramento e rastreamento de erros de aplicações (versão 27.5.0)
- SignOz: Observabilidade completa com métricas, traces e logs (versão 0.101.0)
- SonarQube: Análise estática de qualidade de código (versão 2025.5.0)
- SSH keys: Gerencia chaves SSH para acesso aos recursos
- HashiCorp Vault: Gerenciamento seguro de secrets (versão 0.31.0)
Estrutura de Diretórios¶
infrastructure/environments/tools/
├── env.hcl
├── argocd/
├── external-secrets/
├── monitoring/
├── oci-kms/
├── oke/
├── oke-extras/
├── oke-kubeconfig/
├── sentry/
├── signoz/
├── sonarqube/
├── ssh-keys/
└── vault/
Configuração¶
Configuração do Ambiente¶
O arquivo env.hcl define as configurações específicas deste ambiente:
terraform
inputs = {
suffix = "TOOLS"
env = "tools"
lb_publlic_ip = ""
}
- suffix: Sufixo usado para nomear recursos (TOOLS)
- env: Identificador do ambiente (tools)
- lb_publlic_ip: Endereço IP público para o Load Balancer (quando aplicável). Deixado em branco quando o Load Balancer é criado automaticamente ou quando não é necessário um IP estático.
Módulos¶
OKE (Oracle Kubernetes Engine)¶
Visão Geral¶
O OKE é o cluster Kubernetes gerenciado pela Oracle que hospeda todos os serviços deste ambiente.
Arquivo de Configuração¶
Localização: config/tools/oke/
Configuração Cluster (cluster.hcl):
terraform
state_id = "TOOLS"
cluster_name = "OKE-TOOLS"
cluster_freeform_tags = { "Env" = "TOOLS", "Project" = "STH" }
vcn_id = "ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaaf6sskwyakaooitbaawmussbtdp7iylypgsf4ky2syxdfzhgjf5ja"
compartment_id = "ocid1.compartment.oc1..aaaaaaaamhcjz4cxzg5ooqcpgjd5nwaul5atlfeljy4lh5kafzlj2sqqmcwq"
kubernetes_version = "v1.34.1"
cni_type = "flannel"
cluster_type = "enhanced"
Configuração Node Pools (node-pools.hcl):
terraform
worker_pools = {
workers = {
shape = "VM.Standard.E5.Flex",
ocpus = 4,
memory = 32,
size = 3,
autoscale = false,
boot_volume_size = 100,
node_cycling_enabled = true,
node_cycling_max_surge = 3,
node_cycling_max_unavailable = 0
}
}
Descrição das Configurações¶
- state_id: Identificador único do estado (TOOLS).
- cluster_name: Nome do cluster OKE (OKE-TOOLS).
- cluster_freeform_tags: Tags para organização de recursos no OCI.
- vcn_id: ID da Virtual Cloud Network (VCN) onde o cluster será criado.
- compartment_id: ID do compartimento OCI onde o cluster será criado.
- kubernetes_version: Versão do Kubernetes a ser instalada (v1.34.1).
- cni_type: Tipo de Container Network Interface (flannel).
- cluster_type: Tipo de cluster (enhanced = recursos avançados habilitados).
Configuração Node Pools: - shape: Tipo de instância (VM.Standard.E5.Flex = flexível). - ocpus: Número de CPUs virtuais por nó (4). - memory: Quantidade de memória por nó em GB (32). - size: Número inicial de nós no pool (3). - autoscale: Se o autoscaling está habilitado (false). - boot_volume_size: Tamanho do volume de boot em GB (100). - node_cycling_enabled: Habilita renovação automática de nós. - node_cycling_max_surge: Máximo de nós extras durante renovação (3). - node_cycling_max_unavailable: Máximo de nós indisponíveis durante renovação (0). ```
Dependências¶
- SSH Keys (
ssh-keys)
OKE Extras¶
Visão Geral¶
Este módulo instala componentes adicionais no cluster OKE para fornecer funcionalidades extras como ingress, certificados TLS e outros recursos essenciais.
Componentes¶
- Cert-Manager: Gerenciamento automatizado de certificados TLS (versão v1.19.1)
- Nginx Ingress Controller: Controller de ingress para roteamento HTTP (versão 4.14.0)
- Reloader: Automação de recarregamento de configurações (versão 2.2.4)
- Kyverno: Política de admissão para Kubernetes (versão 3.5.2)
- External DNS: Integração de DNS com provedores externos (versão 9.0.3)
- Gateway API: Suporte para Gateway API (versão 1.3.0)
Arquivo de Configuração¶
Localização: config/tools/oke-extras/config.hcl
```terraform gateway_api_version = "1.3.0"
storage_class_config = { create = true create_fss = false create_nfs = false name = "oci-bv-encrypted" }
charts_config = { cert_manager = { install = true use_dns_solver = true install_webhook_oci = true version = "v1.19.1" # ...outras configurações }
ingress_nginx = { install = true version = "4.14.0" }
reloader = { install = true version = "2.2.4" }
kyverno = { install = true version = "3.5.2" }
external_dns = { install = true version = "9.0.3" } } ```
Descrição das Configurações¶
- gateway_api_version: Versão da API Gateway para Kubernetes a ser instalada.
- storage_class_config: Configuração das classes de armazenamento para o cluster:
- create: Habilita a criação da classe de armazenamento padrão.
- create_fss: Desabilitado para não criar classe de armazenamento FSS (File Storage Service).
- create_nfs: Desabilitado para não criar classe de armazenamento NFS.
-
name: Nome da classe de armazenamento padrão (oci-bv-encrypted).
-
charts_config: Configurações dos charts Helm a serem instalados:
- cert_manager: Configuração do gerenciador de certificados:
- install: Habilita a instalação do Cert-Manager.
- use_dns_solver: Habilita resolução DNS para validação de domínios.
- install_webhook_oci: Habilita o webhook para integração com OCI DNS.
- version: Versão do chart Helm do Cert-Manager.
- contact_email: Email de contato para notificações de expiração de certificados.
- dns_solver_dns_zone: Zona DNS para validação de domínios.
- ingress_nginx: Configuração do controlador de ingress NGINX.
- reloader: Configuração do Reloader para automação de atualizações de configuração.
- kyverno: Configuração do Kyverno para políticas de admissão.
- external_dns: Configuração do External DNS para sincronização com provedores DNS.
Dependências¶
- OKE (
oke)
OKE Kubeconfig¶
Visão Geral¶
Este módulo gerencia o arquivo kubeconfig que fornece acesso ao cluster OKE.
Arquivo de Configuração¶
Localização: infrastructure/environments/tools/oke-kubeconfig/terragrunt.hcl
terraform
kubeconfig_path = "${get_repo_root()}/files/kubeconfig-${dependency.oke.outputs.state_id}"
oci_profile = include.root.locals.oci_profile
cluster_id = dependency.oke.outputs.cluster_id
suffix = dependency.oke.outputs.state_id
Descrição das Configurações¶
- kubeconfig_path: Caminho completo para o arquivo kubeconfig gerado.
- oci_profile: Perfil OCI a ser usado para autenticação no cluster.
- cluster_id: ID do cluster OKE para gerar o kubeconfig.
- suffix: Sufixo para identificar o arquivo kubeconfig (TOOLS).
Dependências¶
- OKE (
oke)
ArgoCD¶
Visão Geral¶
ArgoCD é a ferramenta GitOps usada para gerenciar implantações de aplicações nos clusters Kubernetes.
Arquivo de Configuração¶
Localização: config/tools/argocd/config.hcl
terraform
chart_version = "9.1.0"
authorized_github_orgs = ["ads-saude", "ads-devops"]
cluster_prefixes = ["TOOLS", "HML", "NOX"]
cert_manager_cluster_iusser = "le-prd"
dex_config_secret_id = "ocid1.vaultsecret.oc1.sa-saopaulo-1.amaaaaaaf6sskwyajcf77tbkimq7xo5jw3ywmo2ov5jti7ub3ypajhnyvkwa"
dex_rbac_default_policy = "readonly"
Descrição das Configurações¶
- chart_version: Define a versão do chart Helm do ArgoCD (9.1.0) a ser instalada.
- authorized_github_orgs: Lista de organizações GitHub autorizadas para autenticação ("ads-saude", "ads-devops").
- cluster_prefixes: Prefixos dos clusters que o ArgoCD gerenciará (TOOLS, HML, NOX).
- cert_manager_cluster_iusser: Emissor de certificados do Cert-Manager para TLS (le-prd = Let's Encrypt Production).
- dex_config_secret_id: ID do segredo OCI que contém as configurações do Dex (provedor OAuth).
- dex_rbac_default_policy: Política padrão para novos usuários autenticados (readonly).
Dependências¶
- OKE Kubeconfig (
oke-kubeconfig) - Vault (
vault)
Vault¶
Visão Geral¶
HashiCorp Vault é usado para gerenciar segredos e outros dados sensíveis.
Arquivo de Configuração¶
Localização: config/tools/vault/config.hcl
terraform
vault_host = "vault.nox.app.br"
vault_chart_version = "0.31.0"
storage_bucket = "vault-TOOLS"
storage_lock_bucket = "vault_lock-TOOLS"
Descrição das Configurações¶
- vault_host: Hostname público do serviço Vault (vault.nox.app.br).
- vault_chart_version: Versão do chart Helm do Vault (0.31.0) a ser instalada.
- storage_bucket: Nome do bucket OCI para armazenamento de dados do Vault (vault-TOOLS).
- storage_lock_bucket: Nome do bucket OCI para armazenamento de locks de consistência (vault_lock-TOOLS).
Recursos Configurados¶
- Instância Vault configurada para alta disponibilidade (versão 0.31.0)
- Integração com OCI KMS para auto-unseal
- Armazenamento de segredos
Dependências¶
- OKE (
oke) - OCI KMS (
oci-kms) - OKE Kubeconfig (
oke-kubeconfig)
External Secrets¶
Visão Geral¶
O Operador External Secrets sincroniza segredos do Vault para o Kubernetes como objetos Secret.
Arquivo de Configuração¶
Localização: config/tools/external-secrets/config.hcl
terraform
chart_version = "0.17.0"
secret_stores = ["oci", "vault"]
vault_addr = "https://vault.nox.app.br"
conenct_to_argocd = true
clone_pull_secrets = true
Descrição das Configurações¶
- chart_version: Versão do chart Helm do External Secrets Operator (0.17.0).
- secret_stores: Tipos de armazenamento de segredos suportados (OCI Vault e HashiCorp Vault).
- vault_addr: Endereço completo do serviço HashiCorp Vault.
- conenct_to_argocd: Configura integração com ArgoCD para gerenciamento de segredos.
- clone_pull_secrets: Habilita clonagem automática de segredos de pull de imagens entre namespaces.
Dependências¶
- OKE Kubeconfig (
oke-kubeconfig) - Vault (
vault)
OCI KMS¶
Visão Geral¶
OCI Key Management Service para gerenciar chaves de criptografia usadas por outros serviços.
Arquivo de Configuração¶
Localização: config/tools/oci-kms/config.hcl
```terraform kms_vaults_config = [ { create = true vault_name = "vault-TOOLS" }, { create = true vault_name = "secrets-TOOLS" } ]
kms_keys_config = [ { create = true key_name = "vault-unseal-key-TOOLS" vault_name = "vault-TOOLS" }, { create = true key_name = "secrets-master-key-TOOLS" vault_name = "secrets-TOOLS" }, ]
vault_secrets_config = [ { create = true secret_name = "vault-unseal-keys-TOOLS" key_name = "vault-unseal-key-TOOLS" vault_name = "vault-TOOLS" }, { create = true secret_name = "GITHUB_RUNNER_ACCESS_TOKEN" key_name = "master-key" vault_name = "GLOBAL" } ] ```
Descrição das Configurações¶
- kms_vaults_config: Define os cofres OCI a serem criados:
- vault-TOOLS: Armazena chaves específicas para o HashiCorp Vault
-
secrets-TOOLS: Armazena chaves para segredos gerais do ambiente
-
kms_keys_config: Define as chaves mestre a serem criadas:
- vault-unseal-key-TOOLS: Chave usada para auto-unseal do HashiCorp Vault
-
secrets-master-key-TOOLS: Chave mestra para proteger segredos gerais
-
vault_secrets_config: Define os segredos a serem armazenados:
- vault-unseal-keys-TOOLS: Armazena chaves de unseal do HashiCorp Vault
- GITHUB_RUNNER_ACCESS_TOKEN: Token de acesso para GitHub Runners
SonarQube¶
Visão Geral¶
SonarQube é usado para análise estática de código e garantia de qualidade.
Arquivo de Configuração¶
Localização: config/tools/sonarqube/config.hcl
terraform
sonar_hostname = "sonarqube.nox.app.br"
namespace = "sonarqube"
chart_version = "2025.5.0"
jdbc_url = "jdbc:postgresql://10.151.17.219:5436/sonar"
jdbc_username = "sonar"
sonarqube_config_secret_id = "ocid1.vaultsecret.oc1.sa-saopaulo-1.amaaaaaaf6sskwya67bwnlkjzyc3ph2tyyvxpy4jco7zek23ohzpguh6zfza"
projects = [
"auth-api",
"extent",
"is-core-api",
# ... outros projetos
]
Descrição das Configurações¶
- sonar_hostname: Hostname público do serviço SonarQube.
- namespace: Namespace Kubernetes onde o SonarQube será instalado.
- chart_version: Versão do chart Helm do SonarQube (2025.5.0).
- jdbc_url: URL de conexão com o banco de dados PostgreSQL.
- jdbc_username: Usuário para conexão com o banco de dados.
- sonarqube_config_secret_id: ID do segredo OCI que contém configurações sensíveis (senhas, tokens).
- projects: Lista de projetos configurados para análise de qualidade no SonarQube.
Projetos Configurados¶
SonarQube está configurado para analisar 19 projetos diferentes, incluindo: - auth-api, extent, is-core-api, is-core-ui, is-portal-api e outros
Dependências¶
- OKE Kubeconfig (
oke-kubeconfig) - External Secrets (
external-secrets)
Sentry¶
Visão Geral¶
O Sentry é usado para monitoramento de erros e problemas em tempo real nas aplicações.
Arquivo de Configuração¶
Localização: config/tools/sentry/config.hcl
terraform
sentry_hostname = "sentry.nox.app.br"
namespace = "sentry"
chart_version = "27.5.0"
admin_email = "admin@sentry.local"
mail_host = "mail.redeis.app.br"
mail_port = "465"
mail_secure = true
mail_from = "naoresponda@redeis.app.br"
mail_username = "naoresponda@redeis.app.br"
sentry_config_secret_id = "ocid1.vaultsecret.oc1.sa-saopaulo-1.amaaaaaaf6sskwyayc2qzitmmw7pvtvg7rnjwce3elbvicmlcixsxiinfria"
github_app_id = "1200639"
github_app_name = "ads-sentry"
Descrição das Configurações¶
- sentry_hostname: Hostname público do serviço Sentry.
- namespace: Namespace Kubernetes onde o Sentry será instalado.
- chart_version: Versão do chart Helm do Sentry (27.5.0).
- admin_email: Email do usuário administrador.
- mail_host, mail_port, mail_secure: Configurações do servidor SMTP para envio de emails.
- mail_from, mail_username: Configurações de remetente para emails enviados pelo Sentry.
- sentry_config_secret_id: ID do segredo OCI que contém configurações sensíveis (senhas, tokens).
- github_app_id, github_app_name: Identificadores do aplicativo GitHub para integração de commits e issues.
Dependências¶
- OKE Kubeconfig (
oke-kubeconfig) - External Secrets (
external-secrets)
SignOz¶
Visão Geral¶
SignOz fornece observabilidade e telemetria para aplicações em execução.
Arquivo de Configuração¶
Localização: config/tools/signoz/config.hcl
terraform
signoz_version = "0.101.0"
global_pull_secret_name = "global-pull-secrets"
Descrição das Configurações¶
- signoz_version: Versão do SignOz a ser instalada (0.101.0).
- global_pull_secret_name: Nome do secret Kubernetes que contém credenciais para pull de imagens de contêiner.
Dependências¶
- OKE Kubeconfig (
oke-kubeconfig) - OKE Extras (
oke-extras)
Monitoring¶
Visão Geral¶
Monitoramento baseado em k8s-infra e OpenTelemetry para coletar métricas, logs e traces.
Arquivo de Configuração¶
Localização: config/tools/monitoring/config.hcl
terraform
cluster_name = "OKE-TOOLS"
namespace = "monitoring"
otel_endpoint = "https://otel.nox.app.br:443"
image_pull_secrets = "global-pull-secrets"
k8s_infra_collect_logs = true
install_otel_operator = false
k8s_infra_chart_version = "0.15.0"
otel_operator_chart_version = "0.99.0"
Descrição das Configurações¶
- cluster_name: Nome do cluster Kubernetes para identificação nas métricas.
- namespace: Namespace Kubernetes onde os componentes de monitoramento serão instalados.
- otel_endpoint: Endpoint do serviço OpenTelemetry Collector para envio de telemetria.
- image_pull_secrets: Nome do secret Kubernetes com credenciais para pull de imagens.
- k8s_infra_collect_logs: Define se a coleta de logs de componentes Kubernetes está habilitada.
- install_otel_operator: Define se o operador OpenTelemetry deve ser instalado (false = usa o SignOz).
- k8s_infra_chart_version: Versão do chart Helm k8s-infra para monitoramento de componentes Kubernetes.
- otel_operator_chart_version: Versão do chart Helm do operador OpenTelemetry, para referência.
Dependências¶
- SignOz (
signoz)
Como Implantar o Ambiente¶
Para implantar todo o ambiente de ferramentas:
bash
terramate run --terragrunt --tags="tools" -- terragrunt apply -input=false -auto-approve
Para implantar um módulo específico:
bash
terramate run --terragrunt --tags="tools:nome-do-módulo" -- terragrunt apply -input=false -auto-approve
Ordem de Implantação¶
A implantação do ambiente deve seguir esta ordem para garantir que as dependências sejam atendidas:
ssh-keys- Chaves SSHoci-kms- Serviço de gerenciamento de chavesoke- Cluster Kubernetesoke-kubeconfig- Arquivo de configuração do Kubernetesoke-extras- Extras do OKE (Ingress, Cert-Manager, Kyverno, External DNS)vault- HashiCorp Vaultexternal-secrets- Operador External Secretssignoz- SignOz para observabilidademonitoring- Stack de monitoramentoargocd- ArgoCD para GitOpssonarqube- SonarQube para qualidade de códigosentry- Sentry para monitoramento de erros
Acesso aos Serviços¶
Os serviços estão disponíveis através dos seguintes URLs:
- ArgoCD: https://argocd.nox.app.br
- SonarQube: https://sonarqube.nox.app.br
- Sentry: https://sentry.nox.app.br
- SignOz: https://signoz.nox.app.br
- Vault: https://vault.nox.app.br
O acesso a esses serviços requer autenticação apropriada conforme configurado.
Manutenção e Operação¶
Verificação de Status¶
Para verificar o status dos serviços implantados:
bash
kubectl --kubeconfig files/kubeconfig-TOOLS get pods --all-namespaces
Backup¶
Os seguintes componentes possuem dados persistentes que devem ser incluídos em rotinas de backup: - Vault: Dados criptografados nos buckets OCI - SonarQube: Banco de dados PostgreSQL - Sentry: Banco de dados e arquivos persistentes
Atualizações de Versão¶
Ao atualizar os componentes, sempre verifique as notas de versão e siga as recomendações de migração para cada serviço.