Skip to content

Ambiente de Produção Noxtec (NOX)

Este diretório contém a configuração do ambiente de produção para o cliente Noxtec. Este ambiente é utilizado para executar aplicações em produção para os clientes finais da Noxtec.

Visão Geral

O ambiente de produção Noxtec (NOX) inclui os seguintes componentes:

  • External Secrets: Integração de secrets entre OCI Vault e Kubernetes (versão 0.17.0)
  • Istio: Malha de serviços (versão 1.27.3) para gerenciamento de tráfego, segurança e observabilidade
  • Monitoring: Stack com OpenTelemetry (versão 0.99.0) e k8s-infra (versão 0.15.0)
  • Namespaces: Gerenciamento de namespaces Kubernetes para isolamento de aplicações
  • OCI KMS: Gerenciamento de chaves de criptografia para segredos
  • OKE (Oracle Kubernetes Engine): Cluster Kubernetes versão v1.34.1 para aplicações em produção
  • 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), Cluster Autoscaler (versão 9.46.3) e outros componentes
  • OKE kubeconfig: Gerencia o arquivo kubeconfig para acesso ao cluster
  • SSH keys: Gerencia chaves SSH para acesso aos recursos
  • Tenants: Configuração específica por tenant para isolamento de recursos

Estrutura de Diretórios

infrastructure/environments/noxtec/ ├── env.hcl # Configuração do ambiente ├── external-secrets/ # Sincronização de segredos entre OCI Vault/HashiCorp Vault e Kubernetes ├── istio/ # Malha de serviços para gerenciamento de tráfego e segurança ├── monitoring/ # Stack de monitoramento com OpenTelemetry e k8s-infra ├── namespaces/ # Gerenciamento de namespaces Kubernetes ├── oci-kms/ # Gerenciamento de chaves criptográficas ├── oke/ # Cluster Kubernetes Oracle (OKE) ├── oke-extras/ # Componentes extras para o OKE (Ingress, Cert-Manager, etc.) ├── oke-kubeconfig/ # Gerenciamento do arquivo de acesso ao cluster ├── ssh-keys/ # Gerenciamento de chaves SSH └── tenants/ # Configuração específica por tenant

Configuração

Configuração do Ambiente

O arquivo env.hcl define as configurações específicas deste ambiente:

terraform inputs = { suffix = "NOX" env = "nox" lb_publlic_ip = "" }

  • suffix: Sufixo usado para nomear recursos (NOX)
  • env: Identificador do ambiente (nox)
  • 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/noxtec/oke/

Configuração Cluster: terraform state_id = "NOX" cluster_name = "OKE-NOX" cluster_freeform_tags = { "Env" = "NOX", "Project" = "STH" } vcn_id = "ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaaf6sskwyawzcymstlohrytq5mdrck5o2d4j2renn4ofis3yxp5zxq" compartment_id = "ocid1.compartment.oc1..aaaaaaaamhcjz4cxzg5ooqcpgjd5nwaul5atlfeljy4lh5kafzlj2sqqmcwq" kubernetes_version = "v1.34.1" cni_type = "flannel" cluster_type = "enhanced" pods_cidr = "10.244.0.0/16" services_cidr = "10.96.0.0/16"

Configuração Node Pools: terraform worker_pools = { workers = { shape = "VM.Standard.E5.Flex", ocpus = 2, memory = 8, size = 2, autoscale = true, min_size = 2, max_size = 5, boot_volume_size = 100, node_cycling_enabled = true, node_cycling_max_surge = 1, node_cycling_max_unavailable = 1 } autoscaler = { description = "Node pool with cluster autoscaler scheduling allowed", shape = "VM.Standard.E5.Flex", ocpus = 2, memory = 32, size = 1, allow_autoscaler = true } }

Descrição das Configurações

  • state_id: Identificador único do estado (NOX).
  • cluster_name: Nome do cluster OKE (OKE-NOX).
  • 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).
  • pods_cidr: Range de IPs para pods (10.244.0.0/16).
  • services_cidr: Range de IPs para serviços (10.96.0.0/16).

Configuração Node Pools: - workers: Pool principal de nodes para cargas de trabalho regulares: - shape: Tipo de instância (VM.Standard.E5.Flex = flexível). - ocpus: Número de CPUs virtuais por nó (2). - memory: Quantidade de memória por nó em GB (8). - size, min_size, max_size: Controle de quantidade de nós (2-5). - autoscale: Habilita escalonamento automático de nós (true). - 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: Número máximo de nós que podem ser adicionados durante o ciclo (1). - node_cycling_max_unavailable: Número máximo de nós que podem estar indisponíveis durante o ciclo (1).

  • autoscaler: Pool especial para o cluster-autoscaler:
  • allow_autoscaler: Configura nós especificamente para executar o autoscaler. ```

Dependências

  • SSH Keys (ssh-keys)
  • GitHub Runner (do ambiente global)

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)
  • ClusterIssuer: Configuração de emissor de certificados para Let's Encrypt
  • Storage Classes: Classes de armazenamento personalizadas (oci-bv-encrypted, fss, nfs)
  • Gateway API: API de gateway para Kubernetes (versão 1.3.0)
  • Cluster Autoscaler: Escalonamento automático de nós do cluster (versão 9.46.3)

Arquivo de Configuração

Localização: config/noxtec/oke-extras/config.hcl

```terraform gateway_api_version = "1.3.0"

storage_class_config = { create = true create_fss = true create_nfs = true name = "oci-bv-encrypted" }

charts_config = { cert_manager = { install = true use_dns_solver = true install_webhook_oci = true version = "v1.19.1" contact_email = "devops-bot@noxtec.com.br" # ...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" } } ```

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/noxtec/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

Dependências

  • OKE (oke)

Istio

Visão Geral

Istio é uma malha de serviços que fornece gerenciamento de tráfego, segurança e observabilidade para microserviços.

Arquivo de Configuração

Localização: config/noxtec/istio/config.hcl

terraform namespace = "istio-system" chart_version = "1.27.3" kiali_chart_version = "2.18.0" lb_min_bandwidth = "10" lb_max_bandwidth = "100" lb_publlic_ip = "163.176.168.157"

Descrição das Configurações

  • namespace: Namespace Kubernetes onde o Istio será instalado (istio-system).
  • chart_version: Versão do chart Helm do Istio (1.27.3).
  • kiali_chart_version: Versão do chart Helm do Kiali, dashboard para visualização da malha (2.18.0).
  • lb_min_bandwidth: Largura de banda mínima para o load balancer em Mbps (10).
  • lb_max_bandwidth: Largura de banda máxima para o load balancer em Mbps (100).
  • lb_publlic_ip: IP público que o DNS deve publicar para o Gateway. No cenário atual, deve ser o IP público do firewall/NAT que encaminha para o balanceador interno do Istio, não o IP privado do service.

Componentes

  • Istio Core: Base da malha de serviços (versão 1.27.3)
  • Ingress Gateway: Gateway de entrada para a malha de serviços
  • Egress Gateway: Gateway de saída para a malha de serviços
  • Kiali: Dashboard para visualização da malha (versão 2.18.0)
  • Jaeger: Rastreamento distribuído

Dependências

  • OKE Kubeconfig (oke-kubeconfig)
  • OKE Extras (oke-extras)

O detalhamento de DNS automático, Gateway wildcard, NAT de borda e Kiali foi centralizado em Networking & Service Mesh.

External Secrets

Visão Geral

O Operador External Secrets sincroniza segredos do Vault (do ambiente de ferramentas) para o Kubernetes como objetos Secret.

Arquivo de Configuração

Localização: config/noxtec/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 para o External Secrets Operator (0.17.0).
  • secret_stores: Lista de provedores de segredos configurados (OCI e Vault HashiCorp).
  • vault_addr: Endereço do Vault HashiCorp para obter segredos.
  • conenct_to_argocd: Integração com ArgoCD para automação de CI/CD.
  • clone_pull_secrets: Habilita a clonagem automática de secrets de pull de imagens entre namespaces.

Dependências

  • OKE Kubeconfig (oke-kubeconfig)
  • Vault (do ambiente de ferramentas)
  • OKE (oke)

OCI KMS

Visão Geral

OCI Key Management Service para gerenciar chaves de criptografia usadas por outros serviços neste ambiente.

Arquivo de Configuração

Localização: config/noxtec/oci-kms/config.hcl

```terraform kms_vaults_config = [ { create = true vault_name = "secrets-NOX" } ]

kms_keys_config = [ { create = true key_name = "secrets-master-key-NOX" vault_name = "secrets-NOX" } ]

vault_secrets_config = [] ```

Descrição das Configurações

  • kms_vaults_config: Configuração do vault OCI KMS para armazenar chaves criptográficas.
  • vault_name: Nome do vault (secrets-NOX).
  • kms_keys_config: Configuração das chaves dentro do vault.
  • key_name: Nome da chave mestra (secrets-master-key-NOX).
  • vault_name: Nome do vault onde a chave será armazenada.
  • vault_secrets_config: Configuração para segredos armazenados no vault (lista vazia neste ambiente).

Dependências

  • Vault (do ambiente de ferramentas)

Monitoring

Visão Geral

Monitoramento baseado em Prometheus e Alertmanager para coletar métricas e gerar alertas para este ambiente.

Arquivo de Configuração

Localização: config/noxtec/monitoring/config.hcl

terraform cluster_name = "OKE-NOX" namespace = "monitoring" otel_endpoint = "https://otel.nox.app.br:443" image_pull_secrets = "global-pull-secrets" 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 (OKE-NOX).
  • namespace: Namespace Kubernetes onde os componentes de monitoramento serão instalados (monitoring).
  • otel_endpoint: Endpoint do coletor OpenTelemetry para envio de telemetria.
  • image_pull_secrets: Nome do secret Kubernetes usado para autenticação com registros de imagens privados.
  • k8s_infra_chart_version: Versão do chart Helm para monitoramento de infraestrutura Kubernetes (0.15.0).
  • otel_operator_chart_version: Versão do chart Helm do Operador OpenTelemetry (0.99.0).

Componentes

  • k8s-infra: Coleta de métricas do cluster Kubernetes (versão 0.15.0)
  • OpenTelemetry Collector: Coleta, processamento e exportação de telemetria (versão 0.99.0)
  • Integrações com SignOz: Envio de telemetria para o SignOz no ambiente de ferramentas
  • Alertas de produção: Configuração específica de alertas para ambiente de produção

Dependências

  • OKE Kubeconfig (oke-kubeconfig)
  • SignOz (do ambiente de ferramentas)

Como Implantar o Ambiente

Para implantar todo o ambiente de produção Noxtec:

bash terramate run --terragrunt --tags="noxtec" -- terragrunt apply -input=false -auto-approve

Para implantar um módulo específico:

bash terramate run --terragrunt --tags="noxtec: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)
  6. external-secrets - Operador External Secrets
  7. istio - Malha de serviços Istio
  8. monitoring - Stack de monitoramento

Integração com o Ambiente de Ferramentas

O ambiente de produção Noxtec integra-se com vários serviços hospedados no ambiente de ferramentas:

  • ArgoCD: Implantação contínua de aplicações (do ambiente de ferramentas)
  • Vault: Gerenciamento de segredos (do ambiente de ferramentas)
  • SignOz: Observabilidade e telemetria (do ambiente de ferramentas)
  • Sentry: Monitoramento de erros (do ambiente de ferramentas)

Considerações de Alta Disponibilidade e Disaster Recovery

Este ambiente é configurado com redundância e alta disponibilidade:

  • Node Pool: Configuração mínima de 2 nós para garantir disponibilidade
  • Autoscaling: Escala automática de 2 a 5 nós dependendo da carga
  • Multi-AD: Deployment através de múltiplos domínios de disponibilidade da OCI
  • Backup: Política de backup automatizado para dados persistentes
  • Node Cycling: Renovação automática de nós para manter a saúde do cluster

Acesso aos Serviços

Os serviços estão disponíveis através dos seguintes domínios:

  • Aplicações: .nox.app.br. E.g. tre.nox.app.br
  • Kiali: host derivado do template atual do módulo (kiali.nox.nox.app.br), salvo customização externa adicional

O acesso a esses serviços requer autenticação apropriada conforme configurado.

Manutenção

Atualizações de Versão

Ao atualizar as versões dos componentes, siga estas diretrizes:

  1. Kubernetes: Atualize gradualmente para evitar incompatibilidades. Teste a atualização em um ambiente de desenvolvimento antes.
  2. Istio: Verifique a compatibilidade com a versão do Kubernetes. Atualize primeiro os componentes de controle e depois os data planes.
  3. Cert-Manager e outros componentes: Verifique a compatibilidade com a versão do Kubernetes antes de atualizar.

Backup e Recuperação

Este ambiente utiliza as seguintes estratégias para backup:

  • Kubernetes: Os backups são gerenciados pelo OCI.
  • Segredos: Os segredos são armazenados no OCI Vault e Vault HashiCorp.
  • Configurações: As configurações são versionadas no Git.