Translate

Показ дописів із міткою bridge. Показати всі дописи
Показ дописів із міткою bridge. Показати всі дописи

неділя, 13 грудня 2015 р.

LXC Сontainers. Part II: Network Configuration

У попередній статті я описав, що таке LXC та чому ця технологія може вас зацікавити.

Перед прочитанням тексту нижче, бажано звісно розуміти базові речі про LXC чи просто про контейнеризацію, тому дуже раджу хоча б переглянути статтю, згадану вище.
У цій статті спробуємо розібратись які можливості надає LXC для конфігурації мережевого стеку та і що власне ОС Linux може запропонувати для цього.

Конфігурація з'єднання з мережею описується окремо для кожного контейнера в /var/lib/lxc/<container_name>/config. По замовчуванню, мережевий зв’язок для контейнерів LXC налаштовується за рахунок додаткової приватної мережі 10.0.3.0/24, що NAT-иться на хост машині: всі пакети, що приходять на інтерфейс lxcbr0 (10.0.3.1, gateway) за допомогою маскарадингу динамічно транслюються в публічний айпі і навпаки. Видає IP-адреси dnsmasq, що працює на LXC-хості, а діапазон можливих адрес описаний в /etc/default/lxc-net. На практиці це виглядає так:

# vim /etc/default/lxc-net
...
USE_LXC_BRIDGE="true"

LXC_BRIDGE="lxcbr0"
LXC_ADDR="10.0.3.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.3.0/24"
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
LXC_DHCP_MAX="253"
...

Налаштування Iptables на хості, одразу після установки lxc, мають такий вигляд:

# iptables-save
...
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
...
COMMIT


пʼятниця, 10 травня 2013 р.

Віртуалізація з KVM

KVM (або Kernel-based Virtual Machine) - це програмне рішення, що забезпечує віртуалізацію в середовищі Linux на платформі x86 (а з версією ядра 3.9 для ARMv7 також), яка підтримує апаратну віртуалізацію на базі Intel VT або AMD SVM.
Програмне забезпечення KVM складається з завантаження модуля ядра (що зветься kvm.ko), що надає базовий сервіс віртуалізації, специфічного для процесора модуля kvm-amd.ko або kvm-intel.ko, і компонентів для користувача режиму (модифікованого QEMU). Всі компоненти KVM є програмним забезреченням із відкритим вихідним кодом. Компонент ядра, необхідний для роботи KVM, включений в основну гілку Linux починаючи з версії 2.6.20 (лютий 2007). Тож для роботи з даним типом віртуалізації варто мати лише ядро більш-менш сучасної версії.
Самостійно KVM не виконує емуляції. Замість цього програма (QEMU), що працює в просторі користувача, використовує інтерфейс /dev/kvm для налаштування адресного простору гостя віртуальної машини, через нього ж і емулює пристрої введення-виведення і відеоадаптер. (c) Wikipedia

Тож приступаємо! Установка КVM віртулізації буде проведено для Ubuntu 12.10. Спершу перевіримо чи підтримує процесор хост-системи апаратну віртуалізацію:

# egrep '(vmx|svm)' --color=always /proc/cpuinfo

Має видати щось на зразок цього:

flags:  fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt lahf_lm arat dtherm tpr_shadow vnmi flexpriority ept vpid

Якщо вивід відсутній - то можна завершувати спроби встановлення KVM, адже даний тип віртуалізації не працює на процесорах без підтримки SVM чи Intel VT. Як варіант можна використати XEN PV (паравіртуалізацію), що власне є також дуже хорошим варіантом. Але загалом у всіх відносно сучасних процесорах не має бути таких проблем.
Тепер встановимо супутнє програмне забезпечення:

# sudo -i
# apt-get install ubuntu-virt-server python-vm-builder kvm-ipxe

vm-builder - це python-скрипт для зручного створення віртуальних машин Ubuntu.
Додамо користувача root в групи libvirtd та kvm:

# adduser `id -un` libvirtd
# adduser `id -un` kvm

Перелогінюємось і перевіряємо чи коректно було встановлено KVM:

# virsh -c qemu:///system list
  Id    Name                           State
----------------------------------------------------