Đi từ Service về phía Pod, mỗi bước loại trừ một tầng.
1. Service có Endpoints không?
kubectl get endpoints apiRỗng là manh mối rõ nhất: hoặc selector không khớp label của Pod, hoặc Pod chưa READY (readiness fail thì bị loại khỏi Endpoints). Đối chiếu spec.selector của Service với kubectl get pods --show-labels.
2. targetPort có đúng port app đang listen không? Service port là port bên ngoài, targetPort mới là port trong container. Đặt nhầm thì Endpoints vẫn có nhưng connection refused.
3. App có bind 0.0.0.0 không? Bind vào 127.0.0.1 thì chỉ chính container gọi được, ngoài vào là refused. Lỗi này rất hay gặp.
4. Thử từ trong cluster để loại trừ DNS/NetworkPolicy:
kubectl run tmp --rm -it --image=busybox --restart=Never -- sh
# wget -qO- http://api.default.svc.cluster.local:80/healthGọi thẳng Pod IP được mà gọi Service không được → vấn đề ở Service/kube-proxy.
Cả hai đều không được → vấn đề ở app hoặc NetworkPolicy đang chặn.