Nesta página, explicamos os requisitos de balanceamento de carga ao usar o balanceamento de carga manual. Ao contrário do balanceamento de carga em pacote, em que o Google Distributed Cloud implanta balanceadores de carga em nós de cluster para tráfego do plano de controle e do plano de dados, com o balanceamento de carga manual, você configura suas próprias soluções de balanceamento de carga para o plano de controle e o tráfego do plano de dados.
É preciso configurar um balanceador de carga externo para o plano de controle antes de criar um cluster bare metal. O balanceador de carga do plano de controle externo também pode ser usado para o tráfego do plano de dados, ou um balanceador de carga separado para o plano de dados. Por exemplo, é possível usar um balanceador de carga no cluster, como o MetalLB para o tráfego do plano de dados.
Além de explicar os requisitos de balanceamento de carga, descrevemos nesta página como configurar o balanceamento de carga manual usando a F5 BIG-IP.
Pré-requisitos
As seções a seguir descrevem os pré-requisitos para configurar o balanceamento de carga manual.
Endereço IP obrigatório
É necessário planejar seus VIPs antes de criar um cluster. Todos os clusters precisam de um VIP para o plano de controle. Todos os clusters de usuário precisam de um segundo VIP para o serviço de entrada.
Esses VIPs podem estar em qualquer sub-rede IPv4 roteável pelo balanceador de carga. O VIP do plano de controle precisa ser acessível a partir de todos os nós de cluster e da estação de trabalho de administrador em que você executa bmctl
.
Ao criar o cluster, o serviço de entrada é implantado usando o VIP especificado no arquivo de configuração do cluster. É possível configurar o balanceamento de carga para esse endereço IP após a criação do cluster.
É preciso saber os endereços IP que você usará para os nós que serão usados como nós do plano de controle.
Requisitos do balanceador de carga do plano de controle externo
O balanceador de carga do plano de controle precisa ser configurado antes da criação do cluster. O balanceador de carga do plano de controle precisa atender a estes requisitos:
- Um serviço virtual (front-end) para o VIP do plano de controle. A porta de escuta padrão do plano de controle é 443. No entanto, se você especificar uma porta diferente, o campo
loadBalancer.ports.controlPlaneLBPort
do arquivo de configuração do cluster usará essa porta para o serviço virtual. - Um grupo de back-end contendo todos os endereços IP dos nós do plano de controle do cluster. A porta de back-end que o plano de controle escuta é 6444.
- Uma verificação de integridade que monitora os nós de back-end. A verificação de integridade precisa usar HTTPS e verificar o endpoint
/readyz
na porta 6444. A verificação de integridade precisa verificar se esse endpoint retorna o código de status 200 para considerar o nó íntegro.
Se o balanceador de carga externo não estiver configurado corretamente, é provável
que a inicialização do cluster falhe. Uma verificação de simulação verifica se o balanceador de carga externo foi configurado corretamente, incluindo se ele fez a verificação de integridade do endpoint /readyz
.
Redefinir conexões com nós com falha (recomendado)
Além dos requisitos anteriores, recomendamos que você configure o balanceador de carga para que redefina as conexões do cliente quando detectar uma falha no nó de back-end. Sem essa configuração, os clientes do servidor da API Kubernetes podem parar de responder por vários minutos quando uma instância do servidor é interrompida, o que pode causar instabilidade no plano de controle do Kubernetes.
- Com a F5 BIG-IP, essa configuração é chamada de "Ação no serviço inativo" na página de configuração do pool de back-end.
- Com o HAProxy, essa configuração é chamada de "on-marked-down shutdown-sessions" na configuração do servidor de back-end.
- Se você estiver usando um balanceador de carga diferente, consulte a documentação para encontrar a configuração equivalente.
Configurar seu cluster
Antes de criar um cluster do Google Distributed Cloud, crie um arquivo de configuração de cluster com bmctl
. Edite esse arquivo para ativar o balanceamento de carga manual
no cluster:
- Defina o campo
loadBalancer.mode
comomanual
- Defina o campo
loadBalancer.vips.controlPlaneVIP
como o VIP que você configurou no balanceador de carga. - Remova ou marque como comentário a seção
loadBalancer.addressPools
.
Depois de concluir a edição do arquivo de configuração, incluindo campos não relacionados ao balanceamento de carga, verifique se o VIP do plano de controle está configurado corretamente no balanceador de carga executando as verificações de simulação:
bmctl check preflight -c CLUSTER_NAME
Substitua CLUSTER_NAME
pelo nome do cluster.
Compatibilidade com serviços LoadBalancer em clusters de usuários
É preciso configurar o balanceamento de carga para oferecer suporte aos serviços LoadBalancer do Kubernetes. No modo de balanceamento de carga manual, o Google Distributed Cloud não provisiona automaticamente os balanceadores de carga para que os serviços LoadBalancer funcionem, a menos que você provisione e configure balanceadores de carga para apontar os serviços.
Além disso, o Google Distributed Cloud implanta automaticamente um serviço de entrada em todos os clusters de usuário usando um serviço LoadBalancer. Para ser acessível externamente, esse serviço requer um balanceador de carga configurado para apontar para o serviço.
Suas opções para aceitar serviços LoadBalancer incluem:
- Configurar manualmente o balanceador de carga para cada serviço LoadBalancer no cluster. Consulte Como configurar a aceitação de serviços LoadBalancer para um exemplo usando F5 BIG-IP.
- Instale um controlador de balanceador de carga no cluster que configure o balanceador de carga externo quando os serviços LoadBalancer forem criados.
- Instale uma solução de balanceamento de carga no cluster como o MetalLB.
Balanceamento de carga manual com a F5 BIG-IP
Nesta seção, descrevemos como configurar o balanceamento de carga manual com a F5 BIG-IP como o balanceador de carga externo. Se você estiver usando um balanceador de carga diferente, consulte a documentação desse balanceador e use estas etapas como modelo.
Configurar o balanceador de carga do plano de controle
É preciso configurar o balanceador de carga do plano de controle antes de criar um cluster. Depois de executar estas etapas, configure o cluster e crie-o.
Crie uma partição para o cluster
Cada cluster precisa ter a própria partição. Use o utilitário de configuração do BIG-IP para criar uma partição:
- Acesse Sistema > Usuários > Lista de partições.
- Clique em Criar.
- Digite um nome para a partição.
- Clique em Concluído.
Nas etapas a seguir, você criará objetos nessa partição. Verifique se essa partição está selecionada no menu suspenso no canto superior direito da IU de cada uma das tarefas a seguir para que cada objeto seja criado nessa partição.
Criar um monitor
Crie um monitor para realizar verificações de integridade nos nós do plano de controle:
- Acesse Tráfego local > Monitores.
- Clique em Criar.
- Digite um nome para o monitor (por exemplo, https_readyz).
- Defina o Tipo como HTTPS.
- Em Enviar string, insira
GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close
. - Em Receber string, insira
HTTP/1.1 200
. - Clique em Concluído.
Criar nós
Crie um nó que aponte para os nós do plano de controle. Se o cluster tiver um plano de controle de alta disponibilidade (HA, na sigla em inglês) com vários nós do plano de controle, crie um objeto de nó para cada nó do plano de controle.
- Acesse Tráfego local > Nós > Lista de nós.
- Clique em Criar.
- Insira um nome para o nó.
- Digite o endereço IP do nó no campo Endereço.
- Clique em Concluído.
Criar um pool de back-end
Crie um pool para os nós do plano de controle:
- Acesse Tráfego local > Pools > Lista de pools.
- Clique em Criar.
- Selecione Avançado na lista suspensa Configuração.
- Insira um nome para o pool.
- Selecione o monitor de integridade criado anteriormente.
- Defina Ação no serviço inativo como Rejeitar. Veja a discussão sobre essa configuração na seção Como redefinir conexões com nós com falha.
- Adicione o nó do plano de controle ao pool. Se o cluster tiver vários nós do plano de controle, repita essas etapas para cada um deles:
- Na seção Novos membros, clique em Lista de nós e selecione o nó do plano de controle criado anteriormente.
- No campo Porta do serviço, digite 6444.
- Clique em Add.
Criar um servidor virtual
Crie um servidor virtual para o plano de controle:
- Acesse Tráfego local > Servidores virtuais > Lista de servidores virtuais.
- Clique em Criar.
- Digite um nome para o servidor virtual.
- Defina Tipo como Padrão.
- Digite 0.0.0.0/0 no campo Endereço de origem para permitir o tráfego de qualquer origem.
- Digite o VIP do plano de controle como o Endereço de destino.
- Insira a porta do plano de controle como a Porta do serviço. Por padrão, ela é 443. No entanto, ela é configurável e precisa corresponder àquela definida na configuração do cluster para
loadBalancer.ports.controlPlaneLBPort
. - No campo Tradução de endereço de origem, selecione Mapa automático.
- Em Pool padrão, selecione o pool criado anteriormente na lista suspensa.
- Clique em Concluído.
Configurar o suporte para serviços LoadBalancer
No modo de balanceamento de carga manual, o Google Distributed Cloud não provisiona automaticamente balanceadores de carga para oferecer suporte a serviços LoadBalancer. Consulte Como aceitar serviços LoadBalancer em clusters de usuário para mais informações.
Nesta seção, mostramos como configurar manualmente um balanceador de carga F5 BIG-IP para um serviço LoadBalancer. Repita estas etapas para cada serviço LoadBalancer que você quer expor.
Pré-requisitos
Para configurar um serviço LoadBalancer, você precisa saber o VIP que quer expor por meio do balanceador de carga, a porta em que ele será exposto e o NodePort que o serviço LoadBalancer no Kubernetes está usando.
Depois de implantar um serviço LoadBalancer no cluster, determine o NodePort usado para ele. O comando a seguir mostra as portas do serviço:
kubectl --kubeconfig KUBECONFIG get service SERVICE_NAME -oyaml
Substitua:
KUBECONFIG
pelo caminho do arquivo kubeconfig a ser usado.SERVICE_NAME
pelo nome do serviço LoadBalancer.
A saída de kubctl get service
inclui uma seção ports
. Cada entrada de porta
mostra o nodePort exposto para a porta no serviço, e esse nodePort é
o que você configura para o back-end do balanceador de carga. O exemplo de saída
abaixo mostra a estrutura da seção ports
:
spec:
clusterIP: 172.26.232.107
externalTrafficPolicy: Cluster
loadBalancerIP: 21.0.101.77
ports:
- name: status-port
nodePort: 30281
port: 15021
protocol: TCP
targetPort: 15021
- name: http
nodePort: 30124
port: 80
protocol: TCP
targetPort: 80
- name: https
nodePort: 31858
port: 443
protocol: TCP
targetPort: 443
Há portas para o tráfego HTTP e HTTPS. É possível expor uma ou ambas as portas por meio do balanceador de carga.
Se você estiver expondo o serviço de entrada implantado automaticamente em todos os clusters, o serviço LoadBalancer é chamado istio-ingress
e está no namespace gke-system
. Encontre as portas com este comando:
kubectl --kubeconfig KUBECONFIG -n gke-system get service istio-ingress -oyaml
O serviço de entrada é configurado com um loadBalancerIP, que é o IP fornecido no campo loadBalancer.vips.ingressVIP
na configuração inicial do cluster. Exponha esse VIP para expor o serviço de entrada no balanceador de carga externo.
Criar um pool de back-end
- Acesse Tráfego local > Pools > Lista de pools.
- Clique em Criar.
- Insira um nome para o pool.
- Selecione tcp como o monitor de integridade.
- Adicione nós de trabalho ao pool de nós. Repita essas etapas para cada nó. É possível
adicionar planos de controle e nós de trabalho porque os NodePorts do Kubernetes podem
ser acessados em qualquer nó do cluster.
- Na seção Novos membros, clique em Lista de nós e selecione um dos nós criados anteriormente.
- No campo Porta do serviço, digite o valor do NodePort do serviço.
- Clique em Add.
Criar um servidor virtual
- Acesse Tráfego local > Servidores virtuais > Lista de servidores virtuais.
- Clique em Criar.
- Digite um nome para o servidor virtual.
- Defina Tipo como Padrão.
- Digite 0.0.0.0/0 no campo Endereço de origem para permitir o tráfego de qualquer origem.
- Digite o VIP do serviço de balanceador de carga como o Endereço de destino.
- Insira a porta que está sendo exposta para o serviço de balanceador de carga como a Porta do serviço.
- No campo Tradução de endereço de origem, selecione Mapa automático.
- Em Pool padrão, selecione o pool criado anteriormente na lista suspensa.
- Clique em Concluído.