Настройка доступа и сети
Здесь собраны действия, которые выполняются до и после создания машины: 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
Добавьте или выберите SSH-ключ проекта
Общие ключи проекта позволяют не повторять параметры доступа в каждом запросе на создание машины.
- 2
Создайте сеть
Дайте сети понятное имя, а подсеть прочитайте из ответа. Дождитесь, пока
statusсети станетactive, прежде чем подключать машины. - 3
Подключите машину к сети
Подключение выполняется отдельным запросом. Изменение параметров нужно только тогда, когда подключение уже существует и его надо перенастроить.
- 4
Возьмите публичный адрес
Внешний доступ строится вокруг
publicIpId. Либо создайте адрес, либо выберите готовый из списка адресов проекта. - 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 это три разные области: ключи проекта, подключение к приватной сети и публичный адрес с правилами. Пересекаются они только в сценарии, не в модели данных.
Связанные эндпоинты
/projects/{projectId}/ssh-keysЗарегистрировать SSH-ключ в проекте.
/projects/{projectId}/networksСоздать приватную сеть.
/projects/{projectId}/networks/{networkId}/vmsПодключить машину к сети.
/projects/{projectId}/networks/{networkId}/vms/{vmId}Изменить параметры подключения или внутренний адрес.
/projects/{projectId}/public-ipsВыделить публичный адрес проекта.
/projects/{projectId}/public-ipsПосмотреть публичные адреса проекта.
/projects/{projectId}/public-ips/{publicIpId}/port-forwardsСоздать правило проброса портов.
/projects/{projectId}/public-ips/{publicIpId}/port-forwards/{forwardId}Обновить правило после смены порта службы.