---
title: CloudStack
description: Подключение Apache CloudStack к NexCMP: создайте домен, аккаунт и API-ключ в cmk, затем введите их в мастере настройки или в консоли администратора.
url: https://nexcmp.com/ru/docs/infrastructure/cloudstack/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

# CloudStack

> **Где найти в панели:** Infrastructure › Cloud provider › CloudStack › API connection (`/infra/cloudstack?tab=connect`). Первичное подключение также можно выполнить в [мастере настройки](https://nexcmp.com/ru/docs/getting-started/setup-wizard/), шаг 2.

## Назначение {#what-it-does}

NexCMP продает виртуальные машины, работающие в вашем облаке Apache CloudStack. Платформа развертывает, запускает, останавливает, масштабирует, удаляет ВМ и создает их Snapshots через CloudStack API, выделяет публичные IP-адреса из зоны, собирает данные об использовании для биллинга и учета трафика, а также отображает емкость и статус в консоли администратора. CloudStack остается единым источником данных для гипервизоров, а NexCMP служит витриной, биллингом и клиентским порталом поверх него.

Используйте этот раздел, если CloudStack является (или станет) вашей основной платформой для ВМ. Информацию о подключении второй платформы параллельно см. в разделе [Proxmox VE](https://nexcmp.com/ru/docs/infrastructure/proxmox/).

## Требования {#requirements}

| Параметр | Требование |
|---|---|
| Версия 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](https://nexcmp.com/ru/docs/infrastructure/templates/). |
| Хранилище | Основное хранилище для томов аккаунта и, если вы продаете snapshots или образы, вторичное хранилище. |
| Зависимости | Ничего. Kubernetes, Private Cloud, Images и Bandwidth зависят от этой страницы. |

::: warning Не используйте ключ администратора ROOT
Создайте отдельный домен и аккаунт для NexCMP. В этом случае ключ будет иметь доступ только к этому домену, и скомпрометированный ключ не затронет остальную часть вашего облака. Мастер настройки также проверяет, что выбранная сеть принадлежит зоне **и** аккаунту, владеющему ключом.
:::

## Подготовка инфраструктуры {#prepare-the-infrastructure}

В командах используется [CloudMonkey](https://cloudstack.apache.org/) (`cmk`) с авторизацией под администратором CloudStack. Замените примеры имен и плейсхолдеры в угловых скобках.

### Создайте отдельный аккаунт и API-ключ {#create-a-dedicated-account-and-api-key}

1. Создайте домен, в котором будут находиться все ресурсы NexCMP.

   ```bash
   cmk create domain name=nexcmp
   ```

   Обратите внимание на `id` в выводе; далее это значение используется как `<domain-id>`.

2. Найдите роль, которую вы хотите назначить аккаунту.

   ```bash
   cmk list roles type=DomainAdmin filter=id,name
   ```

   | Роль | Когда выбирать |
   |---|---|
   | **Domain Admin** (рекомендуется) | Полный набор функций: ВМ, сети, проекты для Kubernetes, VPC, образы. Действие роли ограничено доменом `nexcmp`. |
   | User | Только жизненный цикл ВМ. Обычный пользователь не может окончательно удалять (expunge) ВМ, если глобальный параметр `allow.user.expunge.recover.vm` не установлен в true; в этом случае NexCMP останавливает ВМ, а CloudStack окончательно удаляет ее по истечении `expunge.delay`. |

3. Создайте аккаунт и его первого пользователя. Используйте длинный случайный пароль — вводить его повторно не потребуется.

   ```bash
   cmk 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>
   ```

4. Сгенерируйте пару API-ключей для нового пользователя.

   ```bash
   cmk 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 сохраняет их в зашифрованном виде и в дальнейшем отображает только последние четыре символа.

5. Убедитесь, что для домена не заданы строгие ограничения ресурсов (instances, volumes, публичные IP, сети, snapshots, шаблоны, проекты).

   ```bash
   cmk list resourcelimits domainid=<domain-id>
   ```

### Создайте гостевую сеть для клиентских ВМ {#create-the-guest-network-for-customer-vms}

Клиентские ВМ развертываются в одной гостевой сети, принадлежащей новому аккаунту. Рекомендуется использовать изолированную сеть с виртуальным маршрутизатором (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 и шаблоны видимыми {#make-offerings-and-templates-visible}

- **Service offerings** и **network offerings** должны быть публичными или назначенными домену `nexcmp`, иначе аккаунт не сможет просматривать или использовать их.
- Зарегистрируйте или откройте доступ как минимум к одному шаблону (см. [Templates](https://nexcmp.com/ru/docs/infrastructure/templates/)). NexCMP отображает шаблоны со статусом ready и featured.

### Необязательно: ключ только для чтения для страниц инфраструктуры {#optional-read-only-key-for-infrastructure-pages}

Вкладки **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** в следующем разделе.

### Проверьте сетевой маршрут {#check-the-network-path}

С сервера панели:

```bash
curl -fsS -o /dev/null -w '%{http_code}\n' https://cloudstack.example.com/client/api
```

Любой HTTP-ответ (даже 4xx) подтверждает доступность порта. Таймаут указывает на проблемы с брандмауэром или DNS на вашей стороне.

## Подключение в NexCMP {#connect-in-nexcmp}

### В мастере настройки {#in-the-setup-wizard}

На шаге 2 [мастера настройки](https://nexcmp.com/ru/docs/getting-started/setup-wizard/) запрашиваются те же параметры. Нажатие **Test connection** выводит список доступных для ключа зон и сетей; выберите зону и гостевую сеть, укажите отображаемое имя зоны и страну, затем нажмите **Save CloudStack**. Мастер отклонит сеть, если она не относится к этой зоне или недоступна ключу.

![Шаг 2 мастера настройки с заполненными URL API CloudStack и ключами, а также выбранными зоной и сетью после нажатия Test connection](https://nexcmp.com/ru/docs/images/infrastructure/cloudstack-01-wizard-step.webp)

### Позже, в консоли администратора {#later-in-the-admin-console}

1. Перейдите в **Infrastructure › Cloud provider › CloudStack** и выберите вкладку **API connection**.
2. Заполните карточку **Connection**:

   | Поле | Пример значения |
   |---|---|
   | Endpoint API | `https://cloudstack.example.com/client/api` |
   | API key (доступ на запись) | `XXXX` (оставьте пустым, чтобы сохранить текущий ключ) |
   | Secret key | `XXXX` |
   | RO-ключ API / секретный RO-ключ | необязательно, из аккаунта с доступом только для чтения |
   | Zone ID | UUID вашей зоны |

      ![Вкладка API connection с примером эндпоинта и скрытыми ключами](https://nexcmp.com/ru/docs/images/infrastructure/cloudstack-02-connect-form.webp)

3. Перед сохранением нажмите **Test connection**. Это проверит введенные ключи без их сохранения: ключ с доступом на запись с помощью `listZones` и `listCapabilities`, а ключ только для чтения — с помощью `listSystemVms`.


4. Нажмите **Save connection**. Оставьте параметр **Enable CloudStack connection** включенным: при его выключении воркер останавливает все задачи CloudStack без потери данных.
5. Перейдите в **Services › Virtual Machines › Policy › Provisioning**, чтобы задать гостевую сеть по умолчанию, кастомные тарифные планы и пару ключей по умолчанию для новых VM.

      ![VM Policy, вкладка Provisioning с ID сети по умолчанию](https://nexcmp.com/ru/docs/images/infrastructure/cloudstack-04-provisioning.webp)

6. Перейдите в **Infrastructure › Cloud provider › Sales IP pools** и в блоке **Configure sales ranges** настройте **Sellable IP range prefixes** (например, `203.0.113.`) и **Excluded IP prefixes**, если определенные адреса в зоне нельзя продавать. Оставьте префикс пустым, чтобы разрешить продажу всех свободных адресов.

      ![Раздел Sales IP pools с заданным доступным для продажи префиксом 203.0.113.](https://nexcmp.com/ru/docs/images/infrastructure/cloudstack-05-sales-ip-pool.webp)

### Что NexCMP считывает и изменяет {#what-nexcmp-reads-and-writes}

| Область | Чтение | Изменение |
|---|---|---|
| VMs | список, состояния, история использования, эндпоинт консоли | развертывание, запуск, остановка, перезагрузка, переустановка, удаление, масштабирование, сброс пароля и SSH-ключа |
| Диски и Snapshots | тома, VM Snapshots, Backups | создание, подключение, отключение, изменение размера, удаление, создание Snapshots, восстановление |
| Сеть | сети, маршрутизаторы, публичные IP, файрвол, проброс портов, правила балансировщика нагрузки | назначение и освобождение публичных IP, статический NAT, файрвол, проброс портов, правила исходящего трафика, сети и ACL для Private Cloud |
| Каталог | сервисные, дисковые и сетевые предложения, шаблоны, ISO, типы ОС | регистрация и удаление шаблонов и ISO (Images), сервисных предложений при создании кастомных планов |
| Kubernetes | поддерживаемые версии, кластеры, конфигурация | проекты, лимиты ресурсов, сети, кластеры (модуль Kubernetes) |
| Ключ только для чтения | хосты, кластеры, пулы хранилищ, системные ВМ, емкость, диапазоны IP-адресов VLAN | ничего |

### Динамическое изменение CPU и RAM, а также пропускная способность {#live-cpu-and-ram-and-bandwidth}

- **Hot-plug.** Изменение размера работающей ВМ без перезагрузки возможно только в том случае, если это разрешено ее шаблоном (dynamically scalable), а гостевая ОС может подключать новые CPU и RAM на лету. NexCMP включает Auto Scaling для шаблонов, имя которых оканчивается на `vN`, где N равно 6 или больше, либо когда вы задаете это вручную в поле **vCPU/RAM hot-plug** шаблона. См. [Templates](https://nexcmp.com/ru/docs/infrastructure/templates/).
- **Bandwidth source.** При настройках по умолчанию NexCMP учитывает трафик по статистике ВМ в CloudStack (`listVirtualMachinesUsageHistory`, опрашивается каждые 5 минут и суммируется для каждого сетевого интерфейса ВМ). Эти значения включают трафик между ВМ, поэтому могут быть немного выше, чем на пограничном маршрутизаторе. Оставьте сбор статистики ВМ в CloudStack включенным; пропуски, превышающие срок хранения статистики, игнорируются. См. [Bandwidth](https://nexcmp.com/ru/docs/catalog/bandwidth/).

## Проверка {#verify}

1. **Test connection** возвращает «Write key: OK» с указанием вашей зоны и версии CloudStack.
2. В **Infrastructure › Cloud provider › Providers** провайдер отображается как активный со свежим временем проверки. На панели состояния дашборда больше не отображается «CloudStack: not connected».
3. В **Sales IP pools** отображается список свободных адресов (обновляется примерно раз в минуту).
4. Закажите небольшую ВМ через клиентский портал или консоль администратора и убедитесь, что она переходит в статус Running, получает публичный IP-адрес и у вас открывается консоль.

## Ограничения и примечания {#limits-and-notes}

- В этой версии NexCMP можно подключить один кластер CloudStack. В диалоговом окне **Add cloud provider** можно проверить ключи второго кластера, но сохранить его нельзя.
- К зоне по умолчанию в NexCMP привязывается одна зона CloudStack; если в CloudStack несколько зон, работа ограничивается указанной вами зоной, поэтому ВМ, IP-адреса и сети других зон игнорируются.
- Удаление гостевой сети в CloudStack приведет к сбою всех новых развертываний. При исчезновении сети в консоли администратора появится предупреждение красного цвета.
- Учетные данные никогда не покидают сервер. API возвращает только последние четыре символа.

## Устранение неполадок {#troubleshooting}

| Симптом | Причина | Решение |
|---|---|---|
| `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. |


