Skip to main content
A Federação Multi-Cluster permite que um operator do ChatCLI enxergue além do próprio cluster. Você registra os outros clusters com uma ClusterRegistration; o operator verifica a saúde deles, correlaciona Issues novas com as Issues que estão rodando lá, marca cascatas de staging para produção e aplica uma política de remediação baseada no tier do seu próprio cluster.
A federação não requer um service mesh ou ferramentas externas. O operator se conecta diretamente a cada cluster registrado com um kubeconfig guardado num Secret.
A federação lê outros clusters; ela não os remedia. Detecção e remediação continuam locais: cada cluster que deve se curar sozinho roda o próprio operator (e a própria Instance do ChatCLI; só uma Instance por cluster dirige o AIOps). Pelo kubeconfig registrado o operator apenas lista nodes, namespaces, Issues e RemediationPlans, e atualiza Issues remotas quando as correlaciona.

Por que Federação Multi-Cluster?

Em ambientes de produção modernos, a infraestrutura raramente se limita a um único cluster:

Multi-Região

Clusters em us-east-1, eu-west-1 e ap-southeast-1 para latência e compliance regionais.

Multi-Ambiente

Staging, production e DR em clusters separados com diferentes políticas de segurança.

Multi-Tenant

Clusters dedicados por equipe ou produto com isolamento forte de workloads.
Sem federação, cada cluster é um silo. A AIOps perde a capacidade de:
  • Detectar que o mesmo problema afeta 5 clusters simultaneamente
  • Correlacionar um deploy em staging com uma falha em produção
  • Aplicar políticas de remediação diferenciadas por importância do cluster
  • Agregar a saúde dos clusters em uma visão global

ClusterRegistration CRD

A CRD ClusterRegistration é o ponto de entrada para adicionar clusters à federação. Crie-a no cluster onde o operator roda, em qualquer namespace; o Secret do kubeconfig precisa estar no mesmo namespace.

Especificação Completa

Campos do Spec

Campos do Status

Como a Federação Funciona

Kubeconfig e cache de clients

A cada reconcile o FederationReconciler lê data.kubeconfig do Secret indicado em kubeconfigSecretRef, no namespace da ClusterRegistration, monta um client do controller-runtime com ele e guarda esse client em cache pelo nome do registro. O cache é descartado quando um health check falha ou o registro é apagado, então um kubeconfig rotacionado é assumido depois do próximo health check com falha (ou de um restart do operator). A identidade do kubeconfig precisa, no cluster remoto: list em nodes e namespaces para o health check; list em issues e remediationplans (grupo platform.chatcli.io) para os contadores e a correlação; e update em issues para a correlação anotá-las.

Loop de Health Check

1

Listar Nodes

Lista os nodes remotos para verificar a conectividade, contá-los e ler a versão do kubelet do primeiro node.
2

Listar Namespaces

Lista os namespaces remotos e os conta.
3

Contar o trabalho de AIOps

Lista Issues e RemediationPlans remotos, quando essas CRDs existem lá, para preencher activeIssues e activeRemediations.
4

Atualizar Status

Grava connected, lastHealthCheck, kubernetesVersion, nodeCount, namespaceCount, activeIssues, activeRemediations e as conditions Connected/Degraded, atualiza o gauge chatcli_operator_federation_clusters_total e agenda o próximo ciclo após healthCheckInterval. Uma falha em qualquer passo anterior define connected: false, atualiza lastHealthCheck e registra a falha na condition Connected.

Correlação Cross-Cluster

Quando uma Issue é detectada, o IssueReconciler pede ao controller de federação que procure o mesmo problema em outros lugares. As duas verificações abaixo rodam só contra ClusterRegistrations connected cujo client do kubeconfig está em cache; sem registros elas custam duas listagens em cache e não mudam nada.

Elevação Automática de Severidade

O controller lista as Issues ativas (não terminais) com o mesmo signalType no cluster local e em cada cluster conectado. Quando elas abrangem 3 ou mais clusters (o local conta como um), toda Issue correspondente, local e remota, é anotada e elevada a critical:
Uma Issue elevada a critical também recebe platform.chatcli.io/elevated-severity: "true". Uma correlação mantém um id: quando chega uma Issue nova que casa e uma das Issues do grupo já traz um id de correlação, o grupo o reutiliza em vez de rerotular tudo, e affected-clusters é atualizado. O contador chatcli_operator_federation_cross_cluster_issues_total incrementa uma vez por id de correlação novo. Uma Issue que mudou por baixo do update (conflito) é pulada e não há nova tentativa; a próxima correlação do grupo a anota.
O id de correlação é uma annotation, então encontre as Issues relacionadas com:
GET /api/v1/federation/correlations lista as correlações a partir das Issues locais, uma entrada por id de correlação, com correlationId, issue, namespace, severity, signalType, correlatedClusters (de affected-clusters), elevated (de elevated-severity) e cascade. Ele também lê as chaves antigas platform.chatcli.io/correlation-id / correlated-clusters, então Issues anotadas com elas continuam aparecendo.

Detecção de Cascata

A detecção de cascata marca uma Issue recém-detectada cujo recurso (mesmo nome) já falhou antes num cluster de staging: o mesmo problema está rolando pelos ambientes.

Staging para Produção

A verificação precisa de pelo menos um registro conectado com environment: staging e um com environment: prod. Ela roda para toda Issue que o operator local detecta (o environment do próprio cluster local não é consultado); para essa Issue, o controller lista as Issues de cada cluster de staging e procura uma num recurso com o mesmo nome cujo detectedAt seja anterior ao da Issue local. A primeira correspondência anota a Issue local:
e incrementa chatcli_operator_federation_cascade_detected_total.
A annotation é todo o efeito: severidade, notificações e o prompt da IA não mudam por causa de uma cascata. Roteie a partir dela numa NotificationPolicy ou num filtro do dashboard se uma cascata deve acionar diferente.

Agregação de Status Global

Não existe CRD de status da federação. A visão agregada é calculada sob demanda pela API REST do operator a partir das ClusterRegistrations e das Issues locais:

Política de Remediação por Tier

Cada cluster tem uma política de remediação baseada no tier da sua ClusterRegistration, que controla quanta autonomia o operator rodando naquele cluster concede antes de o Motor de Decisão avaliar a confiança.

Definição de Políticas

Fiação

Diga ao operator qual registro é o seu próprio cluster:
ou CHATCLI_OPERATOR_CLUSTER_NAME no Deployment. O operator procura esse valor entre as ClusterRegistrations do seu próprio cluster (qualquer namespace), comparando com metadata.name ou spec.displayName, então registre também o cluster local; só o tier é lido, então a barreira funciona mesmo enquanto esse registro não está connected. Se nenhum registro corresponder, o tier é desconhecido e a barreira falha fechada: todo plano que chega a ela espera aprovação manual sob a política sintética cluster-tier, com o motivo Cluster name "<name>" (CHATCLI_OPERATOR_CLUSTER_NAME) is not registered: ... no plano, até o registro existir. Se as ClusterRegistrations não puderem ser listadas, o plano continua Pending e o reconcile é tentado de novo. Vazio (o padrão) desliga a barreira por tier. Com ele definido, todo plano que chega a Pending e não foi segurado por uma ApprovalPolicy é comparado com a tabela: quando o tier diz “manual”, o plano espera em WaitingApproval sob a política sintética cluster-tier (um aprovador, timeout de 30 minutos, decidido como qualquer ApprovalRequest) e suas annotations carregam decision-mode: approval e o motivo, por exemplo Cluster prod-us-east-1 tier policy "manual" requires approval for high severity.
A barreira por tier roda antes do Motor de Decisão e independe dele: um plano que o tier segura não é avaliado por confiança, e um plano que o tier libera ainda passa pelo motor quando ele está habilitado.

Exemplos YAML

Registrar um Cluster de Produção

Registrar um Cluster de Staging

Setup Multi-Região Completo

Monitoramento da Federação

Métricas Prometheus

Servidas na porta de métricas do operator (8080, /metrics):
Os três estados são exclusivos: degraded é um cluster que responde ao health check com alguns nodes não Ready; no gauge ele não conta como connected (o connectedClusters da REST o inclui).

Dashboards Recomendados

Alertas Recomendados

Arquitetura de Rede

O operator precisa de conectividade de rede para o API server de cada cluster registrado. Em ambientes com rede restrita, considere usar um bastion host ou VPN dedicada para o tráfego de gerenciamento.

Próximos Passos

Motor de Decisão

Entenda como a confiança é calculada e como ela se combina com a barreira por tier.

Chaos Engineering

Execute experimentos de chaos controlados para validar a remediação.

Auditoria e Compliance

Audit trail de Issues, aprovações e remediações.

AIOps Platform

Retorne à visão geral da plataforma AIOps.