Модуль 3.3: Мережеві простори імен та veth
Основи мереж | Складність:
[MEDIUM]| Час: 30–35 хв
Передумови
Розділ «Передумови»Перед початком цього модуля:
- Обов’язково: Модуль 2.1: Простори імен Linux
- Обов’язково: Модуль 3.1: Основи TCP/IP
- Бажано: Розуміння того, як працюють мережеві мости (bridges) та комутатори (switches).
Що ви зможете робити після цього модуля
Розділ «Що ви зможете робити після цього модуля»Після завершення цього модуля ви зможете:
- Створити мережеві простори імен та з’єднати їх за допомогою veth-пар
- Пояснити, як працює мережа контейнерів на рівні Linux (namespaces + bridges + veth)
- Відстежити пакет від одного контейнера до іншого через мережевий стек
- Дебажити з’єднання між контейнерами, перевіряючи мости, маршрути та правила iptables
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Кожен контейнер і кожен под Kubernetes має власний мережевий простір імен (Network Namespace). Розуміння того, як ці простори працюють і як вони з’єднуються між собою, пояснює:
- Мережі подів — як поди отримують IP-адреси та спілкуються.
- Відлагодження мережі — чому мій контейнер не бачить мережу?
- CNI плагіни — що вони насправді роблять “під капотом”.
- Ізоляцію мережі — як поди залишаються ізольованими, але при цьому з’єднаними.
Що таке Мережевий простір імен?
Розділ «Що таке Мережевий простір імен?»Network Namespace забезпечує ізольований мережевий стек для процесу.
┌─────────────────────────────────────────────────────────────┐│ ІЗОЛЯЦІЯ NETWORK NAMESPACE │├─────────────────────────────────────────────────────────────┤│ ││ Хостова мережа: Мережа контейнера: ││ ┌───────────────────────┐ ┌────────────────────────┐ ││ │ eth0: 192.168.1.100 │ │ eth0: 10.0.0.5 │ ││ │ lo: 127.0.0.1 │ │ lo: 127.0.0.1 │ ││ │ docker0: 172.17.0.1 │ │ │ ││ │ │ │ Своя таблиця маршрутів │ ││ │ Своя таблиця маршрутів│ │ Свої правила iptables │ ││ │ Свої правила iptables │ │ Свої порти (80, 443) │ ││ └───────────────────────┘ └────────────────────────┘ ││ ││ Це абсолютно окремі мережеві стеки всередині одного ядра. │└─────────────────────────────────────────────────────────────┘Віртуальний Ethernet (veth)
Розділ «Віртуальний Ethernet (veth)»veth pairs — це віртуальні мережеві інтерфейси, що працюють як “труба”: пакети, надіслані в один кінець, виходять з іншого.
┌─────────────────────────────────────────────────────────────┐│ VETH PAIR │├─────────────────────────────────────────────────────────────┤│ ││ ┌────────────────────┐ ┌────────────────────┐ ││ │ veth-host │ ═══════ │ veth-container │ ││ │ (на хості) │ труба │ (в контейнері) │ ││ └────────────────────┘ └────────────────────┘ ││ ││ Це працює як віртуальний Ethernet-кабель. │└─────────────────────────────────────────────────────────────┘Мережеві мости (Linux Bridges)
Розділ «Мережеві мости (Linux Bridges)»Bridge з’єднує декілька мережевих інтерфейсів на рівні 2 (як віртуальний комутатор).
┌─────────────────────────────────────────────────────────────┐│ LINUX BRIDGE │├─────────────────────────────────────────────────────────────┤│ ││ Контейнер 1 Контейнер 2 Контейнер 3 ││ ┌──────────┐ ┌──────────┐ ┌──────────┐ ││ │ eth0 │ │ eth0 │ │ eth0 │ ││ │10.0.0.2 │ │10.0.0.3 │ │10.0.0.4 │ ││ └────┬─────┘ └────┬─────┘ └────┬─────┘ ││ │ │ │ ││ │ veth │ veth │ veth ││ ▼ ▼ ▼ ││ ┌────────────────────────────────────────────────────┐ ││ │ br0 (bridge) │ ││ │ 10.0.0.1/24 │ ││ └────────────────────────────────────────────────────┘ ││ │└─────────────────────────────────────────────────────────────┘Мережі в Kubernetes
Розділ «Мережі в Kubernetes»Kubernetes використовує CNI (Container Network Interface) для автоматизації всього процесу:
- Створення мережевого простору імен для пода.
- Створення пари veth.
- Перенесення одного кінця в простір пода (він стає там
eth0). - Підключення іншого кінця до мосту або мережі хоста.
- Призначення IP-адреси пода.
Чому контейнери в одному поді ділять localhost? Тому що всі вони знаходяться в одному Network Namespace. У них одна IP-адреса на всіх.
Тест
Розділ «Тест»-
Що таке veth pair?
Відповідь
Це пара віртуальних інтерфейсів, з'єднаних між собою. Вони використовуються для того, щоб прокинути мережевий зв'язок із хост-системи всередину ізольованого контейнера. -
Навіщо потрібен Linux Bridge у мережах контейнерів?
Відповідь
Він працює як віртуальний комутатор (switch), з'єднуючи багато контейнерів на одному хості в одну мережу, щоб вони могли спілкуватися між собою. -
Яка команда в Linux дозволяє керувати мережевими просторами імен?
Відповідь
Команда `ip netns`. -
Чи мають контейнери в одному поді Kubernetes різні IP-адреси?
Відповідь
Ні. Всі контейнери в межах одного пода ділять один мережевий простір імен і мають одну спільну IP-адресу.
Практична вправа
Розділ «Практична вправа»Завдання: Створити ізольовану мережу для “контейнера” вручну.
- Створіть новий простір імен:
Terminal window sudo ip netns add my-container - Створіть пару veth:
Terminal window sudo ip link add veth-host type veth peer name veth-guest - Прокиньте один кінець у простір імен:
Terminal window sudo ip link set veth-guest netns my-container - Налаштуйте IP всередині “контейнера”:
Terminal window sudo ip netns exec my-container ip addr add 10.1.1.2/24 dev veth-guestsudo ip netns exec my-container ip link set veth-guest upsudo ip netns exec my-container ip link set lo up - Перевірте зв’язок (пінг самого себе):
Terminal window sudo ip netns exec my-container ping -c 2 10.1.1.2
Критерії успіху: Ви вмієте створювати мережеві простори імен і підключати до них віртуальні інтерфейси.
Підсумок
Розділ «Підсумок»- Network Namespace ізолює порти, маршрути та IP.
- veth pair — це віртуальний кабель між хостом та контейнером.
- Bridge — це віртуальний комутатор для багатьох контейнерів.
- CNI автоматизує всю цю складність для Kubernetes.
Далі: Модуль 3.4: iptables та netfilter — дізнайтеся, як Linux фільтрує та перенаправляє пакети (основа K8s Services).