Skip to content

Certificados SSL/TLS

Todos os certificados são gerenciados automaticamente pelo cert-manager v1.19.1 com Let's Encrypt.

Arquitetura

flowchart LR
    subgraph k8s["Cluster Kubernetes"]
        CM[cert-manager]
        CI_PRD[ClusterIssuer<br/>le-prd]
        CI_STG[ClusterIssuer<br/>le-stg]
        WH[webhook-oci v1.4.1]
        CERT[Certificate]
        SEC[TLS Secret]
    end

    subgraph ext["Externos"]
        LE[Let's Encrypt<br/>ACME]
        DNS[OCI DNS<br/>nox.app.br]
    end

    CM --> CI_PRD
    CM --> CI_STG
    CI_PRD -->|HTTP-01| LE
    CI_PRD -->|DNS-01| WH
    WH -->|TXT record| DNS
    DNS -->|Validação| LE
    LE -->|Certificado| CERT
    CERT --> SEC

ClusterIssuers

Dois ClusterIssuers estão configurados em todos os clusters:

Nome Servidor ACME Uso
le-prd acme-v02.api.letsencrypt.org Produção — certificados válidos
le-stg acme-staging-v02.api.letsencrypt.org Staging — testes sem rate limit

O issuer padrão é le-prd, configurado via ingress shim do cert-manager:

yaml ingressShim: defaultIssuerName: le-prd defaultIssuerKind: ClusterIssuer defaultIssuerGroup: cert-manager.io

Contato ACME: devops-bot@noxtec.com.br

Solvers

Cada ClusterIssuer possui dois solvers:

HTTP-01 (Padrão)

Valida domínio via HTTP challenge usando Ingress NGINX:

yaml http01: ingress: ingressClassName: nginx

Usado para a maioria dos certificados onde o domínio resolve para o cluster.

DNS-01 (OCI Webhook)

Valida domínio via registro TXT no OCI DNS. Configurado apenas para a zona nox.app.br:

yaml dns01: cnameStrategy: Follow webhook: groupName: nox.app.br solverName: oci

O webhook cert-manager-webhook-oci (v1.4.1) cria automaticamente os registros TXT no OCI DNS para validação ACME.

Permissões IAM — Os workers OKE possuem policy para gerenciar DNS:

Allow dynamic-group oke-workers-{suffix} to use dns-zones in compartment id {compartment} Allow dynamic-group oke-workers-{suffix} to manage dns-record in compartment id {compartment}

Nameservers recursivos

O cert-manager está configurado com --dns01-recursive-nameservers-only usando 8.8.8.8:53 e 1.1.1.1:53 para evitar problemas com cache DNS.

Como os Certificados são Emitidos

Cada aplicação solicita seu certificado via HTTPRoute/Gateway API ou Ingress annotations.

No estado atual do pipeline existem dois padrões:

  • aplicações tenant-scoped usando o Gateway compartilhado do Istio
  • Kiali usando NGINX Ingress com certificado dedicado

Padrão de Domínio

{namespace}.nox.app.br

Onde namespace é o nome do tenant (ex: tre.nox.app.br, cmd-prd.nox.app.br).

Padrão nos Charts

Todos os Helm charts seguem o mesmo padrão:

yaml annotations: cert-manager.io/cluster-issuer: "le-prd" tls: - secretName: "{{ .Release.Namespace }}.{{ .Values.domain }}-tls" hosts: - "{{ .Release.Namespace }}.{{ .Values.domain }}"

Resultado por tenant:

Tenant Host Secret TLS
tre tre.nox.app.br tre.nox.app.br-tls
cmd-prd cmd-prd.nox.app.br cmd-prd.nox.app.br-tls
afpes afpes.nox.app.br afpes.nox.app.br-tls

Certificados por tenant, não wildcard

O sistema emite um certificado por tenant (não usa wildcard *.nox.app.br). Cada namespace solicita seu próprio certificado para seu subdomínio.

Exceção do Gateway do Istio

O módulo de Istio também trabalha com um listener wildcard e um secret ${DOMAIN}-tls no Gateway compartilhado. O comportamento do Gateway, da publicação DNS e do uso de lb_publlic_ip está documentado em Networking & Service Mesh > Istio & Gateway API.

Ferramentas de Infraestrutura

Os serviços do cluster TOOLS também usam le-prd:

Serviço Domínio
ArgoCD Via resource Certificate
SonarQube Via ingress annotation
Sentry Via ingress annotation
SigNoz Via ingress annotation

Renovação

O cert-manager gerencia a renovação automaticamente:

  • Certificados Let's Encrypt têm validade de 90 dias
  • Renovação automática inicia 30 dias antes da expiração
  • Nenhuma configuração manual necessária

Configuração por Ambiente

Todos os 3 clusters (tools, hml, nox) compartilham a mesma configuração:

Parâmetro Valor
cert-manager v1.19.1
webhook-oci v1.4.1
DNS zone nox.app.br
OCI region sa-saopaulo-1
Issuer padrão le-prd
Gateway API Habilitado

Troubleshooting

Verificar status de certificados

```bash

Listar todos os certificados

kubectl get certificates -A

Verificar detalhes de um certificado

kubectl describe certificate tre.nox.app.br-tls -n tre

Verificar orders pendentes

kubectl get orders -A

Verificar challenges

kubectl get challenges -A ```

Problemas comuns

Problema Causa provável Solução
Certificate stuck em False DNS-01 challenge falhando Verificar permissões IAM do webhook-oci
Order pendente > 10min ACME rate limit Usar le-stg para testes
TLS secret não criado ClusterIssuer não encontrado Verificar se cert-manager está instalado
Challenge falhando com timeout Nameserver não propagou Aguardar propagação DNS (até 5 min)