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:
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)external-secrets- Operador External Secretsistio- Malha de serviços Istiomonitoring- 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:
- Kubernetes: Atualize gradualmente para evitar incompatibilidades. Teste a atualização em um ambiente de desenvolvimento antes.
- Istio: Verifique a compatibilidade com a versão do Kubernetes. Atualize primeiro os componentes de controle e depois os data planes.
- 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.