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:
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
- Verifique o serviço
kubectl get svc -n <namespace>
Verificar:
- Tipo de serviço
- ClusterIP
- Porta
- Porta de destino
- Verificar endpoint do serviço
kubectl get endpoints <service-name> -n <namespace>
Saída esperada:
NAME ENDPOINTS
web-service 10.244.1.15:8080
Se a saída mostrar:
<none>
O serviço não está selecionando nenhum Pod.
- Descreva o serviço
kubectl describe svc <service-name> -n <namespace>
Verificar:
- Selector
- Ports
- TargetPort
- Events
- Verificar tags dos pods
kubectl get pods --show-labels
Certifique-se de que os tags dos Pods correspondam ao seletor de serviço.
Exemplo: Serviço
selector:
app: nginx
Pod:
labels:
app: nginx
- Verificar as políticas de rede
kubectl get networkpolicy
Certifique-se de que nenhuma NetworkPolicy esteja bloqueando o tráfego de entrada.
- 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
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.