Skip to content

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:

  1. ssh-keys - Chaves SSH
  2. oci-kms - Serviço de gerenciamento de chaves
  3. oke - Cluster Kubernetes
  4. oke-kubeconfig - Arquivo de configuração do Kubernetes
  5. oke-extras - Extras do OKE (Ingress, Cert-Manager, Kyverno, External DNS)
  6. vault - HashiCorp Vault
  7. external-secrets - Operador External Secrets
  8. signoz - SignOz para observabilidade
  9. monitoring - Stack de monitoramento
  10. argocd - ArgoCD para GitOps
  11. sonarqube - SonarQube para qualidade de código
  12. sentry - 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.