Workflow
Настройка доступа и сети
Этот workflow охватывает основные control points до и после provisioning: project SSH keys, membership в private network, internal addressing, public IP resources и внешний доступ через forwarding rules.
Создайте переиспользуемый project SSH key
Если клиент централизованно управляет SSH-доступом, создайте project-level ключи один раз и переиспользуйте их identifiers в сценариях создания VM.
curl --request POST \
--url 'https://api.zennohosting.com/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..."
}'
Создайте private network и подключите VM
Начинайте с project network resource, затем подключайте VM к этой сети. При создании subnet сети назначается платформой и не передаётся вручную.
curl --request POST \
--url 'https://api.zennohosting.com/projects/{projectId}/networks' \
--header 'Authorization: Bearer <token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
"name": "backend-private"
}'
- 1
Создайте или выберите project SSH key
Project-level SSH keys позволяют стандартизировать access inputs между разными create VM requests.
- 2
Создайте network resource
Используйте стабильное имя сети, а итоговую subnet читайте уже из network resource вместо того, чтобы пытаться задавать её вручную при создании.
- 3
Подключите VM к сети
Используйте attach call, чтобы поместить VM в выбранную сеть. Update call нужен только тогда, когда параметры подключения нужно поменять уже после создания сети.
- 4
Создайте или проверьте project public IP resources
Public exposure flows строятся вокруг
publicIpId. Либо сначала создайте public IP, либо запросите список public IP проекта и выберите нужный ресурс. - 5
Создайте forwarding rules для внешнего доступа
Каждое правило сопоставляет внешний порт и протокол с VM внутри project network.
Создайте public IP resource
Если у проекта ещё нет reusable public IP, сначала создайте его. Это отдельный project resource, а не side effect создания private network.
curl --request POST \
--url 'https://api.zennohosting.com/projects/{projectId}/public-ips' \
--header 'Authorization: Bearer <token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
"tariffId": "00000000-0000-0000-0000-000000000000"
}'
Создайте правило port forwarding
Это правило привязывает внешний порт существующего public IP проекта к выбранной VM и внутреннему service port.
curl --request POST \
--url 'https://api.zennohosting.com/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
}'
Примечание по моделированию
Product screens могут визуально объединять public exposure и network management, но каноническая API-модель остаётся разделённой: reusable SSH keys, private network attachment и public IP exposure — это три разные области, которые пересекаются только на уровне workflow.
Связанные endpoint
/projects/{projectId}/ssh-keysСоздать project SSH key.
/projects/{projectId}/networksСоздать private network resource.
/projects/{projectId}/networks/{networkId}/vmsПодключить VM к сети.
/projects/{projectId}/networks/{networkId}/vms/{vmId}Изменить параметры подключения или internal IP.
/projects/{projectId}/public-ipsСоздать reusable project public IP resource.
/projects/{projectId}/public-ipsПроверить public IP resources проекта.
/projects/{projectId}/public-ips/{publicIpId}/port-forwardsСоздать правило внешнего forwarding.