Os serviços multicluster (MCS) permitem que pods em um cluster Kubernetes acessem Services executados em outro cluster sem criar balanceadores de carga. Use o MCS quando precisar:
Isolar cargas de trabalho entre clusters e manter o compartilhamento de services internos
Implantar um Service em vários clusters para garantir alta disponibilidade e balanceamento de carga entre clusters
Conectar clusters em VPCs distintas sem expor Services por endpoints públicos
Conceitos principais
|
Termo |
Descrição |
Criado por |
|
ServiceExport |
Recurso personalizado criado no cluster provedor para expor um Service a outros clusters. |
Usuário |
|
ServiceImport |
Recurso personalizado que representa um Service multicluster no cluster consumidor. |
Usuário |
|
Clusterset |
Conjunto de clusters que compartilham Services pelo MCS. Cada cluster pode atuar como provedor de serviços, consumidor de serviços ou ambos. |
— |
|
Provedor de serviços |
Cluster que exporta um Service via ServiceExport. |
— |
|
Consumidor de serviços |
Cluster que importa e acessa um Service exportado via ServiceImport. |
— |
Arquitetura
O recurso MCS utiliza uma instância do ACK One Fleet para coordenar os objetos ServiceExport e ServiceImport nos clusters associados do Container Service for Kubernetes (ACK).
O diagrama mostra duas conexões:
Conexão 1 — A instância do ACK One Fleet gerencia o ServiceExport e o ServiceImport nos clusters ACK associados. Crie um ServiceExport no cluster provedor (ACK Cluster 1) e um ServiceImport no cluster consumidor (ACK Cluster 2).
Conexão 2 — Os dados fluem diretamente entre os clusters. Após exportar o Service 1 do ACK Cluster 1 e importá-lo no ACK Cluster 2, os pods no ACK Cluster 2 podem acessar o Service 1.
Funcionamento
O diagrama a seguir mostra o fluxo de tráfego entre os clusters.
Crie um ServiceExport no ACK Cluster 1 (provedor) e um ServiceImport no ACK Cluster 2 (consumidor).
O ACK One Fleet cria um Service chamado
amc-<service-name>no ACK Cluster 2 e sincroniza os endereços IP dos pods do ACK Cluster 1 com seu backend.-
Os pods no ACK Cluster 2 podem acessar o Service 1 usando um dos seguintes formatos de nome de domínio:
Formato
Exemplo
amc-<service-name>.<provider-namespace>amc-Service1.provider-ns<service-name>.<provider-namespace>.svc.clusterset.localService1.provider-ns.svc.clusterset.local
Casos de uso
Acessar um Service de outro cluster
Implante o Service no ACK Cluster 1 e crie um ServiceExport. Em seguida, crie um ServiceImport no ACK Cluster 2. Assim, os pods no ACK Cluster 2 poderão acessar o Service via DNS. O tráfego é balanceado entre os pods de backend no ACK Cluster 1, e a quantidade de pods escala dinamicamente.
Acessar um Service implantado em vários clusters
Implante o mesmo Service em múltiplos clusters para obter alta disponibilidade. Quando um pod acessar o Service, o tráfego será distribuído entre os pods de todos os clusters participantes.
Requisitos de rede
O tráfego entre pods deve fluir diretamente entre os clusters para que o MCS funcione. Antes de habilitar o MCS, verifique se os três requisitos de rede a seguir foram atendidos:
|
Requisito |
Importância |
|
Se houver várias virtual private clouds (VPCs), os blocos CIDR das VPCs não devem se sobrepor, e todas as VPCs precisam estar conectadas via Cloud Enterprise Network (CEN). |
Blocos CIDR sobrepostos causam conflitos de roteamento; a CEN fornece o caminho de rede entre VPCs. |
|
Os blocos CIDR dos pods não podem se sobrepor entre os clusters. Os grupos de segurança dos pools de nós devem permitir mutuamente o tráfego entre os blocos CIDR dos pods. |
O roteamento direto entre pods exige endereços exclusivos e regras de grupo de segurança abertas. |
|
Os blocos CIDR dos pods não devem coincidir com os blocos CIDR dos Services em nenhum cluster. |
A sobreposição entre blocos CIDR de pods e Services interrompe a descoberta de Services baseada em DNS entre clusters. |
Para planejar a rede no nível do cluster, consulte Planejar a rede de um cluster ACK.
Limitações
A versão do Kubernetes de todos os clusters associados deve ser 1,22 ou superior.