(Шпаргалка по типовым проблемам Service, DNS, Ingress и PVC)
kubectl get svc -n <ns>kubectl get endpoints <svc> -n <ns>kubectl get pods --show-labels -n <ns>kubectl get pods -o wide -n <ns>kubectl run tmp --rm -it --image=busybox:1.36 -- nslookup <svc>kubectl get networkpolicy,ingress -n <ns>kubectl describe svc <svc> -n <ns>kubectl get endpointslices -l kubernetes.io/service-name=<svc>kubectl port-forward svc/<svc> 8080:80 -n <ns>kubectl get events -n <ns> --field-selector type=Warningkubectl rollout status deployment/<name> -n <ns>kubectl rollout undo deployment/<name> -n <ns>kubectl auth can-i list pods -n <ns> --as=<user>kubectl get pvc -n <ns>| Симптом | Возможные причины | Как проверить | Исправление |
|---|---|---|---|
| Service не отвечает (connection refused, timeout) | Selector не совпадает с labels подов, неверный targetPort, под не готов | kubectl describe svc <svc>kubectl get endpoints <svc> |
|
| Endpoints пустые | Ни один под не прошёл readiness, либо labels не совпадают | kubectl get pods --show-labelskubectl describe pod <pod> |
|
| DNS не резолвит имя сервиса | Упали поды CoreDNS, неверное имя, нестандартный dnsPolicy | kubectl get pods -n kube-system -l k8s-app=kube-dnsnslookup <svc>.<ns>.svc.cluster.local |
|
| 502 / 503 через Ingress | Сервис-бэкенд не найден, неверный порт, не тот ingressClassName | kubectl describe ingress <name>kubectl get ingressclass |
|
| Трафик между подами блокируется | Политика NetworkPolicy запрещает входящий или исходящий трафик | kubectl get networkpolicy -n <ns>kubectl describe networkpolicy <name> |
|
| PVC застрял в Pending | Нет подходящего StorageClass или PV, либо не задан класс по умолчанию | kubectl describe pvc <pvc>kubectl get storageclass |
|
| Деплой завис, ProgressDeadlineExceeded | Новые поды не проходят readiness, не хватает ресурсов | kubectl rollout status deployment/<name>kubectl describe deployment <name> |
|
| Error from server (Forbidden) | Нет прав в RBAC для ServiceAccount или пользователя | kubectl auth can-i <verb> <resource> --as=<user> |
|
readinessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 5 periodSeconds: 10 failureThreshold: 3
Под попадает в Endpoints только после успешной проверки. Если путь или порт указаны неверно, сервис будет пустым, даже когда приложение работает.
port-forward, чтобы отделить проблему Ingress от проблемы приложенияrollout status завершается успешно