Serviço inacessível

O que é um problema de serviço inacessível?

Um problema de "Service Not Accessible" ocorre quando um aplicativo em execução dentro de um Pod não pode ser acessado por meio de seu Serviço do Kubernetes. O problema pode ser devido a uma configuração incorreta do Serviço, endpoints ausentes, restrições de rede ou um problema com o LoadBalancer.

Dica: Se o serviço não tiver endpoints, geralmente significa que o seletor de serviço não corresponde a nenhum pod em execução.
Se os endpoints existirem, verifique o caminho de rede (política de rede, firewall ou balanceador de carga).

Sintomas
  • Não foi possível acessar o aplicativo.
  • O serviço está inacessível tanto de dentro quanto de fora do cluster.
  • As solicitações ao serviço falham ou expiram.
  • O serviço existe, mas o tráfego não está chegando aos Pods.

Exemplo:

TXT
NAME         TYPE        CLUSTER-IP      PORT(S)
web-service  ClusterIP   10.96.120.15    80/TCP
Causas comuns
  • Seletor de serviço incorreto.
  • Nenhuma etiqueta de cápsula correspondente.
  • Endpoints ausentes.
  • Política de rede bloqueando tráfego.
  • Restrições de firewall.
  • Problema de configuração do LoadBalancer ou do Ingress.
Como diagnosticar
  1. Verifique o serviço
BASH
kubectl get svc -n <namespace>

Verificar:

  • Tipo de serviço
  • ClusterIP
  • Porta
  • Porta de destino
  1. Verificar endpoint do serviço
BASH
kubectl get endpoints <service-name> -n <namespace>

Saída esperada:

TXT
NAME          ENDPOINTS
web-service   10.244.1.15:8080

Se a saída mostrar:

TXT
<none>

​​
O serviço não está selecionando nenhum Pod.

  1. Descreva o serviço
BASH
kubectl describe svc <service-name> -n <namespace>

Verificar:

  • Selector
  • Ports
  • TargetPort
  • Events
  1. Verificar tags dos pods
BASH
kubectl get pods --show-labels

Certifique-se de que os tags dos Pods correspondam ao seletor de serviço.

Exemplo: Serviço

TXT
selector:
  app: nginx

Pod:

TXT
labels:
  app: nginx
  1. Verificar as políticas de rede
BASH
kubectl get networkpolicy

Certifique-se de que nenhuma NetworkPolicy esteja bloqueando o tráfego de entrada.

  1. Verificar Firewall/Balanceador de Carga

Para serviços NodePort ou LoadBalancer:

  • Verifique as regras do firewall.
  • Verifique se o endereço IP externo foi atribuído.
  • Confirme se o LoadBalancer está íntegro.
Como consertar
  • Certifique-se de que os Pods estejam em execução e que os Pontos de Extremidade de Serviço existam.
  • Verifique se o seletor de serviço corresponde aos rótulos do Pod.
  • Verifique o tipo de serviço (ClusterIP, NodePort, LoadBalancer ou Ingress).
  • Atualize ou corrija as regras da NetworkPolicy.
  • Verifique as configurações do firewall ou do grupo de segurança.
  • Verifique o provedor de nuvem ou a configuração do LoadBalancer para acesso externo.
Comandos importantes
BASH
kubectl get svc
kubectl get endpoints
kubectl describe svc
kubectl get pods --show-labels
kubectl get networkpolicy
Pontos-chave

Sem endpoints = incompatibilidade entre seletor e rótulo.
Os endpoints existem, mas o serviço está inacessível = Verifique a política de rede, o firewall, a porta do aplicativo ou a configuração do balanceador de carga.

Próximo Artigo Artigo anterior