Pré-requisitos
- Cluster Kubernetes 1.25+
- Helm 3.x instalado
- Prometheus Operator (para ServiceMonitor)
- Grafana (para dashboards)
- Pelo menos uma API key de LLM (OpenAI, Claude, Google AI)
1. Instalar o Operator
1
Instalar Operator via Helm (CRDs + RBAC + Controllers + Dashboard)
2
Verificar CRDs instalados
3
Criar Secret com API Keys
2. Criar Instância ChatCLI
Secret TLS: SANs e CA corretos
Este é o passo onde a maioria das instalações quebra silenciosamente. O Instance CR referenciasecretName: chatcli-tls, mas o Secret precisa ser gerado com dois cuidados que o openssl req -x509 padrão não faz.
Gerar o cert com subjectAltName
Sem SANs cobrindo o nome DNS usado pelo operator para dialar o gRPC, o handshake falha com:
openssl.cnf explícito:
Incluir ca.crt no Secret
Cert self-signed é seu próprio CA. Se o Secret tiver apenas tls.crt e tls.key, o operator vai conectar mas cair em:
WatcherBridge lê automaticamente a chave ca.crt do Secret referenciado pelo Instance e usa como trust root — por isso o Secret precisa ter as três chaves:
E se o cert for emitido por cert-manager ou ACM?
O §2.1 acima cobre o caso self-signed gerado na mão, que é o mais frágil. Com cert-manager ou AWS ACM o setup simplifica, mas cada emissor tem pegadinha própria:
Notas importantes:
-
Cert publicamente confiável → trust já existe. O código do operator (
grpc_client.go) só anexaRootCAsquando há CA customizado; sem ele, Go usa o bundleca-certificatesdo container. Por isso Let’s Encrypt e ACM Public “funcionam sem fazer nada” no lado CA — mas ospec.server.addresstem que ser o FQDN público, não o Service interno, ou o SAN não bate. -
cert-manager com CA interno é o caminho mais limpo em K8s. O
CertificateCR abaixo emite tudo pronto para oWatcherBridgeauto-trust — zero openssl manual:ComCertificate.issuerRef.kind: CA, o cert-manager automaticamente incluica.crtno Secret gerado — oWatcherBridgelê direto, sem configuração extra. - ACM Public não serve para gRPC pod-a-pod. A chave privada não é exportável; use somente quando TLS termina no ALB/NLB e o operator dialar o endpoint público.
-
ACM Private CA — exporte o bundle da Private CA (
aws acm-pca get-certificate-authority-certificate) e inclua comoca.crtno Secret. Dali em diante segue o caminho auto-trust.
2.2 Vincular Repositórios de Código (Opcional)
Vincule os repositórios de código das aplicações monitoradas para diagnóstico code-aware. A IA receberá contexto de commits recentes, trechos de código de stack traces e arquivos de configuração.3. Configurar Notificações
4. Configurar Escalação
5. Definir SLOs
6. Definir SLAs
7. Configurar Aprovações
8. Instalar Grafana Dashboards
9. Validar com Chaos Engineering
1
Executar em DryRun
2
Verificar resultado
3
Executar de verdade (após validação)
Edite
dryRun: false e reaplique.10. Configurar API Keys do Dashboard
11. Acessar o Dashboard
- Overview com stats em tempo real
- Incidents com filtros e ações (acknowledge, snooze)
- SLOs com error budget e burn rates
- Approvals pendentes
- PostMortems com timeline
- Clusters federados
- Audit log pesquisável
11.1 Expor o Dashboard via Ingress (alternativa ao port-forward)
Para expor o dashboard fora do cluster, crie um Ingress apontando para o Service do operator. Quando monta-se sob sub-path, orewrite-target com grupo de captura é obrigatório — os assets estáticos do dashboard são servidos de / e retornariam 404 sem isso:
12. Troubleshooting comum
Checklist de Produção
- Operator instalado com 17 CRDs
- Instance criada com TLS e auth
- Secret
chatcli-tlscontémtls.crt,tls.keyeca.crt(self-signed:ca.crt=tls.crt) -
tls.crtpossui SANs para<instance>.<ns>.svc.cluster.local,<instance>.<ns>.svce<instance> -
spec.server.addressno Instance bate com uma das SANs do cert - Logs do operator mostram
Connected to Instancesem errosx509:até ~30s após Instance ficarReady - Watcher monitorando deployments alvo
- NotificationPolicy com Slack + PagerDuty
- EscalationPolicy L1 - L2 - L3
- SLOs com burn rate alerting (Google SRE model)
- SLAs com response/resolution time por severity
- ApprovalPolicy com auto/quorum para produção
- Grafana dashboards instalados
- Chaos experiment validado em dry-run
- API Keys do operator configuradas (ConfigMap chatcli-operator-config)
- Web Dashboard acessível
- REST API com autenticação configurada (header X-API-Key)