Implantações entre clusters melhoram a recuperação de desastres, a confiabilidade e o isolamento de segurança. No entanto, criar um Service do tipo LoadBalancer para cada backend desperdiça instâncias de balanceador de carga. Com o componente Cloud Controller Manager (CCM), você pode anexar endpoints internos e externos ao cluster a uma única instância existente de balanceador de carga e configurar pesos de encaminhamento para cada endpoint.
Pré-requisitos
Tenha uma instância existente de Classic Load Balancer (CLB) ou Network Load Balancer (NLB) na mesma região do seu cluster ACK. Para mais informações, consulte Crie e gerencie uma instância de CLB e Crie e gerencie uma instância de NLB.
-
Verifique se o componente Cloud Controller Manager atende aos requisitos de versão. Para atualizar o componente, consulte Gerencie componentes. A versão necessária depende do tipo de instância:
Instância de CLB: v2.0.1 ou posterior.
Instância de NLB: v2.9.1 ou posterior.
Caso de uso 1: Serviços no cluster e endpoints externos
Você pode anexar um Service interno ao cluster e endpoints externos, como instâncias ECS, à mesma instância de balanceador de carga.
Localize o ID da sua instância existente de balanceador de carga no console do Classic Load Balancer (CLB) ou no console do Network Load Balancer (NLB).
-
Reutilize a instância existente de balanceador de carga ao criar o Service.
Usar o console
Ao criar um Service no console do Container Service for Kubernetes (ACK), defina o Service Type como LoadBalancer. Em seguida, selecione Use Existing Resource, escolha sua instância existente de balanceador de carga e marque Create port listener.
Usar kubectl
Ao criar um Service com kubectl, adicione uma Annotation para especificar o ID da instância do balanceador de carga.
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${LB_ID} # Replace ${LB_ID} with the ID of your existing load balancer instance. service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true" # Set to "true" to automatically create a listener and a virtual server group. labels: #... name: #... spec: #...ImportanteApós a criação do Service, o CCM cria automaticamente um grupo de servidores virtuais e um listener na instância de balanceador de carga de destino. O listener utiliza esse grupo de servidores virtuais como backend e encaminha o tráfego para a porta do Service.
-
Adicione os endpoints externos ao grupo de servidores virtuais criado automaticamente. Para obter instruções, consulte Crie e gerencie um grupo de servidores virtuais e Grupos de servidores NLB.
Após a configuração, o grupo de servidores virtuais exibirá tanto os Pods do cluster quanto os endpoints externos, cada um com um peso de encaminhamento configurável. Quando um aplicativo no cluster sofre dimensionamento, seus endpoints são adicionados ou removidos automaticamente do grupo de servidores, sem afetar os endpoints externos.
Caso de uso 2: Serviços em múltiplos clusters
Você pode anexar Services de diferentes clusters a uma única instância de balanceador de carga para fornecer um ponto de entrada unificado.
Para que os endpoints de backend sejam atualizados automaticamente quando os Pods forem alterados, todos os Services que compartilham o balanceador de carga devem também compartilhar o mesmo listener e grupo de servidores virtuais. Crie manualmente um listener e um grupo de servidores virtuais na instância do balanceador de carga e reutilize-os em todos os Services. A porta do listener deve corresponder à porta do Service.
Os Services em clusters diferentes devem usar a mesma porta.
A combinação do namespace com o nome do Service deve ser exclusiva entre os clusters.
Crie um listener e um grupo de servidores virtuais para a instância do balanceador de carga. Para obter instruções, consulte Listeners de CLB, Crie e gerencie um grupo de servidores virtuais, Listeners de NLB e Grupos de servidores NLB.
-
Reutilize o grupo de servidores virtuais criado manualmente ao criar os Services.
Para reutilizar o grupo de servidores virtuais, adicione Annotations ao manifesto do Service para especificar os IDs da instância do balanceador de carga e do grupo de servidores virtuais. Você também pode definir um peso de encaminhamento para o Service.
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${YOUR_LB_ID}" # Replace ${YOUR_LB_ID} with the ID of your existing load balancer instance. service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: "${YOUR_VGROUP_ID}:{PORT}" # Replace ${YOUR_VGROUP_ID} with the ID of the virtual server group and {PORT} with the port of the Service. service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100" # Optional. The forwarding weight for Pods belonging to this Service. Valid values range from 1 to 1000. The default is 100. labels: #... name: #... spec: #...NotaSe houver várias combinações de porta e grupo de servidores virtuais para
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port, separe-as por vírgula (,). Por exemplo: "${YOUR_VGROUP_ID_1}:80, ${YOUR_VGROUP_ID_2}:443".Após a configuração, visualize os Pods dos Services de diferentes clusters no grupo de servidores virtuais pelo console do balanceador de carga. Quando um aplicativo em um cluster sofre dimensionamento, o CCM adiciona ou remove automaticamente seus Pods do grupo de servidores, sem afetar os Pods de outros clusters.
ImportanteCaso configure o peso de encaminhamento usando uma Annotation no manifesto do Service, não ajuste o peso no console, pois isso pode causar inconsistências de estado.
Documentos relacionados
Para detalhes sobre as configurações de Annotation, consulte Configure um Classic Load Balancer (CLB) usando Annotations e Configure um Network Load Balancer (NLB) usando Annotations.
Para consultar o log de alterações do componente CCM, veja Cloud Controller Manager.