Основи Juniper Contrail, і як його поставити собі в лабу

Несподівано виявилося, що на Хабре немає практично ніякої інформації про Juniper Contrail (так-так, SDN) — і я вирішив самотужки заповнити упущення.

У цій статті хочу коротко розповісти про те, що таке Contrail, у яких формах він доступний і як його поставити собі в лабу. Більш конкретно, ставити будемо Contrail Cloud 3.2.0.

image

Основи Contrail
Задача, яку вирішує Contrail — побудова гнучких і масштабованих віртуальних мереж. Віртуальну мережу можна розуміти як заміну старим-добрим VLAN, в даному випадку реалізовану приблизно як провайдерский L3VPN/EVPN. При цьому з точки зору підключених клієнтів все виглядає так, як ніби всі їхні віртуальні машини та фізичні сервера підключені через звичайний комутатор.

Найпростіше описати Contrail як оверлейный SDN. Software-Defined Networking тут розуміється в сенсі класичного визначення ONF — поділ forwarding plane і control plane, плюс централізація control plane в даному випадку в Contrail-контролері.

Слово «оверлейный» вказує на те, що є насправді дві мережі:

  1. Фізична «фабрика», від якої потрібно «лише» забезпечити доступність IP між підключеними фізичними пристроями (серверами, роутерами-шлюзами), і
  2. Оверлей — мережа, складена з тунелів, прокладених між серверами і роутерами-шлюзами. Тунелі можуть бути MPLS over UDP, MPLS over GRE або VXLAN (перераховано в порядку пріоритету, встановленого за замовчуванням; хоча є деякі нюанси, в цілому конкретний тип тунелю є деталлю реалізації).
Contrail-контролер займається тим, щоб управляти віртуалізованої оверлейной мережею в Цоді або провайдерском хмарі, і зовсім не лізе в роботу фабрики. Відповідаючи на питання «навіщо?» і «чому?», в якості сильних сторін Contrail можна відзначити:

  • Масштабованість — система побудована за тим же принципами, що перевірене часом рішення BGP/MPLS VPN.
  • Гнучкість — зміна конфігурації віртуальної мережі не вимагає змін у фізичній мережі. Це природний наслідок оверлейности і використання принципу «smart edge simple core».
  • Программируемость — додатки можуть керувати мережею як системою через Contrail API.
  • NFV (віртуалізація мережевих функцій) aka service chains (ланцюжка сервісів) — дуже важливий аспект, що дозволяє проганяти трафік через задані віртуалізовані мережеві сервіси (віртуальний фаєрвол, кеш, тощо). При цьому абсолютно рівноправні як VNF від Juniper (vSRX, vMX) так і будь-які продукти інших вендорів.
  • Потужна аналітика і візуалізація результатів, включаючи «Underlay Overlay Mapping» — це коли Contrail показує вам, як трафік між віртуальними мережами йде «насправді» по фізичній мережі.
  • Open Source — всі вихідні коди відкриті, плюс для взаємодії частин використовуються тільки стандартні протоколи. Сайт проекту — www.opencontrail.org.
  • Проста інтеграція з існуючими MPLS VPNs.
Ось картинка з Contrail Architecture whitepaper, показує як система влаштована в цілому:



На верхньому рівні працює інфраструктурний оркестратор — частіше всього це буде OpenStack (є варіанти інтеграції Contrail з vCenter і Kubernetes). У ньому мережа налаштовується через високорівневі команди (Neutron API) — при цьому деталі реалізації залишаються турботою SDN-контролера.

Сам SDN-контролер складається з чотирьох основних типів нодів:

  • Конфігураційні ноди — відповідають за надання REST API оркестратору і іншим додаткам. «Компілює» інструкції, що надходять «згори», в конфігурації, що застосовуються в конкретній мережі на низькому рівні.
  • Контрольні ноди — приймають конфігурацію від конфігураційних нодів і програмують vRouter-и (див. далі) і фізичні роутери.
  • Аналітика — ноди, збирають статистику потоків, логи, та інше.
  • База даних (не показана на картинці) — БД Cassandra, в якій зберігається конфігурація і зібрана аналітикою інформація.
На одному фізичному (або навіть віртуальному) сервері може бути запущено кілька ролей, в лабе можна навіть робити контролер все-в-одному (плюс обчислювальні ноди окремо).

Тепер трохи про форвардінг. Весь трафік між віртуальними машинами або контейнерами в системі бігає по тунелях, терминируемым на vRouter, фізичному роутері або OVSDB-свічі (цей варіант я тут не розглядаю). vRouter є софтверної компонентою (модуль ядра Linux за замовчуванням, user space якщо використовується DPDK), другою важливою частиною рішення Contrail (першої є власне контролер). vRouter-и встановлюються і запускаються на обчислювальних ноди кластера (Virtualized Server на картинці) — там же, де запускаються машини/контейнери.

Ще раз, основним завданням vRouter-а є терминирование оверлейного тунелю. vRouter за функціями відповідає PE (provider edge) роутера в MPLS VPN.

Який буває Contrail
Опції використання Contrail у нас наступні (при цьому фічі та код скрізь одні й ті ж і розрізняються тільки опції підтримки):

  • OpenContrail — варіант, доступний безкоштовно. Установка описана в Quick Start Guide.
  • Contrail Networking — комерційний варіант, підтримуваний Juniper TAC.
  • Contrail Cloud — знову ж комерційний варіант, причому включає в себе як сам Contrail, так і Canonical/Ubuntu OpenStack — обидва підтримувані Juniper TAC.
Крім того, є варіант з підтримкою OpenContrail від Mirantis.

Я в цій статті піду по шляху найменшого опору і покажу, як встановити Contrail Cloud.

Установка Contrail Cloud
Ставити будемо Contrail Cloud 3.2.0 — останню версію, на момент написання статті. Для установки я використав один ESXi 6.0 сервер з 4-ядерним hyper-threading CPU і 32GB RAM. Цього виявляється достатньо для тестів, навіть з запасом (можна ще запустити пару vMX).

Схема віртуальної лабораторії буде виглядати ось так:

image

Зверніть увагу, що Compute-ноди (як і ноди контролера) у нас в лабе віртуалізовані, тобто виртуалки будуть запускатися всередині інших виртуалок. Слід піти в налаштування гіпервізора і там поставити прапорець біля опції «Expose hardware assisted virtualization to the guest OS» для кожного Compute-нода. Як видно з testbed.py перші два у нас власне для віртуальних машин, і використовують KVM, а третій — для контейнерів Docker.

Розгортаємо всі 5 виртуалок з параметрами як зазначено на схемі. При цьому для compute-нодів параметри насправді визначаються тим, скільки і яких машин/контейнерів ви збираєтеся запускати, а ось для контролера вказані параметри близькі до мінімально припустимим.

Ставимо на всі машини мінімальну Ubuntu 14.04.4 (ubuntu-14.04.4-server-i386.iso). Строго цю версію, як зазначено в документації Contrail 3.2.0 — це дуже важливо! Інакше дуже легко можна нарватися на несумісність пакетів. І саме мінімальну, з тієї ж причини. Голий мінімум плюс тільки OpenSSH Server. Чомусь багато людей серйозно не ставляться до таким простим інструкціям і потім у них не працює :)

Далі прописуємо адреси в /etc/network/interfaces, а в /etc/hosts задаємо, щоб не морочитися з DNS,

10.10.10.230 openstack
10.10.10.231 control
10.10.10.233 compute-1
10.10.10.234 compute-2
10.10.10.235 compute-3

Встановлювати Contrail будемо з допомогою Fabric-скриптів. Цей варіант для лаби найбільш простий, для продакшену є ще Server Manager (з Puppet під капотом), але це як-небудь іншим разом. Для Fabric нам знадобиться вирішити root login для SSH, наприклад так:

echo -e "contrail\ncontrail" | sudo passwd root
sudo sed -i.bak 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo service ssh restart

Ще бажано включити ntp на всіх ноди:

sudo apt-get install ntp

Далі, на першому ноде, копіюємо пакет contrail-install-packages_3.2.0.0-19-ubuntu-14-04mitaka_all.deb в /tmp і встановлюємо його:

dpkg -i /tmp/contrail-install-packages_3.2.0.0-19-ubuntu-14-04mitaka_all.deb 

Запускаємо інсталяційний скрипт:

cd /opt/contrail/contrail_packages
./setup.sh

Тепер важливий момент. Потрібно створити файл /opt/contrail/utils/fabfile/testbeds/testbed.py, який буде описувати наш кластер. Ось робочий приклад:

from fabric.api import env

# FOR LAB ONLY, DEFAULT IS 250
minimum_diskGB = 10

# MANAGEMENT USERNAME/IP ADDRESSES
host1 = 'root@10.10.10.230'
host2 = 'root@10.10.10.231'
host3 = 'root@10.10.10.233'
host4 = 'root@10.10.10.234'
host5 = 'root@10.10.10.235'

# EXTERNAL ROUTER DEFINITIONS
ext_routers = []

# AUTONOMOUS SYSTEM NUMBER
router_asn = 64512

# HOST FROM WHICH THE FAB COMMANDS ARE TRIGGERED
# TO INSTALL AND PROVISION
host_build = 'root@10.10.10.230'

# ROLE DEFINITIONS
env.roledefs = {
'all': [host1, host2, host3, host4, host5],
'cfgm': [host1],
'openstack': [host1],
'control': [host2],
'compute': [host3, host4, host5],
'collector': [host1],
'webui': [host1],
'database': [host1],
'build': [host_build]
}

# DOCKER
env.hypervisor = {
host5 : 'docker',
}

# NODE HOSTNAMES
env.hostnames = {
'host1': ['openstack'],
'host2': ['control'],
'host3': ['compute-1'],
'host4': ['compute-2'],
'host5': ['compute-3'],
}

# OPENSTACK ADMIN PASSWORD
env.openstack_admin_password = 'contrail'

# NODE PASSWORDS
env.passwords = {
host1: 'contrail',
host2: 'contrail',
host3: 'contrail',
host4: 'contrail',
host5: 'contrail', 
host_build: 'contrail',
}

Значення різних розділів, думаю, має бути зрозуміло без додаткових пояснень.

Ще всього кілька кроків. Встановимо пакети на ноди:

cd /opt/contrail/utils/
fab install_pkg_all:/tmp/contrail-install-packages_3.2.0.0-19-ubuntu-14-04mitaka_all.deb

Поміняємо ядро на рекомендоване:

fab upgrade_kernel_all

(версія ядра зміниться з 4.2.0-27-generic на 3.13.0-85-generic та ноди перезавантажаться).

Далі перезаходим на перший нод і:

cd /opt/contrail/utils/
fab install_contrail

І, нарешті, останній крок (самий тривалий, займає близько години в моєму випадку):

fab setup_all

В принципі, все. Але в такому вигляді при заданих параметрах виртуалок Contrail Cloud пригальмовує. Застосуємо кілька трюків для його прискорення (використовувати тільки для лаби):

echo 'export JAVA_OPTS="-Xms100m -Xmx500m"' > /etc/zookeeper/java.env

sed -i.bak 's/workers = 40/workers = 1/' /etc/nova/nova.conf

sed -i.bak 's/#MAX_HEAP_SIZE="4G"/MAX_HEAP_SIZE="1G"/' /etc/cassandra/cassandra-env.sh
sed -i.bak 's/#HEAP_NEWSIZE="800M"/HEAP_NEWSIZE="500M"/' /etc/cassandra/cassandra-env.sh

(після чого сервера треба перезавантажити).

Тепер можна зайти у веб-інтерфейс. Openstack Horizon повинен бути доступний на 10.10.10.230/horizon, а Contrail Web UI — на 10.10.10.230:8080. З нашими установками логін — admin, пароль — contrail.

image

Висновки
Сподіваюся, що ця стаття допоможе зацікавленим людям почати розбиратися і працювати з Contrail 3.2. Повна документація по продукту є на сайті Juniper. Деякі приклади того, як смикати Contrail через API, я намагаюся збирати ось тут.

Всім успіхів у роботі та гарного настрою!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.