Clusters da VPC: por que um serviço LoadBalancer do Kubernetes falha sem IPs?

Nuvem Privada Virtual

Você expôs seu aplicativo criando um serviço Kubernetes LoadBalancer em seu cluster VPC, mas o serviço não consegue ser provisionado porque não há endereços IP disponíveis em suas sub-redes.

Você expôs seu app criando um serviço LoadBalancer do Kubernetes em seu cluster VPC.

Ao executar oc describe svc <kubernetes_lb_service_name>, você vê uma mensagem de aviso na seção Eventos semelhante a uma das seguintes:

The subnet with ID(s) '<subnet_id>' has insufficient available ipv4 addresses.

Ao criar um serviço LoadBalancer do Kubernetes no cluster, um balanceador de carga VPC é criado automaticamente na VPC.

O balanceador de carga do VPC coloca um endereço IP flutuante para o serviço LoadBalancer do Kubernetes atrás de um nome do host pelo qual é possível acessar seu app.

Em clusters VPC, os nós do trabalhador e serviços recebem endereços IP das mesmas sub-redes. O roteamento de tráfego é ativado entre sub-redes, portanto, quando todos os endereços IP em uma sub-rede para uma zona são usados por nós do trabalhador ou serviços, ainda é possível criar novos nós do trabalhador ou serviços nessa zona porque eles usam endereços IP de sub-redes em outras zonas. No entanto, se todos os endereços IP em todas as sub-redes estiverem em uso, um novo serviço LoadBalancer do Kubernetes não poderá ser provisionado com sucesso.

Depois de criar uma sub-rede VPC, você não pode redimensioná-lo ou alterar seu intervalo IP.

Como alternativa, deve-se criar uma sub-rede maior do VPC em uma ou mais zonas nas quais existam nós do trabalhador. Em seguida, você cria um novo pool de workers usando as sub-redes maiores.

  1. Crie uma nova sub-rede VPC na mesma VPC e em uma ou mais zonas em que o cluster tem nós do trabalhador. Certifique-se de criar uma sub-rede que possa suportar o número de nós do trabalhador e serviços que você planeja criar em seu cluster. O tamanho padrão do CIDR de cada sub-rede do VPC é /24, suportando até 253 nós do trabalhador e serviços. Para verificar a VPC e as zonas do cluster, execute ibmcloud oc cluster get --cluster <cluster_name_or_ID>.

  2. Crie um novo conjunto de trabalhadores em seu cluster.

    ibmcloud oc worker-pool create vpc-gen2 --name <name> --cluster <cluster_name_or_ID> --flavor <flavor> --size-per-zone <number_of_worker_nodes> --label <key>=<value>
    
  3. Usando os IDs das novas sub-redes criadas na etapa anterior, adicione as zonas ao conjunto de trabalhadores. Repita esse comando para cada zona e sub-rede.

    ibmcloud oc zone add vpc-gen2 --zone <zone> --subnet-id <subnet_id> --cluster <cluster_name_or_ID> --worker-pool <worker_pool_name>
    
  4. Após alguns minutos, verifique se seu serviço LoadBalancer foi provisionado com sucesso em uma das novas sub-redes. Se o serviço for provisionado com sucesso, a seção “Eventos” não exibirá eventos do tipo “ Warning ” ou “ Error ”.

    oc describe svc <kubernetes_lb_service_name>