O Cloud Controller Manager (CCM) permite associar uma instância existente do Server Load Balancer (SLB) a Services em um ou mais clusters ACK e a endpoints externos a esses clusters. Ao utilizar uma única instância de SLB como ponto de entrada unificado, você evita provisionar um balanceador de carga separado para cada cluster — o que é útil quando há necessidade de recuperação de desastres, alta disponibilidade ou isolamento de segurança entre clusters.
Este tópico aborda dois cenários:
Cenário 1: Distribuir tráfego entre um Service dentro do cluster e um endpoint externo (por exemplo, uma instância do Elastic Compute Service (ECS)).
Cenário 2: Distribuir tráfego entre Services em diferentes clusters ACK.
Pré-requisitos
Antes de começar, verifique se você possui:
Uma instância do Classic Load Balancer (CLB) ou uma instância do Network Load Balancer (NLB) criada na mesma região do seu cluster ACK
-
O Cloud Controller Manager instalado no cluster, na versão necessária (para atualizar, consulte Gerenciar componentes):
Instâncias CLB: v2.0.1 ou posterior
Instâncias NLB: v2.9.1 ou posterior
Um cliente kubectl conectado ao cluster ACK (consulte Obter o arquivo kubeconfig de um cluster e usar kubectl para conectar-se ao cluster)
Cenário 1: Distribuir tráfego para um Service do cluster e um endpoint externo
Associe um Service dentro do cluster e um endpoint externo à mesma instância de SLB. A instância de SLB roteia o tráfego para ambos. Durante o dimensionamento dos pods, o sistema os adiciona ou remove automaticamente do grupo de servidores virtuais sem afetar o endpoint externo.
Etapa 1: Obter o ID da instância de SLB
Faça login no console do CLB ou no console do NLB e anote o ID da sua instância de SLB existente.
Etapa 2: Criar um Service usando a instância de SLB existente
Usar o console do ACK
No console do ACK, crie um Service com as seguintes configurações:
Defina Service Type como SLB.
Selecione Use Existing Resource e escolha a instância de SLB na lista suspensa.
Marque a opção Overwrite Existing Listeners.
Usar kubectl
Adicione as seguintes annotations ao manifesto do seu Service:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: <LB_ID> # The ID of the existing SLB instance.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true" # Set to true so CCM automatically creates listeners and vServer groups.
labels:
#...
name: #...
spec:
#...
Após a criação do Service, o CCM cria um grupo de servidores virtuais e um listener que escuta na porta do Service para a instância de SLB.
Etapa 3: Adicionar o endpoint externo ao grupo de servidores virtuais
Acesse o console do CLB ou o console do NLB e adicione seu endpoint externo (por exemplo, uma instância ECS) ao grupo de servidores virtuais criado pelo CCM. Para obter instruções, consulte Criar e gerenciar um grupo de servidores virtuais do CLB e Criar e gerenciar um grupo de servidores virtuais.
Depois de adicionar o endpoint externo, tanto os pods do cluster quanto o endpoint externo aparecem no grupo de servidores virtuais, permitindo definir seus pesos relativos.
Cenário 2: Distribuir tráfego entre Services em diferentes clusters ACK
Associe Services de diferentes clusters ACK à mesma instância de SLB. O CCM de cada cluster mantém o grupo de servidores virtuais sincronizado durante o dimensionamento dos pods, sem afetar os servidores de backend registrados por outros clusters.
Restrições
Analise estas restrições antes de prosseguir:
Todos os Services que compartilham a instância de SLB devem usar a mesma porta.
Services implantados no mesmo namespace em clusters diferentes devem ter nomes distintos.
Caso defina pesos de tráfego usando a annotation
alibaba-cloud-loadbalancer-weight, gerencie os pesos exclusivamente por meio dessa annotation. Não modifique os pesos no console do SLB, pois alterações feitas no console não são sincronizadas de volta para os Services.
Etapa 1: Criar manualmente um listener e um grupo de servidores virtuais
Faça login no console do CLB ou no console do NLB e crie manualmente um listener e um grupo de servidores virtuais para a instância de SLB. Para obter instruções, consulte Listeners do CLB, Criar e gerenciar um grupo de servidores virtuais do CLB, Listeners do NLB e Criar e gerenciar um grupo de servidores.
É necessário criar manualmente o listener e o grupo de servidores virtuais para que todos os clusters possam compartilhar o mesmo grupo. Assim, o CCM de cada cluster registra seus próprios pods nesse grupo compartilhado.
Etapa 2: Criar os Services com annotations de grupo de servidores virtuais compartilhado
Em cada cluster, crie um Service com as annotations abaixo. Todos os Services devem referenciar a mesma instância de SLB e o mesmo grupo de servidores virtuais.
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "<YOUR_LB_ID>" # The ID of the shared SLB instance.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: "<YOUR_VGROUP_ID>:<PORT>" # The vServer group ID and the Service port, separated by a colon.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100" # (Optional) Traffic weight for backend pods of this Service. Valid values: 1–1000. Default: 100.
labels:
#...
name: #...
spec:
#...
Referência de annotations
|
Annotation |
Tipo |
Padrão |
Descrição |
|
|
string |
— |
ID da instância de SLB existente. O CCM associa o Service a esta instância em vez de criar uma nova. |
|
|
string |
— |
Mapeia a porta do Service para um grupo de servidores virtuais: |
|
|
integer |
100 |
Peso de tráfego para todos os pods de backend deste Service. Valores válidos: 1–1000. Quando definido, o CCM usa este valor para registrar os pesos dos pods no grupo de servidores virtuais. Gerencie os pesos apenas através desta annotation, e não no console do SLB. |
Após aplicar os manifestos dos Services, os pods de cada cluster aparecem no grupo de servidores virtuais compartilhado no console do SLB. Durante o dimensionamento da aplicação, o sistema adiciona ou remove seus pods do grupo automaticamente, sem afetar os pods pertencentes a outros Services.
Próximos passos
Para a lista completa de annotations para instâncias CLB e NLB, consulte Usar annotations para configurar instâncias CLB e Usar annotations para configurar instâncias NLB.
Para notas de versão do Cloud Controller Manager, consulte Cloud Controller Manager.