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.
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.
- 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 CRDClusterRegistration é 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 ClusterRegistrationsconnected 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 mesmosignalType 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:
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 comenvironment: 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:
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:- kubectl
- API REST
Política de Remediação por Tier
Cada cluster tem uma política de remediação baseada notier 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: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
Grafana Dashboard: Federation Overview
Grafana Dashboard: Federation Overview
Alertas Recomendados
Arquitetura de Rede
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.