10.4.2. CLI¶
Описание¶
Cервис — это виртуальная сущность, агрегирующая в себе все настройки, которые описывают логику обработки запросов для группы Access points. А именно: Content Switch/Modification Rules, Persistence, Target-группа по умолчанию, SSL сертификаты.
Настройка¶
Вся настройка выполняется в конфигурационном режиме балансировщика. Чтобы в него перейти из режима enable, необходимо выполнить команду:
- trafficsoft# configuration terminal¶
Для того, чтобы создать Сервис, выполните команду:
- vlb service NAME¶
Создать Сервис.
После создания обязательно нужно добавить к нему Target-группу и Access point
- default-target-group NAME¶
Привязать Target-группу к Сервису.
Опциональным является добавление Persistence и Persistence timeout:
- persistence-group NAME¶
Добавить к Сервису Persistence-группу.
- persistence-timeout (30-65535)¶
Указать timeout (время жизни) persistence-записи после удаления последней сессии, которая к ней относится. По умолчанию 30 секунд. Настройка в Сервисе является более приоретной, чем в Persistence-группе.
Access points¶
Access point (Точка доступа) — это виртуальная точка доступа, которая описывается уникальным ключом из маски подсети, порта, VRF, типа и используется для предоставления доступа клиентов к сервису.
- access-point type <l4-tcp|l4-udp|tcp|ssl|http|https> ip A.B.C.D/M port <(0-65535)|any> [vrf VRFNAME] [dp-access-list ACLNAME] [tcp-profile NAME]¶
Добавить Access point к Сервису.
Ключ
Параметр
Описание
type
<l4-tcp|l4-udp|tcp|ssl|http|https>
Тип Access point, который определяет, какие именно настройки будут применены для обработки трафика на Access point
ip
A.B.C.D/M
IP-адрес, который будет слушать балансировщик. Можно указать как подсеть, так и единичный адрес с маской /32
port
<(0-65535)|any>
Порт, который будет слушать балансировщик. Можно указать
any
и тогда балансировщик будет слушать любой порт[vrf]
[VRFNAME]
По умолчанию на балансировщике создается vrf default
[dp-access-list]
[ACLNAME]
[tcp-profile]
NAME
Рассмотрим типы Access point:
Тип Access point |
Описание |
---|---|
l4-tcp/udp |
L4-балансировка TCP или UDP трафика. В этом режиме балансировщик не терминирует на себе сессии. Для переключения
необходимо установить параметр |
tcp |
L7-балансировка TCP-трафика. Работает только TCP-стек и балансировка |
ssl |
L7-балансировка шифрованного трафика. На данный момент поддерживается TLS 1.2. Работает только TCP-стек, SSL Offloading и балансировка. Не работает HTTP-парсер, то есть не будут работать Content Switch/Modification Rules |
http |
L7-Балансировка HTTP-трафика. Работает TCP-стек, балансировка и HTTP-парсер, поэтому доступны Content Switch/Modification Rules |
https |
L7-Балансировка https-трафика. Работает TCP-стек, SSL Offloading и балансировка, а также HTTP-парсер, то есть доступны Content Switch/Modification Rules, использование сертификатов и цепочек сертификатов |
Content Switch Rules¶
Это правила, по которым мы можем выбрать группу серверов для балансировки.
- http content-switch rule (0-65535) target-group NAME EXPRESSION...¶
Создать правило Content Switch.
Ключ
Параметр
Описание
(0-65535)
Приоритет правила. Если создано несколько правил, то их обработка остановится, когда будет выполнено одно из них. Например, создано 4 правила: условия в правилах с ID = 1 и ID = 2 не совпали с параметрами запроса от клиента, ID = 3 совпало, проверка прекращается, правило с ID = 4 не проверяется
target-group
NAME
Tartget-группа серверов, на которые будут балансироваться запросы
EXPRESSION
Выражение. Поддерживаются следующие логические операции:
==
равно!=
не равно=~
содержит!~
не содержитor
илиand
и
и следующие переменные:
@url
URL-адрес сайта@method
GET/POST/HEAD@body
Тело запросаHTTP Cookie
HTTP-заголовки
- no http content-switch rule (0-65535)¶
Удалить правило Content Switch с определенным ID.
Пример
Создадим правило:
Если заголовок Host
содержит домен trafficsoft.ru И в URL-адресе не содержится /images/
ИЛИ заголовок NFWare
равен test
, то отправить запрос на Target-группу tg1.
Тогда Expression будет следующим:
- http content-switch rule 0 target-group tg1 ((Host =~ trafficsoft.ru) and (@url !~ /images/)) or (NFWare == test)¶
Content Modification Rules¶
Правила изменения контента позволяют вставлять/удалять/изменять различную информацию в заголовки запросов пользователей к серверу и заголовки ответов от сервера.
vADC предоставляет специальные переменные, чтобы автоматически добавлять необходимую информацию к таким заголовкам.
Value |
Описание |
---|---|
|
Соответствует IP-адресу клиента |
|
Соответствует номеру порта клиента |
|
Соответствует IP-адресу Access point в запросе |
|
Соответствует номеру порта Access point |
|
Протокол, например, HTTP или HTTPS |
|
Значение заголовка Host в HTTP-запросе |
|
Значение URI в HTTP-запросе |
|
Добавляет |
|
Добавляет |
|
Добавляет |
- http content-modification rule (0-65535) <request|response> <header|cookie> set NAME VALUE...¶
Создать правило модификации со следующими параметрами:
Параметр |
Описание |
---|---|
|
Идентификационный номер правила. Выполняется по порядку. В отличии от ID в Content Switch Rules обработка останавливается, когда будут применены все правила |
|
Запрос от клиента к Worker или ответ от Worker клиенту |
|
Применить правило к заголовку или куки |
|
Название заголовка, куки или значение URL |
|
Значение, которое будет вставляться в поле Name |
- http content-modification rule (0-65535) <request|response> <header|cookie> delete NAME¶
Удалить определенное значение заголовка или куки из запроса или ответа.
- http content-modification rule (0-65535) request uri change VALUE...¶
Создать правило по изменению значения URL в запросе.
- no http content-modification rule (0-65535)¶
Удалить правило Content Modification с определенным ID.
Примеры
- http content-modification rule 1 request header set X-Real-IP $remote_addr¶
Создать заголовок
X-Real-IP
с IP-адресом клиента.
- http content-modification rule 2 request header set X-Real-IP $remote_addr:$remote_port¶
Создать заголовок
X-Real-IP
с IP-адресом и номером порта клиента.
- http content-modification rule 3 request header set X-Forwarded-Host $http_host¶
Создать заголовок
X-Forwarded-Host
.
- http content-modification rule 4 request header set X-Forwarded-Proto $scheme¶
Создать заголовок
X-Forwarded-Proto
.
- http content-modification rule 5 request header set X-Forwarded-For $x_forwarded_for¶
Создать заголовок
X-Forwarded-For
.
- http content-modification rule 6 request header set X-Forwarded-For $x_forwarded_for:$remote_port¶
Создать заголовок
X-Forwarded-For
с номером порта.
- http content-modification rule 7 request header set Forwarded $forwarded¶
Создать заголовок
Forwarded
.
- http content-modification rule 7 request header set Forwarded $forwarded;proto=$scheme¶
Создать заголовок
Forwarded
с дополнительной информацией. Данная команда создаст заголовокfor=192.168.1.4;proto=http
(где 192.168.1.4 - source IP-адрес) и добавит его к существующему заголовку, если такой уже существует.
- http content-modification rule 5 request header set Forwarded $transition_forwarded_for:$remote_port¶
Преобразовать заголовок
X-Forwarded-For
вForwarded
.В этом случае, если на vADC поступит HTTP-запрос, уже содержащий заголовок
X-Forwarded-For
, то к нему будет добален IP-адрес клиента, а также будет создан заголовокForwarded
, содержащий все узлы из заголовкаX-Forwarded-For
.Например, в HTTP-запросе содержится заголовок
X-Forwarded-For: 12.34.56.78, 23.45.67.89
. Тогда к пакету будет добавлен заголовокForwarded: for= 12.34.56.78, for=3.45.67.89, for=12.34.56.78:8000
.Следует отметить, что в этом случае, в заголовок
Forwarded
нельзя добавить значения из других заголовковX-Forwarded-By
/Proto
/Host
и т.д., т.к. нельзя точно определить на каких узлах эти заголовки были добавлены в запрос.
По умолчанию, vADC заменяет значение заголовка, если он уже находится в поступившем HTTP-запросе. Если нужно добавить заголовок к существующему, то поле значения заголовка должно начинаться с префикса
“$add:”
, например:
- http content-modification rule 0 request header set X-Real-IP $add:$remote_addr¶
- http content-modification rule 1 request header set X-Forwarded-For $add:$x_forwarded_for¶
Важно
Если в vADC будет добавлено несколько правил на модификацию одного и того же заголовка с переменными $x_forwarded_for
, $forwarded
, $transition_forwarded_for
, то будут применены следующие правила:
Для добавления к существующем заголовку (если таковой имеется) будет использоваться первое добавленное правило.
Остальные правила создадут дополнительные заголовки, как если бы к ним был добавлен префикс
$add:
.Если происходит удаление/изменение первого правила, то для добавления информации к существующему заголовку будет использовано правило, добавленное вторым.
и т.д.
Важно
Если в одном и том же заголовке будет добавлено сразу несколько переменных $x_forwarded_for
, $forwarded
и $transition_forwarded_for
, то использоваться будет только первая переменная. Остальные переменные будут удалены.
Show-команды¶
- show vlb service¶
Посмотреть информацию по всем сервисам, созданным балансировщике.
- show vlb service NAME¶
Посмотреть информацию о конкретном сервисе.
Команда показывает подробную информацию по Сервисам, которая включает в себя название Сервиса; Target-группу; тип, IP-адрес и порт по всем Access point, добавленным в данный Сервис; VRF; счетчики; какие правила Content Switch и Content Modification созданы и сколько раз они сработали.
Пример вывода:
trafficsoft# show vlb service s0
Service s0
default-target-group tg0
Access-point type https
IP: 11.0.0.2/32
Port: 443
VRF: default
Access point statistics:
Total Connections: 8
Active Connections: 0
Dead Connections: 8
Application Errors: 0
Framework Errors: 0
TCP Handshake Errors: 0
TCP Handshake RST Errors: 0
SSL Offload statistics:
Handshakes OK: 8
RX Bytes: 6008
TX Bytes: 14515
Total Cached Hits: 8
Handshake Errors: 0
No Resources Error: 0
TLS Parser Errors: 0
SSL Errors: 0
HTTP(S) statistics:
Requests: 8
Reponses: 8
Parser Errors: 0
No Resources Errors: 0
No Reponses: 0
Request Payload Bytes: 648
Response Payload Bytes: 2296
Content switch rules:
default-target-group tg0 (1 hits)
http content-switch rule 0 target-group tg1 ((Host =~ trafficsoft.ru) an... (7 hits)
Content modification rules:
http content-modification rule 1 request header set X-Real-IP $add:$remote_addr (0 hits)
http content-modification rule 2 request header set X-Forwarded-For $add:$x_forwarded_for (0 hits)
Access-point type http
IP: 11.0.0.1/32
Port: 80
VRF: default
Access point statistics:
Total Connections: 11
Active Connections: 0
Dead Connections: 11
Application Errors: 0
Framework Errors: 0
TCP Handshake Errors: 0
TCP Handshake RST Errors: 0
HTTP(S) statistics:
Requests: 11
Reponses: 11
Parser Errors: 0
No Resources Errors: 0
No Reponses: 0
Request Payload Bytes: 890
Response Payload Bytes: 3157
Content switch rules:
default-target-group tg0 (4 hits)
http content-switch rule 0 target-group tg1 ((Host =~ trafficsoft.ru) an... (7 hits)
Content modification rules:
http content-modification rule 1 request header set X-Real-IP $add:$remote_addr (0 hits)
http content-modification rule 2 request header set X-Forwarded-For $add:$x_forwarded_for (0 hits)
Счетчики Access point |
Описание |
---|---|
|
Суммарное количество соединений между клиентом и балансировщиком за все время |
|
Активные соединения на данный момент |
|
Суммарное количество закрытых соединений за все время работы балансировщика |
|
При попытке инициализировать L7-сессию возникла ошибка на уровне L7 application (tcp/http/https). Срабатывание счетчика в большинстве случаях связано с нехваткой памяти |
|
Не удалось выделить память для создания L7-сессии. Возникает при открытии большого количества соединений к балансировщику, которые приводят к нехватке памяти |
|
Не удалось установить TCP сессию, потому что истек таймаут на установку (opening timeout) |
|
В момент установки TCP-соединения от клиента получили пакет с флагом RST |
Счетчики SSL Offload |
Описание |
---|---|
|
Количество успешных «рукопожатий» между клиентом и балансировщиком |
|
Количество принятых байт от клиента |
|
Количество отправленных байт балансировщиком |
|
Количество закэшированных TLS сессий |
|
Не удалось выделить память для создания L7-сессии |
|
Ошибка в процессе TLS handshake |
|
Не хватило памяти в процессе обработки TLS Stream (расшифровки) |
Счетчики HTTP(s) |
Описание |
---|---|
|
Количество успешных запросов от клиента к балансировщику |
|
Количество успешных ответов от балансировщика к клиенту |
|
Возникла ошибка при парсинге HTTP и HTTPS (например, некорректные заголовки, неправильные символы, битые данные и т.д.) |
|
В процессе HTTP Content Modification не удалось выделить новый packet mbuf во время добавления заголовков/cookies |
|
Количество переданных данных от клиента к балансировщику (в байтах) |
|
Количество полученных клиентом данных от балансировщика (в байтах) |
- show vlb sessions [FILTER]¶
- clear vlb sessions [FILTER]¶
Показать вывод всей таблицы подключений с возможностью фильтрации этого вывода по следующим полям: внутренние/внешние/удаленные IP-адреса, протоколы, порты, пул или VRF
Filter
Keys
proto
tcp
:syn-received
established
fin-received
closing
transitory
udp
int-ip
IP-адрес клиента
A.B.C.D
int-port
Порт клиента в диапазоне
1-65535
ext-ip
IP-адрес Worker
A.B.C.D
ext-port
Порт Worker в диапазоне
1-65535
rem-ip
IP-адрес Сервиса
A.B.C.D
rem-port
Порт Сервиса в диапазоне
1-65535
pool
Название NAT-пула
NAME
vrf
Название vrf
NAME
Полный формат команды:
- show vlb sessions proto <tcp [{syn-received|established|fin-received|closing|transitory}]|udp> [{int-ip A.B.C.D|int-port (1-65535)|ext-ip A.B.C.D|ext-port (1-65535)|rem-ip A.B.C.D|rem-port (1-65535)|pool NAME|vrf NAME}]¶
- clear vlb sessions proto <tcp [{syn-received|established|fin-received|closing|transitory}]|udp> [{int-ip A.B.C.D|int-port (1-65535)|ext-ip A.B.C.D|ext-port (1-65535)|rem-ip A.B.C.D|rem-port (1-65535)|pool NAME|vrf NAME}]¶
- show vlb sessions [vrf NAME] STRING...¶
- clear vlb sessions [vrf NAME] STRING...¶
Показать подробную информацию о подключении, указанной полным ключом. Ключ может быть взят из вывода команды
show vlb sessions
.