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