CloudStack
Где найти в панели: Infrastructure › Cloud provider › CloudStack › API connection (
/infra/cloudstack?tab=connect). Первичное подключение также можно выполнить в мастере настройки, шаг 2.
Назначение
NexCMP продает виртуальные машины, работающие в вашем облаке Apache CloudStack. Платформа развертывает, запускает, останавливает, масштабирует, удаляет ВМ и создает их Snapshots через CloudStack API, выделяет публичные IP-адреса из зоны, собирает данные об использовании для биллинга и учета трафика, а также отображает емкость и статус в консоли администратора. CloudStack остается единым источником данных для гипервизоров, а NexCMP служит витриной, биллингом и клиентским порталом поверх него.
Используйте этот раздел, если CloudStack является (или станет) вашей основной платформой для ВМ. Информацию о подключении второй платформы параллельно см. в разделе Proxmox VE.
Требования
| Параметр | Требование |
|---|---|
| Версия CloudStack | Протестированная версия — 4.23. Для консоли ВМ требуется 4.18 или новее, а для динамического изменения CPU/RAM работающей ВМ — 4.23 с KVM. |
| Тип зоны | Зона как минимум с одной гостевой сетью для пользовательских ВМ и диапазоном публичных IP со свободными адресами. |
| Гипервизор | Протестированный гипервизор — KVM. |
| Учетная запись | Выделенный домен и аккаунт, созданные для NexCMP. Никогда не используйте ключ администратора ROOT. |
| Доступность API | Сервер панели должен иметь доступ к URL API сервера управления (https://cloudstack.example.com/client/api) по HTTP(S). Консоль ВМ, учет трафика и функции Kubernetes используют тот же эндпоинт. |
| Дополнительный ключ только для чтения | Второй ключ с правами только на чтение позволяет консоли администратора отображать хосты, хранилища, системные ВМ и пулы публичных IP. Для продажи ВМ он не требуется. |
| Публичный IP | Свободные публичные IPv4-адреса в зоне. Префикс, который разрешено продавать NexCMP, настраивается в Sales IP pools. |
| Шаблоны | Как минимум один готовый шаблон с поддержкой пароля и один service offering, доступный вашему аккаунту. См. Templates. |
| Хранилище | Основное хранилище для томов аккаунта и, если вы продаете snapshots или образы, вторичное хранилище. |
| Зависимости | Ничего. Kubernetes, Private Cloud, Images и Bandwidth зависят от этой страницы. |
Не используйте ключ администратора ROOT
Создайте отдельный домен и аккаунт для NexCMP. В этом случае ключ будет иметь доступ только к этому домену, и скомпрометированный ключ не затронет остальную часть вашего облака. Мастер настройки также проверяет, что выбранная сеть принадлежит зоне и аккаунту, владеющему ключом.
Подготовка инфраструктуры
В командах используется CloudMonkey (cmk) с авторизацией под администратором CloudStack. Замените примеры имен и плейсхолдеры в угловых скобках.
Создайте отдельный аккаунт и API-ключ
Создайте домен, в котором будут находиться все ресурсы NexCMP.
bashcmk create domain name=nexcmpОбратите внимание на
idв выводе; далее это значение используется как<domain-id>.Найдите роль, которую вы хотите назначить аккаунту.
bashcmk list roles type=DomainAdmin filter=id,nameРоль Когда выбирать Domain Admin (рекомендуется) Полный набор функций: ВМ, сети, проекты для Kubernetes, VPC, образы. Действие роли ограничено доменом nexcmp.User Только жизненный цикл ВМ. Обычный пользователь не может окончательно удалять (expunge) ВМ, если глобальный параметр allow.user.expunge.recover.vmне установлен в true; в этом случае NexCMP останавливает ВМ, а CloudStack окончательно удаляет ее по истеченииexpunge.delay.Создайте аккаунт и его первого пользователя. Используйте длинный случайный пароль — вводить его повторно не потребуется.
bashcmk create account name=nexcmp-api username=nexcmp-api \ password='CHANGE-ME-LONG-RANDOM' email=ops@example.com \ firstname=NexCMP lastname=API roleid=<role-id> domainid=<domain-id>Сгенерируйте пару API-ключей для нового пользователя.
bashcmk list users domainid=<domain-id> username=nexcmp-api filter=id,username cmk generate userkeys id=<user-id>Скопируйте
apikeyиsecretkey. Это API key и Secret key, которые вводятся в NexCMP. NexCMP сохраняет их в зашифрованном виде и в дальнейшем отображает только последние четыре символа.Убедитесь, что для домена не заданы строгие ограничения ресурсов (instances, volumes, публичные IP, сети, snapshots, шаблоны, проекты).
bashcmk list resourcelimits domainid=<domain-id>
Создайте гостевую сеть для клиентских ВМ
Клиентские ВМ развертываются в одной гостевой сети, принадлежащей новому аккаунту. Рекомендуется использовать изолированную сеть с виртуальным маршрутизатором (VR) и сервисами Static NAT, Firewall и Port Forwarding, поскольку NexCMP назначает каждой ВМ публичный IP с помощью статического NAT.
bash
cmk list networkofferings state=Enabled guestiptype=Isolated filter=id,name
cmk create network name=customers displaytext=customers zoneid=<zone-id> \
networkofferingid=<offering-id> account=nexcmp-api domainid=<domain-id>Проверьте политику исходящего трафика (default egress policy) в offering: если задано «deny», у клиентских ВМ не будет доступа во внешнюю сеть, пока не добавлены правила firewall egress.
Сделайте offerings и шаблоны видимыми
- Service offerings и network offerings должны быть публичными или назначенными домену
nexcmp, иначе аккаунт не сможет просматривать или использовать их. - Зарегистрируйте или откройте доступ как минимум к одному шаблону (см. Templates). NexCMP отображает шаблоны со статусом ready и featured.
Необязательно: ключ только для чтения для страниц инфраструктуры
Вкладки Capacity, Host, Storage и System VM, а также список диапазонов публичных IP используют второй ключ, которому требуется доступ только на чтение к шести командам. Создайте роль с ограниченными правами вместо использования ключа полного администратора:
bash
cmk create role name=nexcmp-readonly type=Admin
# <role-id> is the id printed above
for api in listHosts listCapacity listSystemVms listVlanIpRanges listClusters listStoragePools; do
cmk create rolepermission roleid=<role-id> rule=$api permission=allow
done
cmk create rolepermission roleid=<role-id> rule='*' permission=denyЗатем создайте аккаунт с этой ролью (в домене ROOT, поскольку он считывает данные всей зоны), сгенерируйте для него ключи, как в шаге 4, и укажите их в поле RO API key в следующем разделе.
Проверьте сетевой маршрут
С сервера панели:
bash
curl -fsS -o /dev/null -w '%{http_code}\n' https://cloudstack.example.com/client/apiЛюбой HTTP-ответ (даже 4xx) подтверждает доступность порта. Таймаут указывает на проблемы с брандмауэром или DNS на вашей стороне.
Подключение в NexCMP
В мастере настройки
На шаге 2 мастера настройки запрашиваются те же параметры. Нажатие Test connection выводит список доступных для ключа зон и сетей; выберите зону и гостевую сеть, укажите отображаемое имя зоны и страну, затем нажмите Save CloudStack. Мастер отклонит сеть, если она не относится к этой зоне или недоступна ключу.

Позже, в консоли администратора
Перейдите в Infrastructure › Cloud provider › CloudStack и выберите вкладку API connection.
Заполните карточку Connection:
Поле Пример значения Endpoint API https://cloudstack.example.com/client/apiAPI key (доступ на запись) XXXX(оставьте пустым, чтобы сохранить текущий ключ)Secret key XXXXRO-ключ API / секретный RO-ключ необязательно, из аккаунта с доступом только для чтения Zone ID UUID вашей зоны 
Перед сохранением нажмите Test connection. Это проверит введенные ключи без их сохранения: ключ с доступом на запись с помощью
listZonesиlistCapabilities, а ключ только для чтения — с помощьюlistSystemVms.Нажмите Save connection. Оставьте параметр Enable CloudStack connection включенным: при его выключении воркер останавливает все задачи CloudStack без потери данных.
Перейдите в Services › Virtual Machines › Policy › Provisioning, чтобы задать гостевую сеть по умолчанию, кастомные тарифные планы и пару ключей по умолчанию для новых VM.

Перейдите в Infrastructure › Cloud provider › Sales IP pools и в блоке Configure sales ranges настройте Sellable IP range prefixes (например,
203.0.113.) и Excluded IP prefixes, если определенные адреса в зоне нельзя продавать. Оставьте префикс пустым, чтобы разрешить продажу всех свободных адресов.
Что NexCMP считывает и изменяет
| Область | Чтение | Изменение |
|---|---|---|
| VMs | список, состояния, история использования, эндпоинт консоли | развертывание, запуск, остановка, перезагрузка, переустановка, удаление, масштабирование, сброс пароля и SSH-ключа |
| Диски и Snapshots | тома, VM Snapshots, Backups | создание, подключение, отключение, изменение размера, удаление, создание Snapshots, восстановление |
| Сеть | сети, маршрутизаторы, публичные IP, файрвол, проброс портов, правила балансировщика нагрузки | назначение и освобождение публичных IP, статический NAT, файрвол, проброс портов, правила исходящего трафика, сети и ACL для Private Cloud |
| Каталог | сервисные, дисковые и сетевые предложения, шаблоны, ISO, типы ОС | регистрация и удаление шаблонов и ISO (Images), сервисных предложений при создании кастомных планов |
| Kubernetes | поддерживаемые версии, кластеры, конфигурация | проекты, лимиты ресурсов, сети, кластеры (модуль Kubernetes) |
| Ключ только для чтения | хосты, кластеры, пулы хранилищ, системные ВМ, емкость, диапазоны IP-адресов VLAN | ничего |
Динамическое изменение CPU и RAM, а также пропускная способность
- Hot-plug. Изменение размера работающей ВМ без перезагрузки возможно только в том случае, если это разрешено ее шаблоном (dynamically scalable), а гостевая ОС может подключать новые CPU и RAM на лету. NexCMP включает Auto Scaling для шаблонов, имя которых оканчивается на
vN, где N равно 6 или больше, либо когда вы задаете это вручную в поле vCPU/RAM hot-plug шаблона. См. Templates. - Bandwidth source. При настройках по умолчанию NexCMP учитывает трафик по статистике ВМ в CloudStack (
listVirtualMachinesUsageHistory, опрашивается каждые 5 минут и суммируется для каждого сетевого интерфейса ВМ). Эти значения включают трафик между ВМ, поэтому могут быть немного выше, чем на пограничном маршрутизаторе. Оставьте сбор статистики ВМ в CloudStack включенным; пропуски, превышающие срок хранения статистики, игнорируются. См. Bandwidth.
Проверка
- Test connection возвращает «Write key: OK» с указанием вашей зоны и версии CloudStack.
- В Infrastructure › Cloud provider › Providers провайдер отображается как активный со свежим временем проверки. На панели состояния дашборда больше не отображается «CloudStack: not connected».
- В Sales IP pools отображается список свободных адресов (обновляется примерно раз в минуту).
- Закажите небольшую ВМ через клиентский портал или консоль администратора и убедитесь, что она переходит в статус Running, получает публичный IP-адрес и у вас открывается консоль.
Ограничения и примечания
- В этой версии NexCMP можно подключить один кластер CloudStack. В диалоговом окне Add cloud provider можно проверить ключи второго кластера, но сохранить его нельзя.
- К зоне по умолчанию в NexCMP привязывается одна зона CloudStack; если в CloudStack несколько зон, работа ограничивается указанной вами зоной, поэтому ВМ, IP-адреса и сети других зон игнорируются.
- Удаление гостевой сети в CloudStack приведет к сбою всех новых развертываний. При исчезновении сети в консоли администратора появится предупреждение красного цвета.
- Учетные данные никогда не покидают сервер. API возвращает только последние четыре символа.
Устранение неполадок
| Симптом | Причина | Решение |
|---|---|---|
listCapabilities: cloudstack 401: unable to verify user credentials and/or request signature | Неверный API-ключ или пароль (secret), ключ другого пользователя или рассинхронизация времени на сервере панели | Сгенерируйте ключи заново с помощью cmk generate userkeys и вставьте оба значения. Проверьте время на сервере панели. |
Тест: listZones: … или таймаут | Сервер панели не может подключиться к URL-адресу API | Проверьте DNS, фаервол и точность пути /client/api. |
| Мастер: «network not found in that zone for this API key» | Выбранная сеть принадлежит другому аккаунту или другой зоне | Создайте сеть в выделенном аккаунте (см. выше) и снова нажмите Test connection. |
| Мастер: «pick a zone and a network» | Тест не выполнен, либо не выбрана зона или сеть | Нажмите Test connection и выберите значения из обоих списков. |
| Баннер «CloudStack key not configured» | Ключ еще не сохранен («Connect later») | Заполните карточку Connection, нажмите Save connection, затем Test connection. |
| Баннер «CloudStack connection is OFF» | Переключатель Enable CloudStack connection выключен | Включите его и сохраните изменения. |
| Ключ только для чтения: «unusable …» при проверке | Отсутствуют права роли или указан неверный аккаунт | Проверьте шесть разрешенных команд и убедитесь, что аккаунт находится в домене ROOT. |
| «Zone public IP ranges not measured yet» или «no public IP ranges declared» | Нет ключа только для чтения или в зоне действительно нет публичного диапазона | Добавьте ключ только для чтения или добавьте диапазон публичных IP в CloudStack. |
| "Пул пуст — подождите 60 с для синхронизации vmd" | Воркер обновляет список IP раз в минуту | Подождите минуту и обновите страницу. |
| "Закончились свободные IP в диапазоне 203.0.113." | Все адреса в доступном для продажи префиксе заняты | Добавьте адреса в зону, расширьте префикс или освободите неиспользуемые IP. |
| "Не удалось получить данные сети (CloudStack не отвечает или у ключа недостаточно прав)" | Ключ потерял доступ или CloudStack недоступен | Запустите Test connection и убедитесь, что аккаунт включен. |
| "Гостевая сеть НЕ существует" | Сеть была удалена в CloudStack | Создайте сеть заново и установите ее по умолчанию в Provisioning. |