2. Kubernetes: диагностика сети, сервисов и хранилища

(Шпаргалка по типовым проблемам Service, DNS, Ingress и PVC)

1. Порядок диагностики сетевой проблемы

2. Полезные команды

3. Топ типовых проблем сети и хранилища

СимптомВозможные причиныКак проверитьИсправление
Service не отвечает (connection refused, timeout) Selector не совпадает с labels подов, неверный targetPort, под не готов kubectl describe svc <svc>
kubectl get endpoints <svc>
  • Исправить selector или labels
  • Проверить targetPort
  • Исправить readiness probe
Endpoints пустые Ни один под не прошёл readiness, либо labels не совпадают kubectl get pods --show-labels
kubectl describe pod <pod>
  • Сверить labels с selector
  • Проверить readiness probe
DNS не резолвит имя сервиса Упали поды CoreDNS, неверное имя, нестандартный dnsPolicy kubectl get pods -n kube-system -l k8s-app=kube-dns
nslookup <svc>.<ns>.svc.cluster.local
  • Перезапустить или восстановить CoreDNS
  • Использовать полное имя сервиса
502 / 503 через Ingress Сервис-бэкенд не найден, неверный порт, не тот ingressClassName kubectl describe ingress <name>
kubectl get ingressclass
  • Проверить имя и порт сервиса в Ingress
  • Указать корректный ingressClassName
Трафик между подами блокируется Политика NetworkPolicy запрещает входящий или исходящий трафик kubectl get networkpolicy -n <ns>
kubectl describe networkpolicy <name>
  • Добавить разрешающее правило
  • Проверить podSelector и namespaceSelector
PVC застрял в Pending Нет подходящего StorageClass или PV, либо не задан класс по умолчанию kubectl describe pvc <pvc>
kubectl get storageclass
  • Указать существующий StorageClass
  • Проверить объём и access mode
Деплой завис, ProgressDeadlineExceeded Новые поды не проходят readiness, не хватает ресурсов kubectl rollout status deployment/<name>
kubectl describe deployment <name>
  • Исправить новую версию
  • Откатить через rollout undo
Error from server (Forbidden) Нет прав в RBAC для ServiceAccount или пользователя kubectl auth can-i <verb> <resource> --as=<user>
  • Добавить Role и RoleBinding с нужными правами

4. Пример: корректная readiness probe

readinessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10
  failureThreshold: 3

Под попадает в Endpoints только после успешной проверки. Если путь или порт указаны неверно, сервис будет пустым, даже когда приложение работает.

5. Лучшие практики