Ambiente de Homologação (HML)¶
Este diretório contém a configuração do ambiente de homologação. Este ambiente é utilizado para testes, validação e homologação de aplicações antes da implantação em produção.
Visão Geral¶
O ambiente de homologação (HML) 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 homologaçã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 (afpes, cisne, cmd, cxs, fusex, global, hic, nfb, rjv, rvt, scz, tre) para isolamento de recursos
Tenants¶
Visão Geral¶
Gerenciamento de namespaces Kubernetes para isolamento de aplicações por tenant.
Arquivo de Configuração¶
Localização: config/hml/tenants/
```terraform
global.hcl¶
description = "Global Tenant" namespace = "global"
tre.hcl¶
description = "STH Treinamento" namespace = "tre"
afpes.hcl, cisne.hcl, cmd.hcl, cxs.hcl,¶
fusex.hcl, hic.hcl, nfb.hcl, rjv.hcl,¶
rvt.hcl, scz.hcl¶
... (um arquivo .hcl por tenant)¶
```
Atualmente configura os seguintes tenants (12 no total):
| Tenant | Descrição |
|---|---|
| afpes | Cliente AFPES |
| cisne | Cliente Cisne |
| cmd | Cliente CMD |
| cxs | Cliente CXS |
| fusex | Cliente FUSEX |
| global | Recursos compartilhados globalmente |
| hic | Cliente HIC |
| nfb | Cliente NFB |
| rjv | Cliente RJV |
| rvt | Cliente RVT |
| scz | Cliente SCZ |
| tre | Treinamento |
Descrição das Configurações¶
- description: Descrição do tenant para documentação e clareza.
- namespace: Nome do namespace Kubernetes que será criado para o tenant.
Dependências¶
- OKE Extras (
oke-extras)
Estrutura de Diretórios¶
infrastructure/environments/hml/
├── 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 = "HML"
env = "hml"
lb_publlic_ip = ""
}
- suffix: Sufixo usado para nomear recursos (HML)
- env: Identificador do ambiente (hml)
- 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/hml/oke/
Configuração Cluster:
terraform
state_id = "HML"
cluster_name = "OKE-HML"
cluster_freeform_tags = { "Env" = "HML", "Project" = "STH" }
vcn_id = "ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaaf6sskwyanv2gt2lluyid3s67tetc2v4xwqjiux76cv5vxs43jmvq"
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 = 32,
size = 3,
autoscale = true,
min_size = 3,
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 (HML).
- cluster_name: Nome do cluster OKE (OKE-HML).
- 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/12).
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 (32). - size, min_size, max_size: Controle de quantidade de nós (3-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)
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.4.0)
- Cluster Autoscaler: Escalonamento automático de nós do cluster (versão 9.46.3)
Arquivo de Configuração¶
Localização: config/hml/oke-extras/config.hcl
```terraform gateway_api_version = "1.4.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/hml/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/hml/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.171.85"
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/hml/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/hml/oci-kms/config.hcl
```terraform kms_vaults_config = [ { create = true vault_name = "secrets-HML" } ]
kms_keys_config = [ { create = true key_name = "secrets-master-key-HML" vault_name = "secrets-HML" } ]
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-HML).
- kms_keys_config: Configuração das chaves dentro do vault.
- key_name: Nome da chave mestra (secrets-master-key-HML).
- vault_name: Nome do vault onde a chave será armazenada.
- vault_secrets_config: Configuração para segredos armazenados no vault (lista vazia neste ambiente).
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/hml/monitoring/config.hcl
terraform
cluster_name = "OKE-HML"
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-HML).
- 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
Dependências¶
- OKE Kubeconfig (
oke-kubeconfig) - SignOz (do ambiente de ferramentas)
Como Implantar o Ambiente¶
Para implantar todo o ambiente de homologação:
bash
terramate run --terragrunt --tags="hml" -- terragrunt apply -input=false -auto-approve
Para implantar um módulo específico:
bash
terramate run --terragrunt --tags="hml: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)external-secrets- Operador External Secretsistio- Malha de serviços Istiomonitoring- Stack de monitoramentonamespaces- Criação e configuração dos namespaces por tenant
Integração com o Ambiente de Ferramentas¶
O ambiente de homologação 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)
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: kiali.hml.nox.app.br
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.