Добрый день, уважаемые читатели! К сожалению, на Хабре практически нет упоминаний об этих замечательных устройствах, очевидно ввиду их возраста, но имеются статьи по более молодому оборудованию Cisco ACE. Но, несмотря на некоторую непопулярность, Cisco CSS 11500 Series Content Services Switches всё же встречаются в корпоративных сетях и первое столкновение с неподготовленным администратором может вызвать у него легкое недоумение. Не обращайте внимания на кажущуюся сложность, эти железки удивительно просты в конфигурировании.
Я, пожалуй, пропущу описание аппаратных особенностей этого оборудования, так как оно есть на сайте производителя и сразу перейду к делу.
Первое, с чего мы начнем — это обновление программного обеспечения и создание комфортного режима работы.
Настройка управляющего интерфейса:
CSS11503# conf t
CSS11503(config)# boot
CSS11503(config-boot)# ip address 192.168.1.2
CSS11503(config-boot)# subnet mask 255.255.255.0
CSS11503(config-boot)# gateway address 192.168.1.1
Зададим отображаемое в консоли имя устройства (не более 16 символов):
CSS11503# prompt megabalanser
megabalanser# save_profile
Обращаю ваше внимание, что в строке описания пользователя, из под которого выполняется администрирование, должно быть ключевое слово superuser, иначе вам может потребоваться увлекательнейшее знакомство с процессом восстановления пароля с помощью консоли.
Обновим программное обеспечение:
megabalanser# archive script admin-profile
megabalanser# save_profile
megabalanser(config)# ftp-record ftpname 10.10.10.10 ftpuser "ftppassword"
megabalanser# copy ftp ftpname sg0820601.adi boot-image
megabalanser(config)# boot
megabalanser(config-boot)# unpack sg0820601.adi
megabalanser(config-boot)# primary boot-file sg0820601
megabalanser(config-boot)# reboot
Are you sure you want to reboot the system, [y/n]:y
** Message from [admin] **
System Reboot from:vty1, All sessions will terminate...
**
...
megabalanser# restore admin-profile script
Создаем нашу конфигурацию. Предположим, что у нас есть сеть 192.168.200.0/24, в кторой расположены 2 сервера: 192.168.200.100 и 192.168.200.101. Адрес балансировщика в этой сети — 192.168.200.10. Адрес внешнего интерфейса балансировцика — 192.168.100.10/24. Здесь и далее приводятся примеры из конфигурационного файла, без указания заголовка командной строки.
ip route 0.0.0.0 0.0.0.0 192.168.100.1 1
interface 2/1
bridge vlan 10
interface 3/1
bridge vlan 20
circuit VLAN10
description "--- External ---"
ip address 192.168.100.10 255.255.255.0
circuit VLAN20
description "--- Internal ---"
ip address 192.168.200.10 255.255.255.0
Порты могут быть настроены и транком 802.1Q:
interface 2/1
trunk
vlan 10
vlan 20
circuit VLAN10
description "--- External ---"
ip address 192.168.100.10 255.255.255.0
circuit VLAN20
description "--- Internal ---"
ip address 192.168.200.10 255.255.255.0
Выполним конфигурирование простой балансировки между двумя серверами. Для того, чтобы нас на спрашивали подтверждения на создание сервисов, можно включить режим expert. В моем случае, проверка доступности серверов осуществляется путем отправки GET запроса к серверу, получаемый ответ (я оправляю «OK») анализируется и сравнивается с эталонным значением. Первым этапом описываем сервисы.
service server-1
port 80
ip address 192.168.200.100
keepalive type http
keepalive method get
keepalive uri "/ping.html"
keepalive hash "e0aa021e21dddbd6d8cecec71e9cf564"
active
service server-2
port 80
ip address 192.168.200.101
keepalive type http
keepalive method get
keepalive uri "/ping.html"
keepalive hash "e0aa021e21dddbd6d8cecec71e9cf564"
active
Создаем владельца («owner») и контент. Понятие «владелец» необходимо только для удобства администрирования. обратите внимание на используемый метод балансировки — большинство современных приложений потребуют что бы пользователь, в рамках сессии, общался с одной и той же нодой. В качестве адреса контента, куда будут обращаться пользователи, будет выступать 192.168.100.11.
owner site-1
content site-http
vip address 192.168.100.11
add service server-1
add service server-2
advanced-balance sticky-srcip-dstport
port 80
protocol tcp
active
Так как мы, наверняка, хотим, чтобы ответы пользователям так же возвращались с адреса 192.168.100.11, то необходимо создать соответствующую группу:
group site-http
add destination service server-1
add destination service server-2
vip address 192.168.100.11
active
Давайте проверим, что же у нас получилось:
megabalanser# sh group site-http
Group: site-http - Active (192.168.100.11 Not Redundant)
Session Redundancy: Disabled
Last Clearing of Stats Counters: 01/24/2013 21:44:18
Associated ACLs: NONE
Source Services:
NONE
Destination Services:
DNS
Name: Hits: State: Load: Trans: Keepalive: Conn:
----- ----- ------ ----- ------ ---------- -----
server-1
0 Alive 2 0 HTTP-80:GET 0
server-2
0 Alive 2 0 HTTP-80:GET 0
Group Service Total Counters:
Hits/Frames/Bytes: 0/0/0
Connections Total/Current: 0/0
FTP Control Total/Current: 0/0
Total No Portmap Errors: 0
А теперь представим, что у вашего балансировщика есть SSL-модуль, и вы хотите им поспользоваться для организации безопасного подключения пользователей к сервису. Нам понадобиться сформировать запрос на сертификат (или сделать самоподписанный), настроить модуль и создать группы.
Генерируем ключ:
ssl genrsa rsakeyfiletest 1024 "password"
Привязываем ключ к файлу:
ssl associate rsakey rsa-test-name rsakeyfiletest
Вот тут мы можем пойти двумя путями — или создаем самоподписанный сертификат или генерируем Certificate Signing Request (CSR). В случае CSR нам необходимо скопировать вывод и предоставить его в CA, для выдачи сертификата:
ssl gencsr rsa-test-name
-----BEGIN CERTIFICATE REQUEST-----
MIIB0DCCATkCAQAwgY8xCzAJBgNVBAYTAlJVMQ8wDQYDVQQIEwZNb3Njb3cxDzAN
BgNVBAcTBk1vc2NvdzEcMBoGA1UEChQTUm9zc2dvc3N0YWtoIExyf3RkLjEQMA4G
A1UECxQHVGVsY28gfzERMA8GA1UEAxQIKi5yZ3MucnUxGzAZBgkqhkiG9w0BCQEW
DHRlbGNvQHJncy5ydTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxZTYAx/o
VA4KzpX7pq4013egDFC1BfVDRzWJJhno7k5K4ydPrmVZhECKormSebSGBL00cFKs
M8ve7WGW370YxaIKbKZBFF88Dz+PbtphpcneN1DWakmz7H063tiUl4zb2cv09cMn
XTKIgL6z5RyVyqjMtC5ba5XWVGdeD25N6OkCAwEAAaAAMA0GCSqGSIb3DQEBBAUA
A4GBABRNbvf4a3SC8RZdSoaOjwuRvqs5rgO3z+CPlgqER7xQZx/FVOHu6y9fv6bZ
hiq0bP1meRmMDmb2aXbk2RysVeKRIY6c6fYrhuddT8gd4E0BkIVF299D4m2nqLyQ
SK0X9VaLIVD59oX2BYNBXpFiXNdv1nmwZL4uNP6I4D5dXgVo
-----END CERTIFICATE REQUEST-----
Генерируем самоподписанный сертификат:
ssl gencert certkey rsa-test-name signkey rsa-test-name certfiletest "password"
Привязываем сертификат к файлу:
ssl associate cert cert-test-name certfiletest
Или импортируем сертификат, после чего привязываем его к файлу. Обратите внимание, что пароль должен соответствовать паролю ключа, с которым генерировался CSR. Как вы могли заметить, при использовании SSL модуля у нас появляется функционал сжатия трафика. Если вы используете несколько SSL-модулей, то можно настроить балансировку между ними, добавив строку advanced-balance ssl в описание контента (в примере — «content site-https»).
copy ssl ftp ftpname import mycert.crt PEM "password"
ssl associate cert mycert-name mycert.crt
Я думаю, что вам должно быть интересно отслеживать срок действия сертификатов, поэтому стоит запомнить команду:
megabalanser# sh ssl cert-expiration
Certificate Expiration Summary:
Advanced Warning: 30 days
mycert-name 2014-01-24(Y-M-D) TTL: 364
cert-test-name 2014-01-10(Y-M-D) TTL: 350
<No CRL records are configured>
С сертификатами разобрались, теперь настраиваем логику. Обращаю внимание. что эта часть дополняет, а не заменяет настройку сервисов и групп, указанных выше.
ssl-proxy-list my-ssl
ssl-server 10
ssl-server 10 rsacert mycert-name
ssl-server 10 rsakey rsa-test-name
ssl-server 10 cipher rsa-with-rc4-128-md5 192.168.100.11 80
ssl-server 10 vip address 192.168.100.11
service ssl_module
type ssl-accel
keepalive type none
compress encode force-gzip
slot 3
compress accept-omit gzip
compress type default
add ssl-proxy-list my-ssl
active
content site-https
vip address 192.168.100.11
add service ssl_module
port 443
protocol tcp
application ssl
active
Обратите внимание, что балансировщик весьма вольно обращается с порядком строк внутри сервисов. Если вы привыкли, чтобы все было параллельно и перпендикулярно, то лучше удалять сервис целиком и заводить его заново, а не удалять старые и вставлять новые строки.
Используемая литература:
Cisco CSS 11500 Series Content Services Switches Configuration Guides
P.S. С учетом того, сколько такая техника стоит на ebay, я считаю, это неплохой вариант для организации балансировки ресурсов, несмотря на некоторое моральное устаревание. Большая часть балансировщиков имеет приличный вес (для тщедушных инженеров это может стать проблемой), возможность установки нескольких блоков питания и модулей ввода/вывода, что некоторым образом говорит в пользу надежности этих устройств.
Автор: MixaSg