Модуль 5.5: Усунення мережевих несправностей
Складність:
[COMPLEX]— Кілька рівнів для налагодженняЧас на виконання: 50–60 хвилин
Передумови: Модуль 5.1 (Методологія), Модуль 3.1–3.7 (Сервіси та мережа)
Що ви зможете робити
Розділ «Що ви зможете робити»Після цього модуля ви зможете:
- Діагностувати збої з’єднань pod-to-pod, pod-to-service та external-to-service
- Простежити мережеві проблеми пошарово: pod IP → service → endpoint → kube-proxy → CNI
- Виправити типові мережеві проблеми: відсутні правила дозволу NetworkPolicy, збої DNS-резолюції, невідповідність портів
- Використовувати інструменти мережевого дебагу (curl, nslookup, tcpdump, ss) зсередини подів та вузлів
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Мережеві проблеми — одні з найскладніших для усунення, оскільки вони можуть виникнути на кількох рівнях — мережа Підів, мережа Сервісів, DNS, CNI або зовнішнє з’єднання. Систематичний підхід є критичним. На іспиті CKA питання з усунення мережевих несправностей поширені й часто приносять високі бали.
Аналогія з автомагістральною системою
Уявіть мережу кластера як систему автомагістралей. Під’и — це автомобілі з унікальними адресами (IP). Сервіси — це відомі з’їзди, що перенаправляють трафік до кількох пунктів призначення. DNS — це GPS, що переводить імена в адреси. NetworkPolicies — це пропускні пункти, що контролюють хто може в’їхати. Коли трафік не рухається — потрібно перевірити кожний контрольний пункт.
Що ви дізнаєтесь
Розділ «Що ви дізнаєтесь»Після завершення цього модуля ви зможете:
- Діагностувати проблеми зв’язку Під-Під
- Усувати проблеми з DNS
- Виправляти проблеми зв’язку Сервісів
- Визначати блокування NetworkPolicy
- Налагоджувати проблеми CNI
Чи знали ви?
Розділ «Чи знали ви?»- Кожний Під отримує IP: на відміну від Docker, Під’и Kubernetes мають власні IP-адреси — маппінг портів не потрібен
- DNS-запити йдуть через CoreDNS: весь DNS-резолвінг кластера проходить через Під’и CoreDNS у kube-system
- NetworkPolicies адитивні: якщо будь-яка політика дозволяє трафік — він дозволений. Але наявність БУДЬ-ЯКОЇ політики створює заборону за замовчуванням
- Сервіси використовують kube-proxy: IP-адреси Сервісів — віртуальні, kube-proxy програмує правила iptables/IPVS для маршрутизації трафіку
Частина 1: Мережева модель Kubernetes
Розділ «Частина 1: Мережева модель Kubernetes»1.1 Мережеві рівні
Розділ «1.1 Мережеві рівні»┌──────────────────────────────────────────────────────────────┐│ МЕРЕЖЕВІ РІВНІ KUBERNETES ││ ││ Рівень 4: Зовнішній доступ ││ ┌─────────────────────────────────────────────────────┐ ││ │ Ingress / LoadBalancer / NodePort │ ││ └─────────────────────────────────────────────────────┘ ││ │ ││ Рівень 3: Мережа Сервісів│ ││ ┌─────────────────────────────────────────────────────┐ ││ │ ClusterIP Сервіси (віртуальні IP через kube-proxy) │ ││ └─────────────────────────────────────────────────────┘ ││ │ ││ Рівень 2: DNS │ ││ ┌─────────────────────────────────────────────────────┐ ││ │ CoreDNS (service.namespace.svc.cluster.local) │ ││ └─────────────────────────────────────────────────────┘ ││ │ ││ Рівень 1: Мережа Підів │ ││ ┌─────────────────────────────────────────────────────┐ ││ │ CNI плагін (Під-Під, між вузлами) │ ││ └─────────────────────────────────────────────────────┘ ││ ││ Усувайте знизу вгору: Під → DNS → Сервіс → Зовнішній ││ │└──────────────────────────────────────────────────────────────┘1.2 Швидкий тест з’єднання
Розділ «1.2 Швидкий тест з’єднання»# Створити debug-Під для тестуванняk run netshoot --image=nicolaka/netshoot --rm -it --restart=Never -- bash
# Або простіше з busyboxk run debug --image=busybox:1.36 --rm -it --restart=Never -- shЧастина 2: Зв’язок Під-Під
Розділ «Частина 2: Зв’язок Під-Під»2.1 Тестування зв’язку Підів
Розділ «2.1 Тестування зв’язку Підів»# Отримати IP Підівk get pods -o wide
# Тест з одного Підів до іншогоk exec <source-pod> -- ping -c 3 <target-pod-ip>k exec <source-pod> -- wget -qO- --timeout=2 http://<target-pod-ip>:<port>k exec <source-pod> -- nc -zv <target-pod-ip> <port>2.2 Симптоми збоїв зв’язку Під-Під
Розділ «2.2 Симптоми збоїв зв’язку Під-Під»┌──────────────────────────────────────────────────────────────┐│ УСУНЕННЯ НЕСПРАВНОСТЕЙ ЗВ'ЯЗКУ ПІД-ПІД ││ ││ Симптом Ймовірна причина ││ ───────────────────────────────────────────────────────── ││ ping не проходить до жодного CNI не працює ││ Підів ││ ping працює, TCP ні NetworkPolicy або ││ проблема додатку ││ На тому ж вузлі працює, Проблема CNI між вузлами ││ між вузлами ні ││ Деякі Під'и працюють, Проблема конкретного ││ деякі ні Підів/вузла ││ Періодичні збої Неспівпадіння MTU, ││ перевантаження ││ │└──────────────────────────────────────────────────────────────┘2.3 Діагностика проблем CNI
Розділ «2.3 Діагностика проблем CNI»# Перевірити чи Під'и CNI працюютьk -n kube-system get pods | grep -E "calico|flannel|weave|cilium"
# Перевірити логи Підів CNIk -n kube-system logs <cni-pod>
# Перевірити конфігурацію CNI на вузліls -la /etc/cni/net.d/cat /etc/cni/net.d/*.conf
# Перевірити наявність бінарних файлів CNIls -la /opt/cni/bin/2.4 Типові проблеми CNI
Розділ «2.4 Типові проблеми CNI»| Проблема | Симптом | Виправлення |
|---|---|---|
| Під’и CNI не працюють | Усі Під’и застрягли ContainerCreating | Розгорнути/виправити CNI плагін |
| Конфіг CNI відсутній | Під’и не отримують IP | Перевірити /etc/cni/net.d/ |
| Бінарний файл CNI відсутній | Помилки runtime | Встановити бінарні файли CNI |
| Перетин CIDR | Конфлікти IP | Переналаштувати pod CIDR |
| Неспівпадіння MTU | Періодичні втрати | Вирівняти налаштування MTU |
Частина 3: Усунення несправностей DNS
Розділ «Частина 3: Усунення несправностей DNS»3.1 Огляд DNS Kubernetes
Розділ «3.1 Огляд DNS Kubernetes»┌──────────────────────────────────────────────────────────────┐│ ПОТІК РЕЗОЛВІНГУ DNS ││ ││ Під робить DNS-запит ││ │ ││ ▼ ││ /etc/resolv.conf (вказує на Сервіс kube-dns) ││ │ ││ ▼ ││ Сервіс kube-dns (зазвичай 10.96.0.10) ││ │ ││ ▼ ││ Під'и CoreDNS (у kube-system) ││ │ ││ ├── Домен кластера (*.svc.cluster.local) → резолвити ││ │ ││ └── Зовнішній домен → перенаправити на upstream DNS ││ │└──────────────────────────────────────────────────────────────┘3.2 Тестування DNS
Розділ «3.2 Тестування DNS»# Перевірити конфігурацію DNS Підівk exec <pod> -- cat /etc/resolv.conf
# Тест DNS кластераk exec <pod> -- nslookup kubernetesk exec <pod> -- nslookup kubernetes.defaultk exec <pod> -- nslookup kubernetes.default.svc.cluster.local
# Тест DNS Сервісуk exec <pod> -- nslookup <service-name>k exec <pod> -- nslookup <service-name>.<namespace>k exec <pod> -- nslookup <service-name>.<namespace>.svc.cluster.local
# Тест зовнішнього DNSk exec <pod> -- nslookup google.com3.3 Діагностика проблем DNS
Розділ «3.3 Діагностика проблем DNS»# Перевірити Під'и CoreDNSk -n kube-system get pods -l k8s-app=kube-dnsk -n kube-system logs -l k8s-app=kube-dns
# Перевірити Сервіс kube-dnsk -n kube-system get svc kube-dns
# Перевірити ConfigMap CoreDNSk -n kube-system get configmap coredns -o yaml
# Перевірити endpointsk -n kube-system get endpoints kube-dns3.4 Типові проблеми DNS
Розділ «3.4 Типові проблеми DNS»| Проблема | Симптом | Діагностика | Виправлення |
|---|---|---|---|
| CoreDNS не працює | Весь DNS збоїть | Перевірити Під’и CoreDNS | Виправити/перезапустити CoreDNS |
| Неправильний nameserver | Тайм-аут DNS | Перевірити /etc/resolv.conf | Виправити конфіг DNS kubelet |
| CoreDNS падає циклічно | Періодичний DNS | Перевірити логи CoreDNS | Виправити виявлення циклу |
| NetworkPolicy блокує | DNS заблоковано | Перевірити політики | Дозволити DNS (порт 53) |
| Проблема ndots | Повільний зовнішній DNS | Перевірити ndots у resolv.conf | Налаштувати dnsConfig |
3.5 Виправлення проблем DNS
Розділ «3.5 Виправлення проблем DNS»CoreDNS не працює:
# Перевірити Деплойментk -n kube-system get deployment coredns
# Масштабувати за потребиk -n kube-system scale deployment coredns --replicas=2
# Перевірити проблеми Підівk -n kube-system describe pod -l k8s-app=kube-dnsПадіння CoreDNS через виявлення циклу:
# Перевірити логи на повідомлення «Loop»k -n kube-system logs -l k8s-app=kube-dns | grep -i loop
# Виправлення: відредагувати ConfigMap CoreDNSk -n kube-system edit configmap coredns# Видалити або закоментувати плагін 'loop'Неправильний resolv.conf:
# Перевірити конфіг kubelet для DNS кластераcat /var/lib/kubelet/config.yaml | grep -A 5 "clusterDNS"
# Має вказувати на IP Сервісу kube-dns# clusterDNS:# - 10.96.0.10Частина 4: Усунення несправностей Сервісів
Розділ «Частина 4: Усунення несправностей Сервісів»4.1 Шлях з’єднання Сервісу
Розділ «4.1 Шлях з’єднання Сервісу»┌──────────────────────────────────────────────────────────────┐│ ШЛЯХ З'ЄДНАННЯ СЕРВІСУ ││ ││ Клієнтський Під ││ │ ││ ▼ ││ Резолвінг DNS (service.namespace → ClusterIP) ││ │ ││ ▼ ││ Правила kube-proxy (iptables/IPVS) ││ │ ││ ▼ ││ Вибір endpoint (один із бекенд-Підів) ││ │ ││ ▼ ││ Цільовий Під ││ ││ Кожний крок може збоїти — перевіряйте систематично ││ │└──────────────────────────────────────────────────────────────┘4.2 Тестування з’єднання Сервісу
Розділ «4.2 Тестування з’єднання Сервісу»# Тест за ClusterIPk exec <pod> -- wget -qO- --timeout=2 http://<service-cluster-ip>:<port>
# Тест за DNS-ім'ямk exec <pod> -- wget -qO- --timeout=2 http://<service-name>:<port>
# Тест через curl, якщо доступнийk exec <pod> -- curl -s --connect-timeout 2 http://<service-name>:<port>4.3 Діагностика проблем Сервісу
Розділ «4.3 Діагностика проблем Сервісу»# Перевірити що Сервіс існує і має правильний тип/портиk get svc <service-name>k describe svc <service-name>
# КРИТИЧНО: перевірити endpointsk get endpoints <service-name># Порожні endpoints = Сервіс не може знайти Під'и!
# Перевірити що selector збігається з Під'амиk get svc <service-name> -o jsonpath='{.spec.selector}'k get pods -l <selector>
# Перевірити чи Під'и Readyk get pods -l <selector> -o wide4.4 Типові проблеми Сервісів
Розділ «4.4 Типові проблеми Сервісів»| Проблема | Симптом | Діагностика | Виправлення |
|---|---|---|---|
| Немає endpoints | Connection refused | k get endpoints порожній | Виправити selector або створити Під’и |
| Неправильний selector | Endpoints порожні | Порівняти мітки | Виправити selector у Сервісі |
| Неправильний порт | Connection refused | Перевірити port vs targetPort | Виправити маппінг портів |
| Під’и не Ready | Деякі endpoints | Перевірити readiness Підів | Виправити readiness пробу |
| kube-proxy не працює | Усі Сервіси збоять | Перевірити Під’и kube-proxy | Перезапустити kube-proxy |
4.5 Виправлення проблем Сервісів
Розділ «4.5 Виправлення проблем Сервісів»Немає endpoints — неспівпадіння selector:
# Отримати selector Сервісуk get svc my-service -o jsonpath='{.spec.selector}'# Вивід: {"app":"myapp"}
# Отримати мітки Підівk get pods --show-labels
# Якщо не збігаються, виправити:k patch svc my-service -p '{"spec":{"selector":{"app":"correct-label"}}}'# Або виправити мітки ПідівНеправильна конфігурація портів:
# Перевірити порти Сервісуk get svc my-service -o yaml | grep -A 10 "ports:"
# Перевірити чи Під слухає на targetPortk exec <pod> -- netstat -tlnp# Абоk exec <pod> -- ss -tlnp
# Виправити Сервісk patch svc my-service -p '{"spec":{"ports":[{"port":80,"targetPort":8080}]}}'Частина 5: Усунення несправностей NetworkPolicy
Розділ «Частина 5: Усунення несправностей NetworkPolicy»5.1 Поведінка NetworkPolicy
Розділ «5.1 Поведінка NetworkPolicy»┌──────────────────────────────────────────────────────────────┐│ ЛОГІКА NETWORKPOLICY ││ ││ Немає NetworkPolicy для Підів → Весь трафік дозволений ││ ││ Є NetworkPolicy для Підів → Заборона за замовчуванням: ││ ┌─────────────────────────────────────────────────────┐ ││ │ Правила Ingress: Що може підключатись ДО цього Підів│ ││ │ Правила Egress: До чого цей Під може підключатись │ ││ │ │ ││ │ Немає правил ingress → Весь ingress заборонений │ ││ │ Немає правил egress → Весь egress заборонений │ ││ └─────────────────────────────────────────────────────┘ ││ ││ Політики адитивні: якщо БУДЬ-ЯКА політика дозволяє — ││ дозволено ││ │└──────────────────────────────────────────────────────────────┘5.2 Діагностика проблем NetworkPolicy
Розділ «5.2 Діагностика проблем NetworkPolicy»# Перелік усіх NetworkPoliciesk get networkpolicy -A
# Перевірити політики в конкретному namespacek get networkpolicy -n <namespace>
# Дослідити деталі політикиk describe networkpolicy <name> -n <namespace>
# Перевірити які Під'и вибраніk get networkpolicy <name> -o jsonpath='{.spec.podSelector}'5.3 Типові проблеми NetworkPolicy
Розділ «5.3 Типові проблеми NetworkPolicy»| Проблема | Симптом | Виправлення |
|---|---|---|
| Egress блокує DNS | DNS не працює | Дозволити egress до kube-dns (порт 53) |
| Ingress занадто обмежувальний | Connection refused | Перевірити правила ingress, додати джерело |
| Забули namespace | Міжнамеспейсовий блокований | Додати namespaceSelector |
| Неправильний pod selector | Політика не застосована | Виправити мітки podSelector |
5.4 Виправлення проблем NetworkPolicy
Розділ «5.4 Виправлення проблем NetworkPolicy»Дозволити DNS egress:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: allow-dnsspec: podSelector: {} # Усі Під'и policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: kube-system ports: - protocol: UDP port: 53 - protocol: TCP port: 53Налагодження через тимчасове видалення політики:
# Зберегти політикуk get networkpolicy <name> -o yaml > policy-backup.yaml
# Видалити для тестуk delete networkpolicy <name>
# Тестувати зв'язокk exec <pod> -- wget -qO- http://<service>
# Відновитиk apply -f policy-backup.yamlЧастина 6: Зовнішнє з’єднання
Розділ «Частина 6: Зовнішнє з’єднання»6.1 Вихідне з’єднання (Під до інтернету)
Розділ «6.1 Вихідне з’єднання (Під до інтернету)»# Тест вихідного з'єднанняk exec <pod> -- wget -qO- --timeout=5 http://example.com
# Якщо не працює, перевірте:# 1. Резолвінг DNSk exec <pod> -- nslookup example.com
# 2. Мережевий шляхk exec <pod> -- ping -c 2 8.8.8.8
# 3. З'єднання на рівні вузла (з вузла)curl -I http://example.com6.2 Вхідне з’єднання (зовнішнє до кластера)
Розділ «6.2 Вхідне з’єднання (зовнішнє до кластера)»# Для NodePort Сервісуcurl http://<node-ip>:<node-port>
# Для LoadBalancer (якщо доступний)k get svc <service> -o jsonpath='{.status.loadBalancer.ingress[0].ip}'curl http://<lb-ip>
# Для Ingresscurl -H "Host: <hostname>" http://<ingress-ip>6.3 Проблеми зовнішнього з’єднання
Розділ «6.3 Проблеми зовнішнього з’єднання»| Проблема | Перевірте | Виправлення |
|---|---|---|
| NAT не працює | iptables вузла | Перевірити CNI, kube-proxy |
| Firewall блокує | Правила хмарного firewall | Відкрити необхідні порти |
| Немає маршруту до інтернету | Маршрутизація вузла | Виправити конфіг мережі вузла |
| LoadBalancer в pending | Cloud controller | Перевірити інтеграцію з хмарою |
Типові помилки
Розділ «Типові помилки»| Помилка | Проблема | Рішення |
|---|---|---|
| Не перевіряти endpoints | Пропуск неспівпадіння selector | Завжди перевіряйте k get endpoints |
| Забути DNS у NetPol | DNS ламається з egress-політикою | Дозволити UDP/TCP 53 до kube-system |
| Тестування з неправильного Підів | Різні мережеві політики застосовуються | Тестуйте з реального Підів-джерела |
| Ігнорування readiness Підів | Endpoints відсутні | Перевірте чи Під Ready |
| Плутанина port vs targetPort | З’єднання не працює | Порт Сервісу != порт контейнера |
| Не тестувати покроково | Неможливо ізолювати проблему | Під → DNS → Сервіс → Зовнішній |
Тест
Розділ «Тест»Q1: Порожні endpoints
Розділ «Q1: Порожні endpoints»Сервіс існує, але k get endpoints <svc> показує порожні endpoints. Яка найімовірніша причина?
Відповідь
Selector Сервісу не збігається з жодними мітками Підів, або відповідні Під’и не в стані Ready.
Кроки налагодження:
# Отримати selector Сервісуk get svc <svc> -o jsonpath='{.spec.selector}'# Знайти Під'и з відповідними міткамиk get pods -l <selector># Перевірити чи Під'и Readyk get pods -l <selector> -o wideQ2: Збій DNS
Розділ «Q2: Збій DNS»Усі DNS-запити не проходять у Під’ах. Зовнішній DNS (8.8.8.8) доступний. Що ви перевіряєте?
Відповідь
Перевірте Під’и CoreDNS у kube-system:
k -n kube-system get pods -l k8s-app=kube-dnsk -n kube-system logs -l k8s-app=kube-dnsk -n kube-system get endpoints kube-dnsТакож перевірте що Сервіс kube-dns існує і /etc/resolv.conf Підів вказує на нього.
Q3: Поведінка NetworkPolicy за замовчуванням
Розділ «Q3: Поведінка NetworkPolicy за замовчуванням»Ви створюєте NetworkPolicy з podSelector: {} і лише правилами ingress. Що станеться з egress-трафіком?
Відповідь
Egress залишається необмеженим. NetworkPolicy впливає лише на типи трафіку, вказані в policyTypes. Якщо ви вказуєте лише правила ingress і маєте policyTypes: [Ingress], egress не зачіпається.
Однак, якщо policyTypes: [Ingress, Egress] але без правил egress — весь egress заборонений.
Q4: Зв’язок Підів між вузлами
Розділ «Q4: Зв’язок Підів між вузлами»Під’и на тому ж вузлі можуть спілкуватись, але Під’и на різних вузлах — ні. Що, ймовірно, зламано?
Відповідь
Мережа CNI плагіна між вузлами не працює. Це може бути:
- Під’и CNI не працюють на всіх вузлах
- Мережеве з’єднання між вузлами заблоковане
- Overlay-мережа (VXLAN/IPinIP) не налаштована
- Неспівпадіння MTU спричиняє втрату пакетів
Перевірте:
k -n kube-system get pods -o wide | grep <cni-name># Перевірте Під'и CNI на кожному вузліQ5: Маппінг портів Сервісу
Розділ «Q5: Маппінг портів Сервісу»Сервіс має port: 80, targetPort: 8080. Контейнер слухає на 80. Чи працюватиме це?
Відповідь
Ні. Сервіс буде маршрутизувати трафік на порт 8080 Підів, але контейнер слухає на 80.
port: порт, через який клієнти звертаються до СервісуtargetPort: порт на Підові/контейнері
Виправлення: або змініть targetPort: 80, або змусьте додаток слухати на 8080.
Q6: Цикл CoreDNS
Розділ «Q6: Цикл CoreDNS»CoreDNS постійно падає з «Loop detected» у логах. Яке виправлення?
Відповідь
Це трапляється коли CoreDNS виявляє, що перенаправляє на себе (часто в середовищах, де /etc/resolv.conf вузла вказує на localhost).
Виправте, відредагувавши ConfigMap CoreDNS:
k -n kube-system edit configmap corednsОдин з варіантів:
- Видалити рядок з плагіном
loop - Налаштувати явні upstream DNS-сервери замість використання /etc/resolv.conf
Практична вправа: Усунення мережевих несправностей
Розділ «Практична вправа: Усунення мережевих несправностей»Сценарій
Розділ «Сценарій»Практика діагностики різних мережевих проблем.
Підготовка
Розділ «Підготовка»# Створити тестовий namespacek create ns network-lab
# Створити тестовий Деплойментk -n network-lab create deployment web --image=nginx:1.25 --replicas=2
# Відкрити як Сервісk -n network-lab expose deployment web --port=80
# Створити клієнтський Підk -n network-lab run client --image=busybox:1.36 --command -- sleep 3600Завдання 1: Перевірка базового з’єднання
Розділ «Завдання 1: Перевірка базового з’єднання»# Зачекати поки Під'и будуть готовіk -n network-lab get pods -w
# Отримати IP Сервісу та Підівk -n network-lab get svc,pods -o wide
# Тест від клієнта до Сервісуk -n network-lab exec client -- wget -qO- --timeout=2 http://web
# Тест DNS-резолвінгуk -n network-lab exec client -- nslookup webk -n network-lab exec client -- nslookup web.network-lab.svc.cluster.localЗавдання 2: Перевірка endpoints
Розділ «Завдання 2: Перевірка endpoints»# Перевірити що endpoints існуютьk -n network-lab get endpoints web
# Повинні показувати IP Підів web# Якщо порожні, перевірте:k -n network-lab get svc web -o jsonpath='{.spec.selector}'k -n network-lab get pods --show-labelsЗавдання 3: Симуляція неспівпадіння selector
Розділ «Завдання 3: Симуляція неспівпадіння selector»# Зламати Сервіс зміною selectork -n network-lab patch svc web -p '{"spec":{"selector":{"app":"wrong"}}}'
# Спробувати підключитись (не вдасться)k -n network-lab exec client -- wget -qO- --timeout=2 http://web
# Перевірити endpoints (повинні бути порожні)k -n network-lab get endpoints web
# Виправитиk -n network-lab patch svc web -p '{"spec":{"selector":{"app":"web"}}}'
# Перевірити що виправленоk -n network-lab get endpoints webk -n network-lab exec client -- wget -qO- --timeout=2 http://webЗавдання 4: Тест NetworkPolicy
Розділ «Завдання 4: Тест NetworkPolicy»# Застосувати обмежувальну політикуcat <<EOF | k apply -f -apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: deny-all namespace: network-labspec: podSelector: {} policyTypes: - Ingress - EgressEOF
# Тестувати з'єднання (тепер повинно не працювати)k -n network-lab exec client -- wget -qO- --timeout=2 http://web
# Перевірити які політики існуютьk -n network-lab get networkpolicy
# Видалити політику для відновлення з'єднанняk -n network-lab delete networkpolicy deny-all
# Перевірити відновленняk -n network-lab exec client -- wget -qO- --timeout=2 http://webКритерії успіху
Розділ «Критерії успіху»- Перевірили зв’язок Під-Сервіс
- Підтвердили що DNS-резолвінг працює
- Зрозуміли зв’язок з endpoints
- Змоделювали та виправили неспівпадіння selector
- Спостерігали блокування трафіку NetworkPolicy
Очищення
Розділ «Очищення»k delete ns network-labПрактичні вправи
Розділ «Практичні вправи»Вправа 1: Перевірка DNS-резолвінгу (30 с)
Розділ «Вправа 1: Перевірка DNS-резолвінгу (30 с)»# Завдання: Тест DNS з Підівk exec <pod> -- nslookup kubernetesВправа 2: Перевірка endpoints (30 с)
Розділ «Вправа 2: Перевірка endpoints (30 с)»# Завдання: Переглянути endpoints Сервісуk get endpoints <service>Вправа 3: Тест з’єднання Сервісу (1 хв)
Розділ «Вправа 3: Тест з’єднання Сервісу (1 хв)»# Завдання: Тест HTTP до Сервісу з Підівk exec <pod> -- wget -qO- --timeout=2 http://<service>Вправа 4: Перевірка CoreDNS (1 хв)
Розділ «Вправа 4: Перевірка CoreDNS (1 хв)»# Завдання: Перевірити що CoreDNS здоровийk -n kube-system get pods -l k8s-app=kube-dnsk -n kube-system logs -l k8s-app=kube-dns --tail=20Вправа 5: Перевірка конфігурації DNS Підів (30 с)
Розділ «Вправа 5: Перевірка конфігурації DNS Підів (30 с)»# Завдання: Переглянути конфігурацію DNS Підівk exec <pod> -- cat /etc/resolv.confВправа 6: Перелік NetworkPolicies (30 с)
Розділ «Вправа 6: Перелік NetworkPolicies (30 с)»# Завдання: Знайти всі NetworkPolicies у namespacek get networkpolicy -n <namespace>Вправа 7: Перевірка Підів CNI (1 хв)
Розділ «Вправа 7: Перевірка Підів CNI (1 хв)»# Завдання: Перевірити що Під'и CNI працюютьk -n kube-system get pods | grep -E "calico|flannel|weave|cilium"Вправа 8: Налагодження мережевого з’єднання (2 хв)
Розділ «Вправа 8: Налагодження мережевого з’єднання (2 хв)»# Завдання: Повне налагодження з'єднанняk exec <pod> -- nslookup <service> # DNSk exec <pod> -- nc -zv <service> 80 # TCPk get endpoints <service> # EndpointsНаступний модуль
Розділ «Наступний модуль»Переходьте до Модуль 5.6: Усунення несправностей Сервісів для глибшого занурення в усунення несправностей Сервісів, Ingress та LoadBalancer.