infracloud/invista/nexus/OCI-DEV-NEXUS.md

19 KiB
Raw Blame History

OCI — Ambiente DEV Nexus (cmp-dev-nexus)

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

invistacloud (root)
└── cmp-top-invista
    └── cmp-dev-inv   (OCID: aaaaaaaa76x3...)   ← compartment pai — rede, observabilidade
        └── cmp-dev-nexus  (OCID: aaaaaaaahycc62za...)  ← clusters, API gateways, buckets MFE
Compartment OCID Papel
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

Regra no Terraform:

  • local.compartment_idcmp-dev-inv (variável existing_compartment_id no terraform.ci.tfvars)
  • local.cluster_compartment_idcmp-dev-nexus (derivado de cluster_compartment_id_map)

2. O que existe em cmp-dev-nexus

2.1 Clusters OKE — Terraform

Cluster OCID (sufixo) K8s Node Pool Nodes
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

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

Criados automaticamente pelo Kubernetes (Services do tipo LoadBalancer). Ficam nas subnets sbn-lb-1/2 da vcn-oke.

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-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 (um por MFE):

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}

Cada deployment responde a GET / (→ index.html) e GET /{path*} (→ arquivo estático).

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
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)

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

3. Rede — O que cmp-dev-nexus usa

Os recursos de rede ficam em cmp-dev-inv mas os clusters e gateways de cmp-dev-nexus se comunicam através delas.

3.1 VCN vcn-oke — Terraform (em cmp-dev-inv)

Subnet CIDR Tipo Usado por
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

Gateways de rede (vcn-oke):

Recurso Tipo Função
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-okeVCN-DEV

3.2 VCN VCN-DEV — Manual (em cmp-dev-inv)

Campo Valor
CIDR 10.6.0.0/16
Subnet relevante SBNT-DEV10.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 (remote state) Object Storage OCI — bucket tfstate-terraform em cmp-dev-nexus

6.2 Estrutura de arquivos

tf_oci_clusters/
├── 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/
│   ├── 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
│
└── argocd/
    ├── values.yaml            # Helm values do ArgoCD
    └── application-dev.yaml   # ArgoCD Application GitOps manifest

6.3 terraform.ci.tfvars DEV — Campos obrigatórios e o que significam

# ── 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..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
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

# ── 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"

# ── 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"

6.4 Variáveis sensíveis — Variable Group oci-terraform (Azure DevOps)

Estas variáveis não ficam no tfvars — são injetadas pela pipeline via Variable Group:

Variável Descrição De onde pegar
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

6.5 Fluxo da pipeline

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
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.

7.2 API Gateway PRIVATE (api-gateway-nexus-dev) — Backend MS

Acessado via Cloudflare → LB Test_Crivo_Dev → DRG → VCN-DEV → gateway.

Path Serviço URL interna
/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)

Cluster URL
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 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
Região sa-saopaulo-1
Pipeline Terraform ID 51 — terraform-tf_oci_clusters
Variable Group ID 34 — oci-terraform