Download PDF
Download page IP-fabric.
IP-fabric
IP-fabric — один из типов настройки сети кластера. Такой тип настройки позволяет создавать виртуальные машины (ВМ) с публичными IP-адресами в приватной сети.
ВМ в кластере IP-fabric получают IPv4-адреса с маской /32 или IPv6-адреса с маской /128. В качестве шлюза по умолчанию для каждой ВМ используется отдельный виртуальный интерфейс. Узлы кластера выполняют функцию маршрутизаторов.
Маршрутизация в кластере осуществляется с использованием протокола iBGP. Передачу информации о маршрутах iBGP выполняет оборудование Route Reflector (RR). В качестве такого оборудования могут использоваться физические или виртуальные маршрутизаторы и/или серверы. Рекомендуем использовать не менее двух комплектов оборудования RR в одном кластере — основного и резервного.
Для работы IPv4-сети в кластере используйте не менее одного комплекта оборудования RR с IPv4-адресом, для работы IPv6-сети — не менее одного комплекта с IPv6-адресом.
Преимущества использования IP-fabric:
- снижение объёма служебного трафика;
- экономия адресного пространства;
- изоляция трафика ВМ;
- отсутствие привязки IP-адресов к узлам кластера;
- возможность оперативной миграции ВМ между узлами кластера.
На узлах кластера IP-fabric не поддерживается создание сетевых мостов (бриджей).
Логика работы
При создании ВМ в кластере IP-fabric:
- Платформа VMmanager:
- Создаёт отдельный виртуальный интерфейс <vmname>_net0. Например, для ВМ с именем sea_gold, интерфейс будет называться sea_gold_net0. Все виртуальные интерфейсы на узле будут иметь одинаковые IP и MAC-адреса.
- Устанавливает IP-адрес созданного интерфейса в качестве шлюза для ВМ. Маршрутизация между ВМ и шлюзом осуществляется через соединение "точка-точка" (PtP).
- Добавляет созданный маршрут в конфигурацию сервиса FRR на узле кластера.
- Создаёт отдельный виртуальный интерфейс <vmname>_net0. Например, для ВМ с именем sea_gold, интерфейс будет называться sea_gold_net0. Все виртуальные интерфейсы на узле будут иметь одинаковые IP и MAC-адреса.
- Сервис FRR передаёт информацию о созданном маршруте по протоколу iBGP на оборудование RR.
- Оборудование RR передаёт информацию о маршруте на оборудование Core Gateway. После этого ВМ становится доступна из внешней сети (интернета).
iBGP — протокол динамической маршрутизации, отвечающий за обмен маршрутами между узлами и сетевым оборудованием.
Node 1, Node 2, Node 3 — узлы кластера.
VM1, VM2, VM3... — виртуальные машины.
VNET — виртуальные сетевые интерфейсы.
Core Gateway — оборудование, обеспечивающее доступ во внешнюю сеть (интернет).
FRR — сервис на узле кластера, реализующий работу протокола iBGP.
Linux CORE — ядро ОС на узле кластера
Route Reflector — сервер или сетевое оборудование, принимающее информацию о маршрутах от узлов и передающее её в Core Gateway.
Backup Route Reflector — резервный комплект оборудования Route Reflector.
Порядок настройки
- В VMmanager:
- Создайте пул IP-адресов для ВМ. Подробнее см. Работа с пулами.
- Создайте кластер с типом настройки сети IP-fabric. Подробнее см. Создание кластера. При создании укажите:
- IP-адрес шлюза для ВМ. VMmanager будет присваивать этот адрес всем виртуальным интерфейсам на узле кластера и использовать его только для маршрутизации между ВМ на узле. Рекомендуем указать частный IP-адрес (например, 10.0.0.1). Этот адрес не должен использоваться где-либо ещё в локальной сети;
- BGP-комьюнити;
- IP-адреса и номера автономных систем оборудования RR.
Добавьте узлы в кластер. Подробнее см. Управление серверами кластера.
На узлах кластера IP-fabric с виртуализацией KVM должна быть установлена ОС AlmaLinux 8, с виртуализацией LXD — ОС Ubuntu 20.04.
- Настройте BGP-сессии для каждого узла кластера на оборудовании RR: укажите в настройках IP-адреса узлов и номера автономных систем BGP. Максимальное количество BGP-сессий — 32.
Пример настройки
В примере рассматривается настройка IP-fabric в кластере серверов, используемых в качестве гипервизоров. Роль Core Gateway выполняет маршрутизатор Juniper MX. В качестве Route Reflector используются физические серверы с ОС Linux.
Подготовка
Для настройки понадобится следующее оборудование:
- сервер с платформой VMmanager;
- один или несколько узлов кластера с установленной ОС AlmaLinux 8 или Ubuntu 20.04;
- один или два сервера Route Reflector;
- маршрутизатор Juniper MX.
Перед настройкой:
- Получите у провайдера информацию о настройках BGP: номере автономной системы и комьюнити.
- Убедитесь, что протокол BGP настроен и функционирует правильно.
- Создайте пул IP-адресов для виртуальных машин в VMmanager.
Настройка маршрутизатора Core Gateway
Чтобы настроить "соседство" Core Gateway и Route Reflector:
Добавьте в конфигурацию маршрутизатора новый фильтр:
set policy-options policy-statement VM term isp-ipv4 from protocol bgp set policy-options policy-statement VM term isp-ipv4 from route-filter <filter> orlonger set policy-options policy-statement VM term isp-ipv4 then accept set policy-options policy-statement VM then reject set policy-options policy-statement reject-all then reject
CODE<filter> — список сетей из VMmanager
Добавьте в конфигурацию маршрутизатора новую группу:
set protocols bgp group VM import VM set protocols bgp group VM export reject-all set protocols bgp group VM peer-as <as> set protocols bgp group VM neighbor <rr_ip>
CODE<as> — номер автономной системы
<rr_ip> — IP-адрес Route Reflector
Проверьте и примените конфигурацию:
commit check
CODEcommit confirmed 5
CODEПроверьте, что маршруты BGP получены:
show bgp group VM detail
CODEПодтвердите изменения в конфигурации:
commit
CODE
Настройка серверов Route Reflector
Чтобы настроить "соседство" между Route Reflector, Core Gateway и узлами кластера, установите и настройте ПО FRRouting (FRR). Вы можете автоматизировать этот процесс с помощью скрипта.
Для установки FRR сервер должен иметь прямой доступ к сети Интернет без использования прокси. При необходимости настройте правила сети так, чтобы подключение к Интернет выполнялось в обход прокси через маршрутизаторы или межсетевые экраны.
Если для Route Reflector используется виртуальная машина под управлением VMmanager, запустите на ней скрипт Route Reflector:
- Перейдите в Виртуальные машины → меню → Запустить скрипт.
- Выберите скрипт Route Reflector и укажите его параметры:
- AS — номер автономной системы BGP.
- NEIGHBOR — IP-адрес "соседа" — узла кластера VMmanager.
- PREFIX — префикс IP-сетей, которые будет принимать Route Reflector.
- Поддержка VxLAN — нужно ли передавать информацию о виртуальных сетях (VxLAN).
- AS — номер автономной системы BGP.
- Нажмите Запустить скрипт.
Если для Route Reflector используется физический сервер:
Создайте файл route_reflector.sh следующего содержания:
#!/bin/sh # tags: debian10,debian11,ubuntu2004,alma8 RNAME=route_reflector set -x LOG_PIPE=/tmp/log.pipe.$$ mkfifo ${LOG_PIPE} LOG_FILE=/root/${RNAME}.log touch ${LOG_FILE} chmod 600 ${LOG_FILE} tee < ${LOG_PIPE} ${LOG_FILE} & exec > ${LOG_PIPE} exec 2> ${LOG_PIPE} killjobs() { jops="$(jobs -p)" test -n "${jops}" && kill ${jops} || : } trap killjobs INT TERM EXIT echo echo "=== Recipe ${RNAME} started at $(date) ===" echo if [ -f /etc/redhat-release ]; then OSNAME=centos else OSNAME=debian fi Service() { # $1 - name # $2 - command if [ -n "$(which systemctl 2>/dev/null)" ]; then systemctl ${2} ${1}.service else if [ "${2}" = "enable" ]; then if [ "${OSNAME}" = "debian" ]; then update-rc.d ${1} enable else chkconfig ${1} on fi else service ${1} ${2} fi fi } if [ "${OSNAME}" = "debian" ]; then export DEBIAN_FRONTEND="noninteractive" # Wait firstrun script while ps uxaww | grep -v grep | grep -Eq 'apt-get|dpkg' ; do echo "waiting..." ; sleep 3 ; done apt-get update --allow-releaseinfo-change || : apt-get update test -f /usr/bin/which || apt-get -y install which which lsb_release 2>/dev/null || apt-get -y install lsb-release which logger 2>/dev/null || apt-get -y install bsdutils OSREL=$(lsb_release -s -c) apt install -y curl ca-certificates curl -s https://deb.frrouting.org/frr/keys.asc | apt-key add - FRRVER="frr-stable" echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) $FRRVER | tee -a /etc/apt/sources.list.d/frr.list apt update apt -y install frr frr-pythontools else OSREL=$(printf '%.0f' $(rpm -qf --qf '%{version}' /etc/redhat-release)) FRRVER="frr-stable" yum install -y curl curl -O https://rpm.frrouting.org/repo/$FRRVER-repo-1-0.el8.noarch.rpm yum install -y ./$FRRVER* yum install -y frr frr-pythontools fi sed -i '/bgpd=/s/no/yes/' /etc/frr/daemons CONFIG="/etc/frr/frr.conf" ip=$(ip route get 1 | grep -Po '(?<=src )[^ ]+') if grep -q "router bgp" $CONFIG; then # Already exists. adding new neighbor or new network if grep -q "($NEIGHBOR)" $CONFIG; then # This neighbor already exists true else sed -i "/extended-nexthop/a neighbor ($NEIGHBOR) peer-group fabric" $CONFIG sed -i "/extended-nexthop/a neighbor ($NEIGHBOR) remote-as ($AS)" $CONFIG fi if [ "($VXLAN)" = "yes" ]; then # need to add vxlan? if grep -q "address-family l2vpn evpn" $CONFIG; then # already enabled true else sed -i '/exit-address-family/cexit-address-family\ !\ address-family l2vpn evpn\ neighbor fabric activate\ neighbor fabric route-reflector-client\ advertise-all-vni\ exit-address-family' $CONFIG fi fi if grep -q "($PREFIX)" $CONFIG; then # already added true else if ! [ "($PREFIX)" = "()" ]; then cat << EOF >> $CONFIG ip prefix-list IPV4_PLIST permit ($PREFIX) ge 32 le 32 ! EOF fi fi else cat << EOF > $CONFIG router bgp ($AS) bgp router-id $ip bgp log-neighbor-changes no bgp default ipv4-unicast neighbor fabric peer-group neighbor fabric capability extended-nexthop neighbor ($NEIGHBOR) remote-as ($AS) neighbor ($NEIGHBOR) peer-group fabric ! address-family ipv4 unicast neighbor fabric activate neighbor fabric route-map IPV4_IMPORT in neighbor fabric route-reflector-client exit-address-family ! EOF if [ "($VXLAN)" = "yes" ]; then cat << EOF >> $CONFIG address-family l2vpn evpn neighbor fabric activate neighbor fabric route-reflector-client advertise-all-vni exit-address-family EOF fi cat << EOF >> $CONFIG exit ! route-map IPV4_IMPORT permit 5 match ip address prefix-list IPV4_PLIST exit ! ip nht resolve-via-default ! EOF if ! [ "($PREFIX)" = "()" ]; then cat << EOF >> $CONFIG ip prefix-list IPV4_PLIST permit ($PREFIX) ge 32 le 32 ! EOF fi Service frr enable fi sed -i '/Nice/d' /usr/lib/systemd/system/frr.service sed -i '/Nuce/d' /lib/systemd/system/frr.service systemctl daemon-reload Service frr restart
BASH- Замените макросы в тексте файла:
- ($AS) — на номер автономной системы BGP.
- ($NEIGHBOR) — на IP-адрес "соседа" — узла кластера VMmanager.
- ($PREFIX) — на префикс IP-сетей, которые будет принимать Route Reflector.
- ($VXLAN) — на:
- уеs — если сервис должен передавать информацию о виртуальных сетях (VxLAN);
- no — если информацию о виртуальных сетях передавать не нужно.
Запустите скрипт:
sh route_reflector.sh
BASH
При добавлении новых узлов в кластер информацию о них нужно будет добавить в конфигурационный файл FRR. Для этого повторно запустите скрипт с нужными параметрами или внесите изменения вручную в файл /etc/frr/frr.conf.
Настройка VMmanager
Для настройки IP-fabric в VMmanager:
- Cоздайте кластер с типом сети IP-Fabric. При создании укажите настройки для соединения с Core Gateway и Route Reflector.
- Подключите серверы в созданный кластер.
- Создайте ВМ в кластере.
Может быть полезно
Связанные статьи: