Перейти до вмісту

Модуль 3.3: Мережеві простори імен та veth

Hands-On Lab Available
Ubuntu advanced 40 min
Launch Lab ↗

Opens in Killercoda in a new tab

Основи мереж | Складність: [MEDIUM] | Час: 30–35 хв

Перед початком цього модуля:


Що ви зможете робити після цього модуля

Розділ «Що ви зможете робити після цього модуля»

Після завершення цього модуля ви зможете:

  • Створити мережеві простори імен та з’єднати їх за допомогою 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 використовує CNI (Container Network Interface) для автоматизації всього процесу:

  1. Створення мережевого простору імен для пода.
  2. Створення пари veth.
  3. Перенесення одного кінця в простір пода (він стає там eth0).
  4. Підключення іншого кінця до мосту або мережі хоста.
  5. Призначення IP-адреси пода.

Чому контейнери в одному поді ділять localhost? Тому що всі вони знаходяться в одному Network Namespace. У них одна IP-адреса на всіх.


  1. Що таке veth pair?

    Відповідь Це пара віртуальних інтерфейсів, з'єднаних між собою. Вони використовуються для того, щоб прокинути мережевий зв'язок із хост-системи всередину ізольованого контейнера.
  2. Навіщо потрібен Linux Bridge у мережах контейнерів?

    Відповідь Він працює як віртуальний комутатор (switch), з'єднуючи багато контейнерів на одному хості в одну мережу, щоб вони могли спілкуватися між собою.
  3. Яка команда в Linux дозволяє керувати мережевими просторами імен?

    Відповідь Команда `ip netns`.
  4. Чи мають контейнери в одному поді Kubernetes різні IP-адреси?

    Відповідь Ні. Всі контейнери в межах одного пода ділять один мережевий простір імен і мають одну спільну IP-адресу.

Завдання: Створити ізольовану мережу для “контейнера” вручну.

  1. Створіть новий простір імен:
    Terminal window
    sudo ip netns add my-container
  2. Створіть пару veth:
    Terminal window
    sudo ip link add veth-host type veth peer name veth-guest
  3. Прокиньте один кінець у простір імен:
    Terminal window
    sudo ip link set veth-guest netns my-container
  4. Налаштуйте IP всередині “контейнера”:
    Terminal window
    sudo ip netns exec my-container ip addr add 10.1.1.2/24 dev veth-guest
    sudo ip netns exec my-container ip link set veth-guest up
    sudo ip netns exec my-container ip link set lo up
  5. Перевірте зв’язок (пінг самого себе):
    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).