Перейти к основному содержимому

Настройка доступа и сети

Здесь собраны действия, которые выполняются до и после создания машины: SSH-ключи проекта, приватная сеть, внутренняя адресация, публичный адрес и внешний доступ через правила проброса портов.

Зарегистрируйте SSH-ключ в проекте

Если доступом управляют централизованно, добавьте ключи в проект один раз и дальше ссылайтесь на их идентификаторы при создании машин. Максимальную длину имени и самого ключа возвращает GET /limits/name-lengths, а число ключей на проект ограничено значением maxSshKeysPerProject из GET /limits.

curl --request POST \
  --url 'https://api.zennohosting.com/v1/projects/{projectId}/ssh-keys' \
  --header 'Authorization: Bearer <token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
"name": "workstation-key",
"publicKey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA..."
}'

Создайте приватную сеть и подключите машину

Сначала сеть, потом подключение. Подсеть назначает платформа — передавать её при создании не нужно, а итоговое значение читайте из ответа.

curl --request POST \
  --url 'https://api.zennohosting.com/v1/projects/{projectId}/networks' \
  --header 'Authorization: Bearer <token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
"name": "backend-private"
}'
  1. 1

    Добавьте или выберите SSH-ключ проекта

    Общие ключи проекта позволяют не повторять параметры доступа в каждом запросе на создание машины.

  2. 2

    Создайте сеть

    Дайте сети понятное имя, а подсеть прочитайте из ответа. Дождитесь, пока status сети станет active, прежде чем подключать машины.

  3. 3

    Подключите машину к сети

    Подключение выполняется отдельным запросом. Изменение параметров нужно только тогда, когда подключение уже существует и его надо перенастроить.

  4. 4

    Возьмите публичный адрес

    Внешний доступ строится вокруг publicIpId. Либо создайте адрес, либо выберите готовый из списка адресов проекта.

  5. 5

    Создайте правила проброса портов

    Правило связывает внешний порт и протокол с машиной внутри сети. Пока правило применяется, его status равен Creating; активное правило — Created.

Создайте публичный адрес

Если переиспользуемого адреса у проекта ещё нет, создайте его отдельно. Это самостоятельный ресурс, а не побочный результат создания сети, и у него свой тариф.

curl --request POST \
  --url 'https://api.zennohosting.com/v1/projects/{projectId}/public-ips' \
  --header 'Authorization: Bearer <token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
"tariffId": "00000000-0000-0000-0000-000000000000"
}'

Создайте правило проброса портов

Правило связывает внешний порт существующего адреса проекта с выбранной машиной и её внутренним портом.

curl --request POST \
  --url 'https://api.zennohosting.com/v1/projects/{projectId}/public-ips/{publicIpId}/port-forwards' \
  --header 'Authorization: Bearer <token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
"vmId": "00000000-0000-0000-0000-000000000000",
"mode": "SpecificPorts",
"protocol": "Tcp",
"externalPort": 8080,
"internalPort": 80
}'

Правила переживают пересборку машины

Пересборка машины не трогает правила проброса портов. Если новый образ слушает другой порт — например, RDP 3389 вместо SSH 22 — правило останется прежним и перестанет работать. Обновите его отдельным запросом.

Три независимые области

В личном кабинете доступ и сеть могут показываться вместе, но в API это три разные области: ключи проекта, подключение к приватной сети и публичный адрес с правилами. Пересекаются они только в сценарии, не в модели данных.

Связанные эндпоинты