Configurar o balanceamento de carga manual

Nesta página, explicamos os requisitos de balanceamento de carga ao usar o balanceamento de carga manual. Diferente do balanceamento de carga em pacote em que o GKE em bare metal implanta balanceadores de carga em nós de cluster para o tráfego do plano de controle e do plano de dados, com o balanceamento de carga manual você configura suas próprias soluções para o tráfego do plano de controle e 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

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 GKE em bare metal, crie um arquivo de configuração do cluster com bmctl. Edite esse arquivo para ativar o balanceamento de carga manual no cluster:

  1. Defina o campo loadBalancer.mode como manual
  2. Defina o campo loadBalancer.vips.controlPlaneVIP como o VIP que você configurou no balanceador de carga.
  3. 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

Você precisa configurar o balanceamento de carga para que aceite serviços LoadBalancer do Kubernetes. No modo de balanceamento de carga manual, o GKE em bare metal não provisiona automaticamente balanceadores de carga. Portanto, os serviços LoadBalancer não funcionam a menos que você provisione e configure balanceadores de carga para apontar os serviços.

Além disso, o GKE em bare metal 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:

  1. Acesse Sistema > Usuários > Lista de partições.
  2. Clique em Criar.
  3. Digite um nome para a partição.
  4. 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:

  1. Acesse Tráfego local > Monitores.
  2. Clique em Criar.
  3. Digite um nome para o monitor (por exemplo, https_readyz).
  4. Defina o Tipo como HTTPS.
  5. Em Enviar string, insira GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close.
  6. Em Receber string, insira HTTP/1.1 200.
  7. 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.

  1. Acesse Tráfego local > Nós > Lista de nós.
  2. Clique em Criar.
  3. Insira um nome para o nó.
  4. Digite o endereço IP do nó no campo Endereço.
  5. Clique em Concluído.

Criar um pool de back-end

Crie um pool para os nós do plano de controle:

  1. Acesse Tráfego local > Pools > Lista de pools.
  2. Clique em Criar.
  3. Selecione Avançado na lista suspensa Configuração.
  4. Insira um nome para o pool.
  5. Selecione o monitor de integridade criado anteriormente.
  6. 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.
  7. 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:
    1. Na seção Novos membros, clique em Lista de nós e selecione o nó do plano de controle criado anteriormente.
    2. No campo Porta do serviço, digite 6444.
    3. Clique em Add.

Criar um servidor virtual

Crie um servidor virtual para o plano de controle:

  1. Acesse Tráfego local > Servidores virtuais > Lista de servidores virtuais.
  2. Clique em Criar.
  3. Digite um nome para o servidor virtual.
  4. Defina Tipo como Padrão.
  5. Digite 0.0.0.0/0 no campo Endereço de origem para permitir o tráfego de qualquer origem.
  6. Digite o VIP do plano de controle como o Endereço de destino.
  7. 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.
  8. No campo Tradução de endereço de origem, selecione Mapa automático.
  9. Em Pool padrão, selecione o pool criado anteriormente na lista suspensa.
  10. Clique em Concluído.

Configurar o suporte para serviços LoadBalancer

No modo de balanceamento de carga manual, o GKE em bare metal não provisiona automaticamente os balanceadores de carga para oferecer suporte para os 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, é necessário saber o VIP que você quer expor por meio do balanceador de carga, a porta a ser exposta e o NodePort usado pelo serviço LoadBalancer no Kubernetes.

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 da porta no serviço, e esse nodePort é o que você irá configurar para que o back-end do balanceador de carga aponte. Veja um exemplo abaixo.

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

  1. Acesse Tráfego local > Pools > Lista de pools.
  2. Clique em Criar.
  3. Insira um nome para o pool.
  4. Selecione tcp como o monitor de integridade.
  5. 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.
    1. Na seção Novos membros, clique em Lista de nós e selecione um dos nós criados anteriormente.
    2. No campo Porta do serviço, digite o valor do NodePort do serviço.
    3. Clique em Add.

Criar um servidor virtual

  1. Acesse Tráfego local > Servidores virtuais > Lista de servidores virtuais.
  2. Clique em Criar.
  3. Digite um nome para o servidor virtual.
  4. Defina Tipo como Padrão.
  5. Digite 0.0.0.0/0 no campo Endereço de origem para permitir o tráfego de qualquer origem.
  6. Digite o VIP do serviço de balanceador de carga como o Endereço de destino.
  7. Insira a porta que está sendo exposta para o serviço de balanceador de carga como a Porta do serviço.
  8. No campo Tradução de endereço de origem, selecione Mapa automático.
  9. Em Pool padrão, selecione o pool criado anteriormente na lista suspensa.
  10. Clique em Concluído.