From 97aba2e22869e481d05fd1e80f6f13e9f5172f99 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Tue, 3 Mar 2026 16:32:37 -0300 Subject: [PATCH] docs(nexus): reescreve OCI-DEV-NEXUS com foco em cmp-dev-nexus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Foco total no compartment cmp-dev-nexus: clusters, gateways, buckets - Documenta o que Terraform cria vs o que e manual - api-gateway-dev (PUBLIC, cmp-dev-nexus) substitui api-gateway-mfe-dev - api-gateway-nexus-dev (PRIVATE, manual) detalhado com 11 deployments - Secao detalhada sobre terraform.ci.tfvars e variáveis sensiveis - Tabela de URLs MFE, MS backend, ArgoCD - OCIDs e endpoints atualizados em 2026-03-03 --- inventcloud/invista/nexus/OCI-DEV-NEXUS.md | 934 ++++++++------------- 1 file changed, 338 insertions(+), 596 deletions(-) diff --git a/inventcloud/invista/nexus/OCI-DEV-NEXUS.md b/inventcloud/invista/nexus/OCI-DEV-NEXUS.md index 7c645d5..35c575a 100644 --- a/inventcloud/invista/nexus/OCI-DEV-NEXUS.md +++ b/inventcloud/invista/nexus/OCI-DEV-NEXUS.md @@ -1,689 +1,431 @@ # OCI — Ambiente DEV Nexus (cmp-dev-nexus) -> **Data:** 2026-02-25 | **Responsável:** Tiago Ribeiro -> **Contexto:** Documentação completa do ambiente DEV Nexus — recursos OCI e Terraform (`tf_oci_clusters`) - ---- - -## 0. Diagrama Geral — Fluxo de Tráfego e Recursos - -### 0.1 Fluxo Completo: Internet → Cloudflare → OCI → Serviços - -``` -┌─────────────────────────────────────────────────────────────────────────────────────┐ -│ INTERNET │ -└──────────────────────────────┬──────────────────────────────────────────────────────┘ - │ - ┌──────────▼──────────┐ - │ CLOUDFLARE │ - │ *.invista.com.br │ - │ (DNS + Proxy/WAF) │ - └──────┬──────────────┘ - │ - ┌────────────────┼─────────────────────┐ - │ APIs backend │ MFE (frontend) │ Acesso direto - │ (proxied) │ (planejado ⏳) │ (public LB) - ▼ ▼ ▼ -┌─────────────────┐ ┌──────────────────┐ ┌──────────────────────┐ -│ LB Test_Crivo │ │ LB Test_Crivo │ │ OKE Public LB │ -│ 10.8.4.127 │ │ Dev (VCN-Shared) │ │ 137.131.236.202 │ -│ VCN-Shared │ │ (rota pendente) │ │ cls-dev-nexus │ -│ cmp-shared-inv │ └──────────────────┘ └──────────────────────┘ -│ [MANUAL] │ │ │ -└────────┬────────┘ │ │ - │ │ │ - │ DRG-Invista-Shared │ - │ (VCN-Shared ↔ VCN-DEV) │ - ▼ │ │ -┌─────────────────────────────────────────────────┼──────────────────────────────────┐ -│ VCN-DEV (10.6.0.0/16) — cmp-dev-inv [MANUAL] │ │ -│ │ │ -│ ┌──────────────────────────────────────────┐ │ │ -│ │ api-gateway-nexus-dev [MANUAL] │ │ │ -│ │ PRIVATE · IP: 10.6.0.123 │ │ │ -│ │ Subnet: SBNT-DEV (10.6.0.0/24) │ │ │ -│ │ │ │ │ -│ │ Deployments: │ │ │ -│ │ /api/auth /api/user │ │ │ -│ │ /api/person /api/role │ │ │ -│ │ /api/sso /api/cache │ │ │ -│ │ /api/commercial-manager … │ │ │ -│ └────────────────────┬─────────────────────┘ │ │ -│ │ DRG (VCN-DEV ↔ vcn-oke) │ │ -└───────────────────────┼─────────────────────────┼──────────────────────────────────┘ - │ │ - └────────────┬────────────┘ - │ -┌────────────────────────────────────▼────────────────────────────────────────────────┐ -│ vcn-oke (10.110.0.0/16) — cmp-dev-inv [TERRAFORM ✅] │ -│ │ -│ ┌─────────────────────────────────────────────────────────────────────────────┐ │ -│ │ sbn-lb-1 (10.110.128.0/20) · sbn-lb-2 (10.110.144.0/20) — PÚBLICAS │ │ -│ │ │ │ -│ │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ ┌─────────────┐ │ │ -│ │ │ OKE LB │ │ OKE LB │ │ OKE LB │ │ OKE LB pub │ │ │ -│ │ │ 10.110.133.131│ │ 10.110.135.3 │ │ 10.110.129.64 │ │137.131.236.2│ │ │ -│ │ │ cls-barramento│ │ cls-nexus │ │ cls-obs. │ │ cls-nexus │ │ │ -│ │ └───────┬───────┘ └──────┬────────┘ └──────┬────────┘ └──────┬──────┘ │ │ -│ └──────────┼─────────────────┼──────────────────┼─────────────────┼─────────┘ │ -│ │ │ │ │ │ -│ ┌──────────┼─────────────────┼──────────────────┼─────────────────┼─────────┐ │ -│ │ sbn-workers-1/2/3 (10.110.0–32.0/20) — PÚBLICAS — cmp-dev-nexus │ │ -│ │ │ │ -│ │ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────┐ │ │ -│ │ │ cls-dev-nexus │ │ cls-dev-barramento │ │ cls-dev-obs. │ │ │ -│ │ │ [TERRAFORM ✅] │ │ [TERRAFORM ✅] │ │ [TERRAFORM ✅] │ │ │ -│ │ │ np-dev-1 (x3 VMs) │ │ np-dev-2 (x3 VMs) │ │ np-dev-3 (x3) │ │ │ -│ │ │ ArgoCD ✅ │ │ ArgoCD ✅ │ │ ArgoCD ✅ │ │ │ -│ │ │ K8s v1.34.1 │ │ K8s v1.34.1 │ │ K8s v1.34.1 │ │ │ -│ │ └─────────────────────┘ └─────────────────────┘ └─────────────────┘ │ │ -│ └───────────────────────────────────────────────────────────────────────────┘ │ -│ │ -│ ┌─────────────────────────────────────────────────────────────────────────────┐ │ -│ │ sbn-api-gateway (10.110.192.0/20) — PRIVADA [TERRAFORM ✅] │ │ -│ │ │ │ -│ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ -│ │ │ api-gateway-mfe-dev [TERRAFORM ✅] │ │ │ -│ │ │ PRIVATE · IP: 10.110.198.250 │ │ │ -│ │ │ Deployments: mfe-user → nexus-mfe-user-development (Object Storage) │ │ │ -│ │ └──────────────────────────────────────────────────────────────────────┘ │ │ -│ └─────────────────────────────────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────────────────────────┘ - │ - ┌───────────▼──────────────┐ - │ OCI Object Storage │ - │ Namespace: grbb7qzeuoag │ - │ nexus-mfe-user-dev │ - │ mfe-shell-dev │ - │ [MANUAL / Pipeline CI] │ - └───────────────────────────┘ -``` - ---- - -### 0.2 Fluxo API Backend (atual) - -``` -Browser - │ - └─► Cloudflare (*.invista.com.br) [DNS Proxy + WAF] - │ - ▼ - LB Test_Crivo_Dev (10.8.4.127 — VCN-Shared — cmp-shared-inv) - Cert: *.invista.com.br (Cloudflare Origin CA) - │ roteamento por hostname - ▼ - api-gateway-nexus-dev (PRIVATE — 10.6.0.123 — VCN-DEV) - /api/auth /api/user /api/person /api/sso … - │ - │ DRG: VCN-DEV ↔ vcn-oke - ▼ - OKE Load Balancers internos (10.110.128-143.x — sbn-lb-1/2) - │ - ▼ - K8s Services / Ingress (cls-dev-nexus) - │ - ▼ - Pods (worker nodes — sbn-workers-1/2/3 — cmp-dev-nexus) -``` - ---- - -### 0.3 Fluxo MFE Frontend (planejado ⏳) - -``` -Browser - │ - └─► Cloudflare (mfe-user-dev.invista.com.br) [DNS Proxy] - │ - ▼ ⏳ PENDENTE: DRG attach vcn-oke → DRG-Invista-Shared - LB Test_Crivo_Dev (10.8.4.127 — VCN-Shared) - │ rota: mfe-user-dev.invista.com.br → 10.110.198.250:443 - │ - │ DRG: VCN-Shared → vcn-oke - ▼ - api-gateway-mfe-dev (PRIVATE — 10.110.198.250 — sbn-api-gateway) - │ / → index.html /{path*} → arquivos estáticos - ▼ - OCI Object Storage - nexus-mfe-user-development (namespace: grbb7qzeuoag) - - Atual (sem DNS): - https://guhal72tzyekzchzamhhi3lvgi.apigateway.sa-saopaulo-1.oci.customer-oci.com/ -``` - ---- - -### 0.4 Mapa de Compartments e Recursos - -``` -invistacloud (root) -│ -├── cmp-top-invista -│ └── cmp-dev-inv ──────────────────────────────────────────────────────────────┐ -│ │ │ -│ │ [TERRAFORM ✅] vcn-oke (10.110.0.0/16) │ -│ │ [TERRAFORM ✅] api-gateway-mfe-dev (10.110.198.250) │ -│ │ [TERRAFORM ✅] observability (alarms, log group, dashboards) │ -│ │ [MANUAL] VCN-DEV (10.6.0.0/16) │ -│ │ [MANUAL] api-gateway-nexus-dev (PRIVATE, 10.6.0.123) │ -│ │ [MANUAL] DRG attachments (VCN-DEV ↔ vcn-oke) │ -│ │ [PIPELINE CI] buckets: mfe-shell-dev │ -│ │ │ -│ └── cmp-dev-nexus ────────────────────────────────────────────────────┐ │ -│ │ │ │ -│ │ [TERRAFORM ✅] cls-dev-nexus (k8s v1.34.1, x3 VMs) │ │ -│ │ [TERRAFORM ✅] cls-dev-barramento (k8s v1.34.1, x3 VMs) │ │ -│ │ [TERRAFORM ✅] cls-dev-observabilidade (k8s v1.34.1, x3 VMs)│ │ -│ │ [OKE-managed] 5x Load Balancers (OKE Services) │ │ -│ │ [MANUAL] buckets: tfstate-*, invista-inventcloud-bucket3│ │ -│ └───────────────────────────────────────────────────────────────┘ │ -│ │ -└── cmp-shared-inv │ - [MANUAL] LB Test_Crivo_Dev (10.8.4.127, VCN-Shared 10.8.0.0/16) │ - [MANUAL] DRG-Invista-Shared │ - │ -OKE > DEV ←── VCNs orphans deletadas em 2026-02-25 ────────────────────────────┘ -``` - ---- - -### 0.5 O que é Terraform vs Manual vs Pipeline CI - -| Recurso | Gerenciado por | Repositório | -|---|---|---| -| VCN `vcn-oke` (10.110.0.0/16) + subnets + gateways | **Terraform** | `tf_oci_clusters/modules/network` | -| OKE clusters (x3) + node pools | **Terraform** | `tf_oci_clusters/modules/oke_cluster` | -| `api-gateway-mfe-dev` + deployments MFE | **Terraform** | `tf_oci_clusters/modules/api_gateway_mfe` | -| ArgoCD (Helm v7.3.0) em cada cluster | **Terraform** (null_resource) | `tf_oci_clusters/environments/dev/argocd.tf` | -| Observabilidade (alarms, log group, dashboards) | **Terraform** | `tf_oci_clusters/modules/observability` | -| Compartments `cmp-dev-nexus` / `cmp-dev-inv` | **Terraform** (flags `create_*=false` = não recria) | `tf_oci_clusters` | -| `VCN-DEV` (10.6.0.0/16) + subnets + gateways | **Manual** (OCI Console) | — | -| `api-gateway-nexus-dev` (PRIVATE) + deployments | **Manual** (OCI Console) | — | -| LB `Test_Crivo_Dev` (10.8.4.127) | **Manual** | — | -| DRG-Invista-Shared + attachments | **Manual** | — | -| DNS Cloudflare (*.invista.com.br) | **Manual** (API Cloudflare) | — | -| Object Storage buckets (mfe-*) | **Pipeline CI** (azure-pipelines.yml) | Repos dos MFEs | -| OKE Load Balancers (5x) | **OKE-managed** (K8s Service) | Apps no cluster | -| Kubeconfigs (`~/.kube/config-dev-*`) | **Terraform** (local-exec) | Gerado no apply | +> **Atualizado:** 2026-03-03 | **Responsável:** Tiago Ribeiro +> **Foco:** Compartment `cmp-dev-nexus` — o que existe, o que o Terraform sobe e o que se comunica com o quê. --- ## 1. Compartments -### Hierarquia - ``` invistacloud (root) └── cmp-top-invista - └── cmp-dev-inv ← compartment pai (local.compartment_id no Terraform) - └── cmp-dev-nexus ← clusters OKE, node pools, LBs + └── cmp-dev-inv (OCID: aaaaaaaa76x3...) ← compartment pai — rede, observabilidade + └── cmp-dev-nexus (OCID: aaaaaaaahycc62za...) ← clusters, API gateways, buckets MFE ``` -| Compartment | OCID | Uso | +| Compartment | OCID | Papel | |---|---|---| -| `cmp-dev-inv` | `ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a` | VCN, API Gateway, Object Storage, Observabilidade | -| `cmp-dev-nexus` | `ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma` | Clusters OKE, Node Pools, Load Balancers | +| `cmp-dev-inv` | `ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a` | Rede (`vcn-oke`), Observabilidade, Bastion | +| `cmp-dev-nexus` | `ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma` | Clusters OKE, API Gateways, Buckets MFE, tfstate | -> **Nota:** O Terraform usa `cmp-dev-inv` como compartment raiz do ambiente (`existing_compartment_id`) e `cmp-dev-nexus` como compartment dos clusters (`cluster_compartment_id_map`). +> **Regra no Terraform:** +> - `local.compartment_id` → `cmp-dev-inv` (variável `existing_compartment_id` no `terraform.ci.tfvars`) +> - `local.cluster_compartment_id` → `cmp-dev-nexus` (derivado de `cluster_compartment_id_map`) --- -## 2. OKE Clusters +## 2. O que existe em cmp-dev-nexus -### Clusters Ativos +### 2.1 Clusters OKE — Terraform -| # | Cluster | OCID (sufixo) | Versão K8s | Node Pool | Nodes | -|---|---|---|---|---|---| -| 1 | `cls-dev-nexus` | `…cobrewkvc3a` | v1.34.1 | `np-dev-1` | 3x VM.Standard.E4.Flex | -| 2 | `cls-dev-barramento` | `…cifn2eknv6q` | v1.34.1 | `np-dev-2` | 3x VM.Standard.E4.Flex | -| 3 | `cls-dev-observabilidade` | `…crszb62robq` | v1.34.1 | `np-dev-3` | 3x VM.Standard.E4.Flex | - -### Configuração dos Node Pools - -| Parâmetro | Valor | -|---|---| -| Shape | `VM.Standard.E4.Flex` | -| OCPUs | 2 | -| Memória | 16 GB | -| Nodes por pool | 3 (`node_pool_size_up = 3`) | -| Modo de escala | `up` (escala zero: `node_pool_size_down = 0`) | -| Autoscaler | Desabilitado | -| Pods CIDR | `10.244.0.0/16` | -| Services CIDR | `10.96.0.0/16` | - -### Worker Nodes (Compute Instances) - -| Instância | Cluster | Shape | Estado | -|---|---|---|---| -| `oke-cifn2eknv6q-*` (x3) | cls-dev-barramento | VM.Standard.E4.Flex | RUNNING | -| `oke-cobrewkvc3a-*` (x3) | cls-dev-nexus | VM.Standard.E4.Flex | RUNNING | -| `oke-crszb62robq-*` (x3) | cls-dev-observabilidade | VM.Standard.E4.Flex | RUNNING | - -### Kubeconfig - -Os kubeconfigs são gerados automaticamente pelo Terraform via `null_resource.kubeconfig`: - -``` -~/.kube/config-dev-1 → cls-dev-nexus -~/.kube/config-dev-2 → cls-dev-barramento -~/.kube/config-dev-3 → cls-dev-observabilidade -``` - -Gerar manualmente: -```bash -oci ce cluster create-kubeconfig \ - --cluster-id \ - --file ~/.kube/config-dev- \ - --token-version 2.0.0 -``` - ---- - -## 3. Rede - -### VCN - -| VCN | CIDR | Compartment | Gerenciada por | -|---|---|---|---| -| `vcn-oke` | `10.110.0.0/16` | `cmp-dev-inv` / OKE > DEV | Terraform (`tf_oci_clusters`) | -| `VCN-DEV` | `10.6.0.0/16` | `cmp-dev-inv` | Manual | - -### Subnets `vcn-oke` (10.110.0.0/16) - -| Subnet | CIDR | Tipo | Uso | -|---|---|---|---| -| `sbn-workers-1` | `10.110.0.0/20` | Pública | OKE worker nodes | -| `sbn-workers-2` | `10.110.16.0/20` | Pública | OKE worker nodes | -| `sbn-workers-3` | `10.110.32.0/20` | Pública | OKE worker nodes | -| `sbn-lb-1` | `10.110.128.0/20` | Pública | Load Balancers OKE + API Gateway MFE | -| `sbn-lb-2` | `10.110.144.0/20` | Pública | Load Balancers OKE | -| `sbn-api-gateway` | `10.110.192.0/20` | **Privada** | Criada pelo Terraform (disponível — não usada atualmente) | - -### Gateways de Rede - -| Gateway | Tipo | Uso | -|---|---|---| -| `igw-oke` | Internet Gateway | Egress público para workers e LBs | -| `nat-oke` | NAT Gateway | Egress privado para `sbn-api-gateway` | -| `sgw-oke` | Service Gateway | Acesso a serviços OCI (Object Storage, etc.) | -| DRG | Dynamic Routing Gateway | Cross-VCN: `vcn-oke` ↔ `VCN-DEV` | - ---- - -## 4. Load Balancers - -Todos os LBs são criados e gerenciados pelo OKE (via Services do tipo LoadBalancer no Kubernetes): - -| Display Name (ID OKE) | IP | Shape | Cluster | Criado em | +| Cluster | OCID (sufixo) | K8s | Node Pool | Nodes | |---|---|---|---|---| -| `35adee2d-…` | `10.110.133.131` | 100Mbps | cls-dev-barramento | 2026-01-26 | -| `b8344bb7-…` | `10.110.135.3` | 100Mbps | cls-dev-nexus | 2026-01-26 | -| `bc0548de-…` | `10.110.129.64` | 100Mbps | cls-dev-observabilidade | 2026-01-26 | -| `177c06f0-…` | `10.110.143.54` | 100Mbps | cls-dev-nexus | 2026-01-29 | -| `029cfee6-…` | `137.131.236.202` *(público)* | 100Mbps | cls-dev-nexus | 2026-02-09 | +| `cls-dev-nexus` | `…cobrewkvc3a` | v1.34.1 | `np-dev-1` | 3× VM.Standard.E4.Flex (2 OCPU / 16 GB) | +| `cls-dev-barramento` | `…cifn2eknv6q` | v1.34.1 | `np-dev-2` | 3× VM.Standard.E4.Flex | +| `cls-dev-observabilidade` | `…crszb62robq` | v1.34.1 | `np-dev-3` | 3× VM.Standard.E4.Flex | -> Os IPs privados (`10.110.x`) estão na subnet `sbn-lb-1` ou `sbn-lb-2`. -> O único IP público (`137.131.236.202`) pertence a um Service exposto externamente no `cls-dev-nexus`. +Workers usam subnets em **`cmp-dev-inv` / `vcn-oke`** (`sbn-workers-1/2/3`). O compartment dos workers é `cmp-dev-nexus`. ---- +### 2.2 Load Balancers OKE — OKE-managed -## 5. API Gateways +Criados automaticamente pelo Kubernetes (Services do tipo `LoadBalancer`). Ficam nas subnets `sbn-lb-1/2` da `vcn-oke`. -### `api-gateway-mfe-dev` — Terraform-managed +| IP | Visibilidade | Cluster | +|---|---|---| +| `10.110.133.131` | Privado | cls-dev-barramento | +| `10.110.135.3` | Privado | cls-dev-nexus | +| `10.110.129.64` | Privado | cls-dev-observabilidade | +| `10.110.143.54` | Privado | cls-dev-nexus | +| `137.131.236.202` | **Público** | cls-dev-nexus | + +### 2.3 API Gateway PUBLIC — Terraform (`api-gateway-dev`) + +Criado pelo módulo `modules/api_gateway_mfe`. Serve os arquivos estáticos dos MFEs via Object Storage. | Campo | Valor | |---|---| -| Nome | `api-gateway-mfe-dev` | -| Compartment | `cmp-dev-inv` | -| Tipo | PRIVATE | -| IP | 10.110.198.250 | -| Subnet | `sbn-api-gateway` (10.110.192.0/20) — vcn-oke | -| Gerenciado por | Terraform (`modules/api_gateway_mfe`) | -| OCID | `ocid1.apigateway.oc1.sa-saopaulo-1.amaaaaaasks3yliabdiquogy2pqyohas4wjopizv2xzgzrclmsvsh4x7ewea` | -| Hostname | `guhal72tzyekzchzamhhi3lvgi.apigateway.sa-saopaulo-1.oci.customer-oci.com` | +| Nome | `api-gateway-dev` | +| Tipo | **PUBLIC** | +| Compartment | `cmp-dev-nexus` | +| Subnet | `sbn-lb-1` (10.110.128.0/20) — vcn-oke | +| Módulo TF | `tf_oci_clusters/modules/api_gateway_mfe` | +| Hostname | *(gerado pelo pipeline — ver output `mfe_gateway_endpoint`)* | -**6 deployments configurados (um por MFE) — atualizado em 2026-02-25:** +**6 deployments (um por MFE):** -| MFE | Bucket | Rotas | DNS futuro | -|---|---|---|---| -| `mfe-shell` | `mfe-shell-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-shell-dev.invista.com.br | -| `mfe-auth` | `mfe-auth-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-auth-dev.invista.com.br | -| `mfe-user` | `mfe-user-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-user-dev.invista.com.br | -| `mfe-person` | `mfe-person-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-person-dev.invista.com.br | -| `mfe-formalization` | `mfe-formalization-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-formalization-dev.invista.com.br | -| `mfe-poc` | `mfe-poc-dev` | `GET /` → index.html · `GET /{path*}` → static | mfe-poc-dev.invista.com.br | +| Path prefix | Display name | Backend (Object Storage) | +|---|---|---| +| `/` | `deploy-mfe-auth-dev` | `mfe-auth-dev/o/{path}` | +| `/` | `deploy-mfe-user-dev` | `mfe-user-dev/o/{path}` | +| `/` | `deploy-mfe-person-dev` | `mfe-person-dev/o/{path}` | +| `/` | `deploy-mfe-poc-dev` | `mfe-poc-dev/o/{path}` | +| `/` | `deploy-mfe-shell-dev` | `mfe-shell-dev/o/{path}` | +| `/` | `deploy-mfe-formalization-dev` | `mfe-formalization-dev/o/{path}` | -> Todos os buckets usam namespace `grbb7qzeuoag` e `public-access-type=ObjectReadWithoutList`. +> Cada deployment responde a `GET /` (→ `index.html`) e `GET /{path*}` (→ arquivo estático). -### `api-gateway-nexus-dev` — Manual +### 2.4 API Gateway PRIVATE — Manual (`api-gateway-nexus-dev`) + +Serve o backend dos MSes. **Não gerenciado pelo Terraform.** | Campo | Valor | |---|---| | Nome | `api-gateway-nexus-dev` | -| Compartment | `cmp-dev-inv` | -| Subnet | `SBNT-DEV` (10.6.0.0/24) — VCN-DEV | -| Gerenciado por | Manual | -| Conectividade OKE | Via DRG (cross-VCN: VCN-DEV ↔ vcn-oke) | +| Tipo | **PRIVATE** | +| Compartment | `cmp-dev-nexus` | +| Subnet | `SBNT-DEV` (10.6.0.0/24) — **VCN-DEV** (manual) | +| Hostname | `dnqe6ufrommkqxtfp7k2ehrbmu.apigateway.sa-saopaulo-1.oci.customer-oci.com` | +| Gerenciado por | **Manual** (OCI Console) | -> **Pendência:** Migrar `api-gateway-nexus-dev` para `sbn-api-gateway` na `vcn-oke` (ver `OCI-NETWORK-ANALYSIS.md` — Opção A). +**11 deployments ativos:** + +| Path | Serviço | +|---|---| +| `/api/auth` | ms-auth | +| `/api/user` | ms-user | +| `/api/user-external` | ms-user (externo) | +| `/api/user-internal` | ms-user (interno) | +| `/api/person` | ms-person | +| `/api/sso` | ms-auth-sso | +| `/api/role` | ms-role | +| `/api/poc` | ms-poc | +| `/api/cache` | ms-cache | +| `/api/commercial-manager` | ms-commercial-manager | +| `/mfe-shell` | mfe-shell (legado — substituído pelo `api-gateway-dev`) | + +### 2.5 Object Storage — Buckets MFE — Terraform + +Criados pelo módulo `api_gateway_mfe` junto com o gateway. Namespace: `grbb7qzeuoag`. + +| Bucket | Acesso | Conteúdo | +|---|---|---| +| `mfe-auth-dev` | ObjectReadWithoutList | Build Angular do mfe-auth | +| `mfe-user-dev` | ObjectReadWithoutList | Build Angular do mfe-user | +| `mfe-person-dev` | ObjectReadWithoutList | Build Angular do mfe-person | +| `mfe-poc-dev` | ObjectReadWithoutList | Build Angular do mfe-poc | +| `mfe-shell-dev` | ObjectReadWithoutList | Build Angular do mfe-shell | +| `mfe-formalization-dev` | ObjectReadWithoutList | Build Angular do mfe-formalization | + +> O conteúdo dos buckets é publicado pelas **pipelines dos repos de MFE** (branch `devops`), usando o template `azure-pipelines-templates/mfe/deploy-mfe-oci.yaml`. + +### 2.6 Object Storage — Buckets Manuais + +| Bucket | Uso | +|---|---| +| `tfstate-gqysee` | Terraform remote state | +| `tfstate-inidhr` | Terraform remote state | +| `tfstate-terraform` | Terraform remote state principal | +| `invista-inventcloud-bucket3` | Uso geral | --- -## 6. Object Storage +## 3. Rede — O que cmp-dev-nexus usa -### Buckets em `cmp-dev-nexus` +Os recursos de rede ficam em **`cmp-dev-inv`** mas os clusters e gateways de `cmp-dev-nexus` se comunicam através delas. -| Bucket | Uso | Criado em | -|---|---|---| -| `invista-inventcloud-bucket3` | Uso geral | 2026-02-06 | -| `tfstate-gqysee` | Terraform remote state | 2025-12-30 | -| `tfstate-inidhr` | Terraform remote state | 2025-12-30 | -| `tfstate-terraform` | Terraform remote state | 2025-12-30 | +### 3.1 VCN `vcn-oke` — Terraform (em `cmp-dev-inv`) -### Buckets em `cmp-dev-inv` — MFEs (Pipeline CI) - -| Bucket | MFE | Acesso | Criado por | +| Subnet | CIDR | Tipo | Usado por | |---|---|---|---| -| `mfe-shell-dev` | mfe-shell | ObjectReadWithoutList | Pipeline CI (branch devops) | -| `mfe-auth-dev` | mfe-auth | ObjectReadWithoutList | Pipeline CI (branch devops) | -| `mfe-user-dev` | mfe-user | ObjectReadWithoutList | Pipeline CI (branch devops) | -| `mfe-person-dev` | mfe-person | ObjectReadWithoutList | Pipeline CI (branch devops) | -| `mfe-formalization-dev` | mfe-formalization | ObjectReadWithoutList | Pipeline CI (branch devops) | -| `mfe-poc-dev` | mfe-poc | ObjectReadWithoutList | Pipeline CI (branch devops) | +| `sbn-workers-1` | `10.110.0.0/20` | Pública | Worker nodes (cls-dev-nexus) | +| `sbn-workers-2` | `10.110.16.0/20` | Pública | Worker nodes (cls-dev-barramento) | +| `sbn-workers-3` | `10.110.32.0/20` | Pública | Worker nodes (cls-dev-observabilidade) | +| `sbn-lb-1` | `10.110.128.0/20` | Pública | OKE LBs + **api-gateway-dev** (PUBLIC) | +| `sbn-lb-2` | `10.110.144.0/20` | Pública | OKE LBs | +| `sbn-api-gateway` | `10.110.192.0/20` | **Privada** | Disponível — não usada atualmente | -> **Namespace do Object Storage:** `grbb7qzeuoag` -> Template CI/CD: `azure-pipelines-templates/mfe/deploy-mfe-oci.yaml` +**Gateways de rede (vcn-oke):** ---- - -## 7. ArgoCD - -ArgoCD instalado em todos os 3 clusters via Helm pelo Terraform: - -| Parâmetro | Valor | -|---|---| -| Chart Version | `7.3.0` (argo/argo-cd) | -| Namespace | `argocd` | -| LB tipo | Interno (annotation `oci-load-balancer-internal=true`) | -| OIDC | OCI IDCS (integrado via outputs do módulo `identity`) | - -**URLs internas (somente acesso via VCN):** - -| Cluster | URL | -|---|---| -| `cls-dev-nexus` (1) | `https://argocd.dev-01.interno.invista.com.br` | -| `cls-dev-barramento` (2) | `https://argocd.dev-02.interno.invista.com.br` | -| `cls-dev-observabilidade` (3) | `https://argocd.dev-03.interno.invista.com.br` | - -**RBAC OCI IDCS:** - -| Grupo OCI | Role ArgoCD | -|---|---| -| `invista-oke-admin` | `admin` | -| `invista-oke-dev` | `readonly` | -| `invista-oke-readonly` | `readonly` | - ---- - -## 8. Observabilidade - -Gerenciada pelo módulo `modules/observability` em `cmp-dev-inv`: - -| Recurso | Tipo | Configuração | +| Recurso | Tipo | Função | |---|---|---| -| Alarmes OCI Monitoring | `oci_computeagent` | CPU > 90% (PT10M) → CRITICAL; CPU > 75% (PT15M) → WARNING | -| Log Group | OCI Logging | — | -| Dashboard | OCI Management Dashboard | Import de `dashboards/oke-observability-import.json` | +| `igw-oke` | Internet Gateway | Saída para internet (workers públicos, LBs, api-gateway) | +| `nat-oke` | NAT Gateway | Saída privada (sbn-api-gateway) | +| `sgw-oke` | Service Gateway | Acesso a OCI Object Storage (sem internet) | +| DRG | Dynamic Routing | Interconexão `vcn-oke` ↔ `VCN-DEV` | ---- - -## 9. Terraform — `tf_oci_clusters` - -### Repositório +### 3.2 VCN `VCN-DEV` — Manual (em `cmp-dev-inv`) | Campo | Valor | |---|---| -| Organização | Azure DevOps — CN-Squad | -| Projeto | Invista FIDC - Nexus | -| Repositório | `tf_oci_clusters` | +| CIDR | `10.6.0.0/16` | +| Subnet relevante | `SBNT-DEV` — `10.6.0.0/24` (usada pelo `api-gateway-nexus-dev`) | +| Conectividade | DRG ↔ `vcn-oke` (roteamento para OKE workers) | + +--- + +## 4. Diagrama de Comunicação + +``` +INTERNET + │ + ▼ [Cloudflare CNAME proxied] +api-gateway-dev (PUBLIC · sbn-lb-1 · vcn-oke · cmp-dev-nexus) + │ + ├── GET /mfe-*/index.html → Object Storage (mfe-*-dev buckets · cmp-dev-nexus) + └── GET /mfe-*/{path*} → Object Storage (arquivo estático) + +INTERNET + │ + ▼ [Cloudflare → LB Test_Crivo_Dev (VCN-Shared)] + │ DRG: VCN-Shared → VCN-DEV + ▼ +api-gateway-nexus-dev (PRIVATE · SBNT-DEV · VCN-DEV · cmp-dev-nexus) + │ DRG: VCN-DEV → vcn-oke + ▼ +OKE Load Balancers (sbn-lb-1/2 · vcn-oke · cmp-dev-nexus) + │ + ▼ +K8s Services / Ingress (cls-dev-nexus) + │ + ▼ +Pods (sbn-workers-1/2/3 · vcn-oke · cmp-dev-nexus) +``` + +--- + +## 5. Terraform vs Manual vs OKE-managed + +| Recurso | Gerenciado por | Onde criar/alterar | +|---|---|---| +| VCN `vcn-oke` + subnets + gateways + route tables | **Terraform** | `tf_oci_clusters/modules/network` | +| 3× OKE clusters + node pools (9 workers) | **Terraform** | `tf_oci_clusters/modules/oke_cluster` | +| `api-gateway-dev` (PUBLIC) + 6 deployments MFE | **Terraform** | `tf_oci_clusters/modules/api_gateway_mfe` | +| 6× buckets `mfe-*-dev` (Object Storage) | **Terraform** | `tf_oci_clusters/modules/api_gateway_mfe` | +| ArgoCD (Helm v7.3.0) nos 3 clusters | **Terraform** | `tf_oci_clusters/environments/dev/argocd.tf` | +| Kubeconfigs `~/.kube/config-dev-{1,2,3}` | **Terraform** (local-exec) | Gerados no `terraform apply` | +| Observabilidade (alarms CPU, log group, dashboard) | **Terraform** | `tf_oci_clusters/modules/observability` | +| `api-gateway-nexus-dev` (PRIVATE) + 11 deployments | **Manual** (OCI Console) | Console OCI | +| `VCN-DEV` (10.6.0.0/16) + SBNT-DEV | **Manual** | Console OCI | +| DRG-Invista-Shared + attachments | **Manual** | Console OCI | +| LB `Test_Crivo_Dev` (10.8.4.127, VCN-Shared) | **Manual** | Console OCI | +| DNS Cloudflare (`*.invista.com.br`) | **Manual** | Cloudflare Dashboard | +| Conteúdo dos buckets MFE (builds Angular) | **Pipeline CI** | Repos `mfe-*` branch `devops` | +| 5× OKE Load Balancers | **OKE-managed** | K8s YAML (Services) | +| Buckets `tfstate-*` | **Manual** | Console OCI (criados uma vez) | + +--- + +## 6. Terraform — Como executar + +### 6.1 Repositório + +| Campo | Valor | +|---|---| +| Azure DevOps | CN-Squad / Invista FIDC - Nexus | +| Repo | `tf_oci_clusters` | | Pipeline | `terraform-tf_oci_clusters` (ID 51) | | Variable Group | `oci-terraform` (ID 34) | -| Backend | Object Storage OCI (S3-compatible) — bucket `tfstate-*` em `cmp-dev-nexus` | +| Backend (remote state) | Object Storage OCI — bucket `tfstate-terraform` em `cmp-dev-nexus` | -### Estrutura de Arquivos +### 6.2 Estrutura de arquivos ``` tf_oci_clusters/ -├── environments/ -│ ├── dev/ -│ │ ├── main.tf # Clusters, rede, bastion, observabilidade -│ │ ├── api_gateway_mfe.tf # API Gateway MFE + deployments -│ │ ├── argocd.tf # ArgoCD Helm install + kubeconfig -│ │ ├── backend.tf # Remote state config -│ │ ├── providers.tf # OCI provider -│ │ ├── variables.tf # Todas as variáveis -│ │ └── terraform.ci.tfvars # Valores do ambiente DEV (pipeline CI) -│ ├── hml/ # Ambiente HML (estrutura similar) -│ └── prod/ # Ambiente PROD (estrutura similar) +├── environments/dev/ +│ ├── main.tf # Clusters OKE, rede, bastion, observabilidade +│ ├── api_gateway_mfe.tf # API Gateway PUBLIC + deployments + buckets MFE +│ ├── argocd.tf # ArgoCD Helm install + kubeconfig gerado +│ ├── backend.tf # Remote state (S3-compat Object Storage) +│ ├── providers.tf # OCI provider (região, tenancy, user, key) +│ ├── variables.tf # Declaração de todas as variáveis +│ └── terraform.ci.tfvars # Valores do ambiente DEV (usado pela pipeline) │ ├── modules/ -│ ├── oke_cluster/ # OKE cluster + node pool -│ │ ├── main.tf # oci_containerengine_cluster + node_pool -│ │ └── variables.tf -│ ├── network/ # VCN, subnets, gateways, route tables, security lists -│ │ ├── main.tf -│ │ └── variables.tf -│ ├── api_gateway_mfe/ # API Gateway PUBLIC para MFEs estáticos -│ │ ├── main.tf # oci_apigateway_gateway + deployments por MFE -│ │ └── variables.tf -│ ├── compartment/ # Criação de compartment -│ ├── observability/ # ONS + OCI Logging + Alarms + Dashboards -│ └── iam_service_accounts/ # IAM para service accounts +│ ├── network/ # VCN, subnets, IGW, NAT, SGW, route tables, security lists +│ ├── oke_cluster/ # OKE cluster + node pool +│ ├── api_gateway_mfe/ # API Gateway PUBLIC + buckets Object Storage + deployments +│ ├── observability/ # OCI Monitoring alarms, Log Group, dashboards +│ ├── compartment/ # Criação de compartment +│ ├── iam_domain/ # IAM Domain (OIDC/IDCS) +│ └── iam_service_accounts/ # IAM service accounts │ -├── compartments/ # Gerenciamento top-level de compartments -├── dns/ # DNS OCI -├── iam/ # IAM policies -├── identity/ # OIDC / IDCS (usado pelo ArgoCD) -├── argocd/ -│ ├── values.yaml # Helm values do ArgoCD -│ └── application-dev.yaml # ArgoCD Application manifest (GitOps) -└── dashboards/ - └── oke-observability-import.json +└── argocd/ + ├── values.yaml # Helm values do ArgoCD + └── application-dev.yaml # ArgoCD Application GitOps manifest ``` -### terraform.ci.tfvars DEV — Valores Principais +### 6.3 terraform.ci.tfvars DEV — Campos obrigatórios e o que significam ```hcl -env_name = "dev" -create_compartment = false -create_cluster_compartment = false # removido manualmente 2026-02-25 -existing_compartment_id = "ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a" # cmp-dev-inv +# ── Ambiente ──────────────────────────────────────────────── +env_name = "dev" # Sufixo em todos os recursos (ex: api-gateway-dev) +# ── Compartments (preencher com OCIDs do Console OCI) ─────── +create_compartment = false # cmp-dev-inv já existe — não recriar +create_cluster_compartment = false # cmp-dev-nexus já existe — não recriar +existing_compartment_id = "ocid1.compartment.oc1..aaaaaaaa76x3..." # cmp-dev-inv cluster_compartment_id_map = { - "1" = "ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma" # cmp-dev-nexus - "2" = "ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma" - "3" = "ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma" + "1" = "ocid1.compartment.oc1..aaaaaaaahycc62za..." # cmp-dev-nexus + "2" = "ocid1.compartment.oc1..aaaaaaaahycc62za..." + "3" = "ocid1.compartment.oc1..aaaaaaaahycc62za..." } +# ── Rede ──────────────────────────────────────────────────── +vcn_cidr = "10.110.0.0/16" # CIDR da vcn-oke + +# ── Clusters OKE ──────────────────────────────────────────── kubernetes_version = "v1.34.1" node_shape = "VM.Standard.E4.Flex" ocpus = 2 memory_in_gbs = 16 -vcn_cidr = "10.110.0.0/16" +node_pool_size_up = 3 # Workers ativos +node_pool_size_down = 0 # Workers no scale-down (desliga todos) +scale_mode = "up" # "up" = produtivo, "down" = econômico -scale_mode = "up" -node_pool_size_up = 3 -node_pool_size_down = 0 +# ── Bastion (debug/acesso SSH) ─────────────────────────────── +enable_bastion = true +admin_cidr = "SEU_IP_PUBLICO/32" # IP liberado para SSH no bastion +ssh_public_key_path = "../../config/ci_ssh_key.pub" -enable_bastion = true -admin_cidr = "187.65.249.125/32" -enable_api_gateway_mfe = true +# ── API Gateway MFE ───────────────────────────────────────── +enable_api_gateway_mfe = true +mfe_object_namespace = "grbb7qzeuoag" # namespace fixo do tenancy + +# ── Observabilidade ───────────────────────────────────────── +observability_enable_dashboards = true +observability_dashboard_import_file = "../../dashboards/oke-observability-import.json" ``` -### Pipeline CI/CD +### 6.4 Variáveis sensíveis — Variable Group `oci-terraform` (Azure DevOps) -``` -Push to main (tf_oci_clusters) - → Bootstrap (init + validate) - → Detect Changes (diff por environment) - → Plan (terraform plan -var-file=terraform.ci.tfvars) - → Aprovação Manual - → Apply (terraform apply) -``` +Estas variáveis **não ficam no tfvars** — são injetadas pela pipeline via Variable Group: ---- - -## 10. Fluxo de Dependências - -``` -tf_oci_clusters (pipeline ID 51) - │ - ├── module.network → VCN vcn-oke (10.110.0.0/16) - │ └── subnets, IGW, NAT, SGW, route tables, security lists - │ - ├── module.cluster[1,2,3] → cls-dev-nexus / cls-dev-barramento / cls-dev-observabilidade - │ └── node_pool → np-dev-1/2/3 (VM.Standard.E4.Flex 2cpu/16gb x3) - │ - ├── module.api_gateway_mfe → api-gateway-mfe-dev (PRIVATE, sbn-api-gateway, 10.110.198.250) - │ └── 6 deployments: mfe-shell/auth/user/person/formalization/poc → buckets mfe-*-dev - │ - ├── null_resource.kubeconfig → ~/.kube/config-dev-{1,2,3} - │ - ├── null_resource.argocd_setup → ArgoCD v7.3.0 em cada cluster - │ - └── module.observability → Alarms + Log Group + Dashboards -``` - ---- - -## 11. Por que Terraform — Importância e Comparativo com Console OCI - -### 11.1 O problema de provisionar manualmente - -Criar o ambiente DEV Nexus via OCI Console exige navegar por dezenas de telas, preencher formulários e decorar dependências entre recursos. Qualquer erro (subnet errada, CIDR conflitante, security list faltando uma porta) só aparece quando algo não funciona — e não existe histórico do que foi feito nem como desfazer de forma controlada. - -Exemplo real desse ambiente: as **8 VCNs orphans** encontradas em 2026-02-25 existiam porque clusters foram criados/destruídos manualmente sem deletar os recursos de rede. Resultado: 104 recursos abandonados consumindo cota sem nenhum registro. - ---- - -### 11.2 Comparativo: Console OCI vs Terraform - -#### Criar 1 cluster OKE completo (cluster + node pool + rede) - -| Etapa | Via Console OCI | Via Terraform | +| Variável | Descrição | De onde pegar | |---|---|---| -| Criar VCN | ~5 min (telas: VCN, CIDR, DNS) | `terraform apply` | -| Criar subnets (5x) | ~20 min (cada subnet: nome, CIDR, tipo, route table, security list) | já incluso no `apply` | -| Criar IGW + NAT + SGW | ~10 min (3 recursos separados) | já incluso | -| Criar route tables (3x) + regras | ~15 min | já incluso | -| Criar security lists (3x) + regras de portas | ~20 min | já incluso | -| Criar cluster OKE | ~10 min (escolher versão, VCN, subnets, endpoint) | já incluso | -| Criar node pool | ~10 min (shape, imagem, placement, SSH key) | já incluso | -| **Total (1 cluster)** | **~90 min · propenso a erros** | **~5 min · repetível** | -| **Total (3 clusters como no DEV)** | **~4–5 horas** | **~5 min (mesma execução)** | +| `TF_VAR_tenancy_ocid` | OCID do tenancy | Console OCI → Perfil → Tenancy | +| `TF_VAR_user_ocid` | OCID do usuário de serviço | Console OCI → IAM → Users | +| `TF_VAR_fingerprint` | Fingerprint da chave API | Console OCI → IAM → Users → API Keys | +| `TF_VAR_private_key_path` | Caminho da chave privada no agent | Arquivo no Azure DevOps agent | +| `TF_VAR_oci_region` | Região OCI | `sa-saopaulo-1` | +| `TF_VAR_compartment_parent_ocid` | OCID do compartment pai (cmp-top-invista) | Console OCI → IAM → Compartments | +| `OCI_CLI_KEY_FILE` | Caminho da chave para OCI CLI (kubeconfig) | Mesmo arquivo da chave privada | -#### Recriar o ambiente do zero (ex.: novo ambiente HML/PROD) +### 6.5 Fluxo da pipeline -| Cenário | Console OCI | Terraform | +``` +Push para main (tf_oci_clusters) + └─► Stage: Bootstrap + terraform init -backend-config=... + terraform validate + Stage: DEV — Plan + terraform plan -var-file=terraform.ci.tfvars -out=plan.tfplan + Stage: DEV — Approval ← aprovação manual no Azure DevOps + Stage: DEV — Apply + terraform apply plan.tfplan +``` + +### 6.6 O que o terraform apply cria no cmp-dev-nexus + +``` +api-gateway-dev (PUBLIC, sbn-lb-1, vcn-oke) + └── 6 deployments: deploy-mfe-{auth,user,person,poc,shell,formalization}-dev + +6 buckets Object Storage: + mfe-auth-dev / mfe-user-dev / mfe-person-dev + mfe-poc-dev / mfe-shell-dev / mfe-formalization-dev + (namespace: grbb7qzeuoag · acesso: ObjectReadWithoutList) + +3 clusters OKE (em cmp-dev-nexus, usando vcn-oke de cmp-dev-inv): + cls-dev-nexus → np-dev-1 (3× VM.Standard.E4.Flex) + cls-dev-barramento → np-dev-2 (3× VM.Standard.E4.Flex) + cls-dev-observabilidade → np-dev-3 (3× VM.Standard.E4.Flex) + +ArgoCD v7.3.0 em cada cluster (Helm, namespace argocd) +Kubeconfigs: ~/.kube/config-dev-{1,2,3} +``` + +--- + +## 7. URLs de acesso + +### 7.1 API Gateway PUBLIC (`api-gateway-dev`) — MFEs + +O hostname é gerado pelo OCI após o `terraform apply`. Ver output `mfe_gateway_endpoint` na pipeline. + +> Cada MFE tem um **deployment separado** mas todos compartilham o mesmo gateway. +> O path prefix é `/` para todos — o roteamento por MFE é feito via **DNS** (subdomínio diferente por MFE). + +| MFE | DNS (Cloudflare → CNAME → gateway) | Bucket | |---|---|---| -| Tempo estimado | 1–2 dias (com documentação detalhada) | 15–20 min (`cp -r environments/dev environments/staging` + ajuste de tfvars) | -| Risco de divergência entre ambientes | Alto — cada clique pode ser diferente | Zero — mesmos módulos, variáveis diferentes | -| Rastreabilidade | Nenhuma — "alguém clicou em alguma coisa" | Git blame, PR, histórico de apply | -| Rollback | Manual — deletar na ordem certa | `terraform destroy` ou reverter commit | +| Shell | `mfe-shell-dev-oci.invista.com.br` | `mfe-shell-dev` | +| Auth | `mfe-auth-dev-oci.invista.com.br` | `mfe-auth-dev` | +| User | `mfe-user-dev-oci.invista.com.br` | `mfe-user-dev` | +| Person | `mfe-person-dev-oci.invista.com.br` | `mfe-person-dev` | +| PoC | `mfe-poc-dev-oci.invista.com.br` | `mfe-poc-dev` | +| Formalization | `mfe-formalization-dev-oci.invista.com.br` | `mfe-formalization-dev` | ---- +> **DNS**: CNAME proxied no Cloudflare → hostname do `api-gateway-dev` (gerado pelo pipeline). +> Após cada `terraform apply` que recria o gateway, o CNAME precisa ser atualizado. -### 11.3 O que o Terraform garante nesse ambiente +### 7.2 API Gateway PRIVATE (`api-gateway-nexus-dev`) — Backend MS -``` -Um único comando: -terraform apply -var-file=terraform.ci.tfvars +Acessado via Cloudflare → LB Test_Crivo_Dev → DRG → VCN-DEV → gateway. -Cria/garante automaticamente: - ✅ 1 VCN (vcn-oke 10.110.0.0/16) - ✅ 6 subnets (workers x3, LB x2, api-gateway x1) - ✅ 3 gateways (IGW + NAT + SGW) - ✅ 3 route tables com regras corretas - ✅ 3 security lists com portas OKE (6443, 10250, NodePort, etc.) - ✅ 3 clusters OKE (cls-dev-nexus / barramento / observabilidade) - ✅ 3 node pools (np-dev-1/2/3 · VM.Standard.E4.Flex · 2cpu/16gb · 3 nodes) - ✅ ArgoCD v7.3.0 instalado via Helm nos 3 clusters - ✅ Kubeconfigs gerados em ~/.kube/config-dev-{1,2,3} - ✅ API Gateway MFE (api-gateway-mfe-dev, PRIVATE) + 6 deployments (mfe-shell/auth/user/person/formalization/poc) - ✅ Alarms de CPU (WARNING 75% / CRITICAL 90%) - ✅ Log Group + Dashboard de observabilidade OKE - - Total: ~47 recursos OCI · 1 comando · ~12 min de pipeline -``` - ---- - -### 11.4 Scale up / Scale down em segundos - -Um dos maiores benefícios práticos: **ligar e desligar os node pools** sem recriar os clusters. - -```bash -# Desligar workers (economizar custo fora do horário): -# terraform.ci.tfvars: -scale_mode = "down" # node_pool_size_down = 0 - -# Ligar workers: -scale_mode = "up" # node_pool_size_up = 3 -``` - -Via Console: editar cada node pool individualmente (3 clusters × 1 node pool = 3 operações manuais, ~15 min). -Via Terraform: alterar 1 linha no tfvars + push → pipeline aplica em todos os 3 clusters automaticamente. - ---- - -### 11.5 Infraestrutura como código = documentação viva - -O arquivo `terraform.ci.tfvars` documenta **exatamente** o estado atual do ambiente: - -```hcl -kubernetes_version = "v1.34.1" # versão do K8s nos 3 clusters -node_shape = "VM.Standard.E4.Flex" -ocpus = 2 # CPU por worker -memory_in_gbs = 16 # RAM por worker -vcn_cidr = "10.110.0.0/16" -node_pool_size_up = 3 # workers ativos -enable_bastion = true # bastion habilitado -admin_cidr = "187.65.249.125/32" # IP liberado para acesso admin -``` - -Qualquer pessoa com acesso ao repositório sabe exatamente o que está rodando — sem precisar abrir o Console OCI. - ---- - -### 11.6 Custo de não usar Terraform (lição aprendida) - -| Problema encontrado em 2026-02-25 | Causa | Se fosse Terraform | +| Path | Serviço | URL interna | |---|---|---| -| 2 compartments `cmp-dev-nexus` (um vazio, um ativo) | Ciclo anterior criou manualmente fora do state | Terraform teria gerenciado 1 único compartment | -| 8 VCNs orphans + 104 sub-recursos abandonados | Clusters destruídos via console sem destruir rede | `terraform destroy` teria removido tudo | -| VCN-DEV usada para API Gateway (arquitetura incorreta) | API Gateway criado manualmente na VCN errada | Terraform teria posto na subnet correta (`sbn-api-gateway`) | -| Sem rastreabilidade de quando/por quê recursos foram criados | Console não deixa histórico | Git commit com autor, data e motivo | +| `/api/auth` | ms-auth | `*.invista.com.br/api/auth` | +| `/api/user` | ms-user | `*.invista.com.br/api/user` | +| `/api/person` | ms-person | `*.invista.com.br/api/person` | +| `/api/sso` | ms-auth-sso | `*.invista.com.br/api/sso` | +| `/api/role` | ms-role | `*.invista.com.br/api/role` | +| `/api/poc` | ms-poc | `*.invista.com.br/api/poc` | +| `/api/cache` | ms-cache | `*.invista.com.br/api/cache` | +| `/api/commercial-manager` | ms-commercial-manager | `*.invista.com.br/api/commercial-manager` | +| `/api/user-external` | ms-user-external | `*.invista.com.br/api/user-external` | +| `/api/user-internal` | ms-user-internal | `*.invista.com.br/api/user-internal` | ---- +### 7.3 ArgoCD (somente via VPN/Bastion) -*Atualizado em: 2026-02-28* - ---- - -## Referências - -| Recurso | OCID / URL | +| Cluster | URL | |---|---| -| Compartment `cmp-dev-nexus` | `ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma` | +| `cls-dev-nexus` | `https://argocd.dev-01.interno.invista.com.br` | +| `cls-dev-barramento` | `https://argocd.dev-02.interno.invista.com.br` | +| `cls-dev-observabilidade` | `https://argocd.dev-03.interno.invista.com.br` | + +### 7.4 OKE público direto + +| Recurso | Endereço | +|---|---| +| OKE LB público (cls-dev-nexus) | `137.131.236.202` | + +--- + +## 8. O que é manual e precisa ser preenchido manualmente + +| Item | Onde preencher | Observação | +|---|---|---| +| `admin_cidr` no tfvars | Seu IP público `/32` | Mudar quando IP mudar | +| Variable Group `oci-terraform` no Azure DevOps | DevOps → Pipelines → Library | OCIDs, fingerprint, chave privada | +| DNS Cloudflare dos MFEs | Cloudflare Dashboard | CNAME → hostname do `api-gateway-dev` (output do pipeline) | +| `api-gateway-nexus-dev` deployments | OCI Console | Adicionar/remover MSes manualmente | +| Conteúdo dos buckets MFE | Pipeline MFE (branch `devops`) | Automático após push no repo do MFE | +| Kubeconfig local | `terraform apply` (automático) ou `oci ce cluster create-kubeconfig ...` | Precisa de OCI CLI configurado | + +--- + +## 9. Referências — OCIDs e Endpoints + +| Recurso | OCID / Valor | +|---|---| +| Tenancy | `ocid1.tenancy.oc1..aaaaaaaasks3yliaqansozrmkfwyi3z2bwlpx6yrd7mxnjukcgxazlqtxurq` | | Compartment `cmp-dev-inv` | `ocid1.compartment.oc1..aaaaaaaa76x3nykkjwvctpr6px34dysu3pbg7p62h2r65fegt7fvbrioll3a` | +| Compartment `cmp-dev-nexus` | `ocid1.compartment.oc1..aaaaaaaahycc62za6ikthlhauvarvbdixc7xpjjmcrame3cirhu2kz74ddma` | | VCN `vcn-oke` | `ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaasks3yliapqrmikfzagpgqohuzjqik3hx63w7r2uajiqv5krvxkda` | | VCN `VCN-DEV` | `ocid1.vcn.oc1.sa-saopaulo-1.amaaaaaasks3yliatoq6uvqqak3kax775ksd2jastvgsbiki7mgj6jzue6dq` | -| API Gateway MFE hostname | `guhal72tzyekzchzamhhi3lvgi.apigateway.sa-saopaulo-1.oci.customer-oci.com` | -| Repo Terraform | Azure DevOps — CN-Squad / Invista FIDC - Nexus / tf_oci_clusters | -| Região | `sa-saopaulo-1` | +| API Gateway `api-gateway-nexus-dev` | `ocid1.apigateway.oc1.sa-saopaulo-1.amaaaaaasks3yliabohvp4fqav5pansi57thnunkyons52idvpfjppyzugeq` | +| API Gateway `api-gateway-dev` | *(gerado pelo pipeline — ver output `mfe_gateway_endpoint`)* | | Object Storage Namespace | `grbb7qzeuoag` | - ---- - -*Atualizado em: 2026-02-28* +| Região | `sa-saopaulo-1` | +| Pipeline Terraform | ID 51 — `terraform-tf_oci_clusters` | +| Variable Group | ID 34 — `oci-terraform` |