Por que meu app não pode se conectar por meio de um serviço Network Load Balancer (NLB)?
Solucione problemas de conectividade do balanceador de carga de rede (NLB) quando não for possível acessar seu aplicativo por meio de um serviço NLB.
Infraestrutura clássica
Você expôs seu app criando um serviço NLB em seu cluster clássico.
Quando tentou se conectar ao seu app usando o endereço IP público do NLB, a conexão falhou ou atingiu o tempo limite.
Seu serviço NLB pode não estar funcionando corretamente devido a um dos motivos a seguir:
- O cluster não está totalmente implementado ainda.
- O script de configuração para seu serviço NLB inclui erros.
Verifique se você configurou um cluster padrão totalmente implementado que tenha pelo menos dois nós do trabalhador para garantir a alta disponibilidade para seu serviço NLB.
-
Liste seus nós do trabalhador Em sua saída da CLI, certifique-se de que o Status de seus nós do trabalhador exiba Pronto e que o Tipo de máquina mostre um tipo diferente de grátis.
ibmcloud ks worker ls --cluster CLUSTER_NAME_OR_ID -
Para NLBs da versão 2.0: certifique-se de concluir os pré-requisitos do NLB 2.0.
-
Verifique a exatidão do arquivo de configuração para seu serviço NLB.
- NLBs versão 2.0
apiVersion: v1 kind: Service metadata: name: myservice annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs" spec: type: LoadBalancer selector: <selector_key>:<selector_value> ports: - protocol: TCP port: 8080 targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise. externalTrafficPolicy: Local ``` 1. Verifique se você definiu **LoadBalancer** como o tipo para seu serviço. 2. Verifique se você incluiu a anotação `service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"`. 3. Na seção `spec.selector` do serviço LoadBalancer, certifique-se de que `<selector_key>` e `<selector_value>` sejam o mesmo que o par de chave/valor usado na seção `spec.template.metadata.labels` da implementação YAML. Se os rótulos não corresponderem, a seção **Terminais** no serviço LoadBalancer exibirá `<none>` e o app não ficará acessível na Internet. 4. Verifique se usou a **porta** na qual seu app atende. 5. Verifique se você configurou `externalTrafficPolicy` para `Local`. * NLBs versão 1.0 ```yaml {: screen} apiVersion: v1 kind: Service metadata: name: myservice spec: type: LoadBalancer selector: <selector_key>:<selector_value> ports: - protocol: TCP port: 8080 targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise. ``` 1. Verifique se você definiu **LoadBalancer** como o tipo para seu serviço. 2. Na seção `spec.selector` do serviço LoadBalancer, certifique-se de que `<selector_key>` e `<selector_value>` sejam o mesmo que o par de chave/valor usado na seção `spec.template.metadata.labels` da implementação YAML. Se os rótulos não corresponderem, a seção **Terminais** em seu serviço LoadBalancer exibirá **nenhum** e seu app não será acessível por meio da Internet. 3. Verifique se usou a **porta** na qual seu app atende. -
Verifique seu serviço NLB e revise a seção Eventos para localizar possíveis erros.
kubectl describe service <myservice>Procure as mensagens de erro a seguir.
- Os clusters com um nó devem usar serviços do tipo NodePort
- Para usar o serviço NLB, deve-se ter um cluster padrão com pelo menos dois nós do trabalhador.
- Nenhum IP do provedor de nuvem está disponível para atender à solicitação de serviço NLB. Inclua uma sub-rede móvel no cluster e tente novamente.
- Essa mensagem de erro indica que não há mais endereços IP públicos portáteis disponíveis para serem alocados ao seu serviço NLB. Consulte Incluindo sub-redes nos clusters para localizar informações sobre como solicitar endereços IP públicos móveis para seu cluster. Depois que os endereços IP públicos móveis estiverem disponíveis para o cluster, o serviço NLB será criado automaticamente.
- O IP do provedor de nuvem solicitado
<cloud-provider-ip>não está disponível. Os IPs do provedor de nuvem a seguir estão disponíveis:<available-cloud-provider-ips> - Você definiu um endereço IP público móvel para o YAML do balanceador de carga usando a seção
loadBalancerIP, mas esse endereço IP público móvel não está disponível na sub-rede pública móvel. Na seçãoloadBalancerIPdo seu script de configuração, remova o endereço IP existente e adicione um dos endereços IP públicos portáteis disponíveis. Também é possível remover a seçãoloadBalancerIPdo script para que um endereço IP público móvel disponível possa ser alocado automaticamente. - Nenhum nó disponível para serviços NLB
- Você não tem nós do trabalhador suficientes para implementar um serviço NLB. Um motivo talvez seja que você tenha implementado um cluster padrão com mais de um nó do trabalhador, mas o fornecimento dos nós do trabalhador tenha falhado.
- Liste os nós do trabalhador disponíveis executando
kubectl get nodes. - Se pelo menos dois nós do trabalhador disponíveis forem localizados, lista os detalhes do nó do trabalhador executando
ibmcloud ks worker get --cluster <cluster_name_or_ID> --worker <worker_ID>. - Certifique-se de que os IDs das VLANs pública e privada para os nós do trabalhador que foram retornados pelo
kubectl get nodese os comandosibmcloud ks worker getsejam correspondentes.
- Liste os nós do trabalhador disponíveis executando
- Se você usar um domínio customizado para se conectar ao seu serviço NLB, certifique-se de que seu domínio customizado esteja mapeado para o endereço IP público de seu serviço NLB.
- Localize o endereço IP público de seu serviço NLB.
kubectl describe service <service_name> | grep "LoadBalancer Ingress" ``` 2. Verifique se seu domínio customizado está mapeado para o endereço IP público móvel de seu serviço NLB no Registro de ponteiro (PTR).