Skip to content
Migration

Migrating from Hetzner Cloud to Quake AI

Migration · Updated Jun 2026

Coming from another cloud?

▸Hetzner·Cloud Servers, Volumes, Object Storage, Private Networks

Cloud Servershigh

  • Servers provisioned individually via Hetzner API (hcloud), not OpenStack Nova flavors; fixed instance types like CX11 (1 vCPU, 2GB RAM, 20GB NVMe).
  • No flavor customization; choose from predefined shared/dedicated vCPU series.
  • Billing hourly with monthly cap per server (e.g., €3.29/mo cap for CX11), charged even when powered off until deleted, unlike typical OpenStack stop-to-pause billing.
  • Custom REST API at api.hetzner.cloud/v1/servers instead of OpenStack Nova /v2.1/servers (different auth, payloads, response formats).
Hetzner docs ↗

Migrating from Hetzner Cloud to Quake AI

This guide walks you through moving workloads from Hetzner Cloud to Quake AI, service by service. Hetzner has a well-developed cross-service migration path: both the IaC and object storage guides already exist. Networking is the biggest conceptual shift.

If you have not reviewed the concept differences, start with Coming from Hetzner Cloud for the full mapping table.

Before you migrate#

  • Review the concept translation guide for how Hetzner services map to Quake AI
  • Inventory your Hetzner resources: Cloud Servers, Volumes, Object Storage buckets, Private Networks, Firewalls, Load Balancers, and Floating IPs
  • Identify Managed Database or DNS dependencies that need self-managed alternatives

Migration phases#

1. Evaluate and plan#

Inventory your Hetzner resources: Cloud Servers, Volumes, Object Storage buckets, Private Networks, Firewalls, Load Balancers. Networking is the biggest shift: Hetzner abstracts subnets and routing, while Quake AI exposes them as separate Neutron objects you configure explicitly.

2. Account setup#

Create your Quake AI project, generate application credentials, and install the OpenStack CLI.

3. Object storage#

Hetzner Object Storage is S3-compatible (Ceph-based). Migration to Quake AI's Swift endpoint requires an endpoint and credential change. Use rclone for the transfer.

What to watch for: Hetzner Object Storage supports versioning and object locking. If you have versioning-enabled buckets, plan to re-enable versioning on Swift after migration. Swift's S3 gateway handles versioning through the S3 API; verify the behavior matches your workflow.

For the full cutover procedure, see Migrate from Hetzner Object Storage.

4. Infrastructure as code (hcloud → OpenTofu)#

This is Hetzner's strongest migration path. The hcloud Terraform provider maps directly to the openstack provider. The existing guide covers the full resource-by-resource rewrite.

Key resource mappings:

Hetzner (Terraform)Quake AI (OpenTofu)
hcloud_serveropenstack_compute_instance_v2
hcloud_volumeopenstack_blockstorage_volume_v3
hcloud_firewallopenstack_networking_secgroup_v2
hcloud_network + hcloud_network_subnetopenstack_networking_network_v2 + openstack_networking_subnet_v2
hcloud_floating_ipopenstack_networking_floatingip_v2
hcloud_load_balancerEdge reverse proxy, WAF, or API gateway on Nova with a Neutron floating IP

For the full translation, see Migrate from Hetzner Terraform.

5. Compute (Cloud Servers → Nova)#

Hetzner Cloud Servers support snapshots and snapshot transfer between projects, but cross-platform image compatibility (drivers, cloud-init configuration, kernel choices) is often imperfect. The practical migration approach is to provision new instances and migrate application data:

Containerized applications: Migrate container images and deploy on Nova instances. Hetzner does not offer a managed Kubernetes service, so Kubernetes on Hetzner Cloud Servers runs as self-managed clusters (via RKE2, k3s, or similar). Self-managed K8s on Nova (via RKE2 or k3s) is the recommended path; see Migrate from Hetzner K8s to Kubernetes on Quake AI for the full guide.

Non-containerized applications: Provision a new Nova instance with the same base image, install your application stack, and rsync data from the Hetzner server.

Billing note: Hetzner charges for powered-off servers at the same rate as running ones (hourly billing to a monthly cap). Quake AI uses fixed monthly plan pricing; stopped instances continue to count against provisioned plan capacity. Confirm your plan's billing model before keeping parallel environments running during validation.

See Create an instance for the full workflow. For the full guide, see Migrate from Hetzner Cloud Servers to Quake AI Compute.

6. Networking (private networks → Neutron)#

Build your Hetzner private network topology from explicit Neutron objects:

  1. Create a network: the L2 broadcast domain
  2. Create a subnet: attach an IP range and DHCP configuration
  3. Create a router: connect subnets to each other and to the external network

Hetzner Firewall → Security Groups: Hetzner applies firewall rules at the network level or via label selectors. Quake AI applies security groups per instance (per port). Re-create your firewall rules as security group rules with the same protocol, port, and source CIDR.

Floating IPs → Floating IPs: These map 1:1 between Hetzner and Quake AI. Allocate from the external pool and associate with your instance's port. Update DNS records to point to the new addresses.

CDN: If you need a CDN, plan for an external CDN layer such as Cloudflare or Fastly. Neither Hetzner nor Quake AI provides one.

Key how-to guides:

For topology diagrams, security rule translation, and public-address migration, see Migrate from Hetzner Cloud Networks to Quake AI. Translate forwarding rules and backends into an edge reverse proxy or API gateway.

7. Validation and cutover#

Before decommissioning Hetzner resources:

  • Verify that applications respond on Quake AI instances with the expected behavior
  • Confirm object storage data integrity between Hetzner and Swift
  • Update DNS records to point to Quake AI floating IPs; use low TTLs during the transition
  • Validate security group rules match your Hetzner Firewall configuration
  • Confirm monitoring and alerting are in place (self-managed Prometheus, Grafana, or equivalent)
  • Run IaC plans (tofu plan) to verify infrastructure state matches expectations

Service mapping reference#

The table below shows how Hetzner Cloud services map to Quake AI equivalents, with confidence ratings and documented divergences. The <ProviderMappings> component reads from the platform knowledge graph.

Compute· 30 mappings

API Token

→ Rumble: Authentication

high4 diffs›
  • •Hetzner API tokens are project-scoped: each token is valid only for the project it was created in and must be separately generated per project. OpenStack Keystone application credentials are user-scoped and can be used across projects when the user has appropriate roles.
  • •Hetzner has no OAuth2/OIDC integration for API access; all programmatic access requires a static bearer token. Keystone supports OIDC federation, LDAP backends, and federated identity (SAML2).
  • •Hetzner tokens have no built-in expiry and must be manually rotated; there is no token TTL or refresh concept. Keystone tokens have configurable TTLs (default 1 hour) and support re-authentication.
  • •Hetzner tokens are either read-only or read-write with no fine-grained scope. OpenStack roles (admin, member, reader) provide service-level access control per project.
View Hetzner docs →

Buckets

→ Rumble: Containers

high3 diffs›
  • •S3 API (PUT Bucket requires specific headers like x-amz-acl limited to private/public-read, LocationConstraint); Swift uses POST/PUT Container with broader ACLs via X-Container-Read/Write.
  • •Public access via https://bucket.location.your-objectstorage.com/object; Swift public via temp URLs or ACLs.
  • •Up to 100 buckets per account; Swift has no hard limit.
View Hetzner docs →

Cloud API

→ Rumble: API

high4 diffs›
  • •Proprietary REST API over HTTPS with Bearer token auth, not OpenStack Identity API (keystone) endpoints or mechanisms.
  • •Base URL https://api.hetzner.cloud/v1/ with resource-specific endpoints (e.g., /servers) vs OpenStack service endpoints (nova, cinder).
  • •No multi-project handling in single auth; separate per-project tokens vs keystone scopes/projects.
  • •Missing identity/catalog endpoints; no service discovery via API.
View Hetzner docs →

Cloud Load Balancers

→ Rumble: Load balancer

high4 diffs›
  • •Provisioned via CCM using annotations like load-balancer.hetzner.cloud/location=fsn1 on Services type LoadBalancer.
  • •Separate billed resource with HTTP, TCP, and UDP support plus TLS termination; integrates with private networks.
  • •Provider-managed regional load balancers use a simpler model than self-managed reverse proxies or Kubernetes LoadBalancer Services.
  • •L4 TCP/UDP support and two balancing algorithms differ from application-layer routing configured on a self-managed edge.
View Hetzner docs →

Cloud Servers

→ Rumble: Instances

high4 diffs›
  • •Servers provisioned individually via Hetzner API (hcloud), not OpenStack Nova flavors; fixed instance types like CX11 (1 vCPU, 2GB RAM, 20GB NVMe).
  • •No flavor customization; choose from predefined shared/dedicated vCPU series.
  • •Billing hourly with monthly cap per server (e.g., €3.29/mo cap for CX11), charged even when powered off until deleted, unlike typical OpenStack stop-to-pause billing.
  • •Custom REST API at api.hetzner.cloud/v1/servers instead of OpenStack Nova /v2.1/servers (different auth, payloads, response formats).
View Hetzner docs →

Cloud Volumes

→ Rumble: Volumes

high4 diffs›
  • •Provisioned via Hetzner CSI driver (csi.hetzner.cloud), ReadWriteOnce only, min 10GB, NVMe-based.
  • •Billed €0.044/GB/month until deleted, no pause; attach/detach via CSI, unlike Cinder's broader access modes (RWX via Manila).
  • •Snapshots supported but no volume encryption at rest by default; location-specific (e.g., fsn1).
  • •Proprietary REST API at https://api.hetzner.cloud/v1/volumes using Bearer token auth, not OpenStack Cinder API (v3 JSON over Keystone). Endpoints like POST /volumes/{id}/actions/attach, POST /volumes/{id}/actions/resize (upsize only). No /v3/{project_id}/volumes/{volume_id}/action os-extend.
View Hetzner docs →

Floating IPs

→ Rumble: Floating IPs

high4 diffs›
  • •Flat monthly billing €3/IPv4 or hourly equivalent, not usage-based per hour ().
  • •Locked to specific location/zone, cannot move across datacenters unlike global pools in OpenStack ().
  • •Hot-reassign without server reboot but requires manual OS config (e.g., ifupdown/netplan) post-change ().
  • •Limits: 10/account default, 20/server max; single assignment at a time ().
View Hetzner docs →

hcloud_firewall

→ Rumble: Security groups

high4 diffs›
  • •Applies only to Cloud Servers (not Load Balancers), up to 5/server, 500 rules max; free ().
  • •Default: inbound blocked, outbound allowed; uses label selectors for auto-apply; statefulness not specified but likely stateless given rules ().
  • •No per-port/per-network granularity like Neutron SG rules; connection limits (80k concurrent/server) ().
  • •Custom Hetzner API vs Neutron security-groups API.
View Hetzner docs →

Hetzner API Changelog

→ Rumble: API versioning

›

No specific divergences documented yet.

View Hetzner docs →

Hetzner Cloud hourly/monthly pricing with monthly cap

→ Rumble: Pricing

high4 diffs›
  • •Hetzner bills servers per hour with a monthly cap; if a server is deleted before month end, only the hourly rate applies. Servers are billed even when powered off because resources remain allocated. Quake AI's billing model is operator-defined.
  • •Hetzner pricing is embedded in the server type API response (GET /v1/server_types): each type includes a prices array with hourly and monthly (net/gross) for each location. This makes Hetzner pricing programmatically discoverable, unlike AWS/Azure/GCP which require separate pricing APIs.
  • •Hetzner includes a traffic allowance per server (e.g. 20 TB/month for CX21); overage is billed per 100MB block rounded up. Quake AI's bandwidth pricing is operator-defined.
  • •Hetzner snapshots are billed per GB of compressed snapshot storage per month; backups are billed at 20% of the server price for up to 7 automated backup slots.
View Hetzner docs →

Hetzner Cloud Networking (Private Networks + Floating IPs + Firewalls)

→ Rumble: Networking

high4 diffs›
  • •Hetzner's network model has three main primitives: Private Networks (L3 SDN), Floating IPs (public IP reassignment), and Firewalls (stateful L3/L4 rules). Neutron separates these into networks, subnets, routers, ports, floating IPs, security groups, and FWaaS rules as independently addressable resources.
  • •Hetzner does not have a concept of external networks, provider networks, or network types (flat/VLAN/VXLAN). All private networking is via Hetzner's proprietary SDN; Neutron supports multiple backend drivers (OVN, OVS, ML2 plugins).
  • •IPv6 on Hetzner private networks is not supported as of April 2026; only public interfaces can have IPv6 addresses. Neutron supports dual-stack subnets (IPv4+IPv6) on private networks.
  • •Hetzner network limits: max 100 servers per private network, max 50 private networks per project. Neutron quotas are operator-defined and typically much higher.
View Hetzner docs →

Hetzner Object Storage (S3-compatible, Ceph-backed)

→ Rumble: S3 compatibility

high4 diffs›
  • •Hetzner Object Storage endpoint format is location-scoped: {bucket}.{location}.your-objectstorage.com (e.g. my-bucket.fsn1.your-objectstorage.com); Quake AI uses a regional endpoint. Credentials are project-scoped and must be regenerated per project.
  • •Hetzner does not publish a full S3 compatibility matrix; advanced operations (S3 Select, Object Lock, Replication, Lifecycle rules) are not documented as supported. Both Hetzner and Quake AI use Ceph RGW, so core S3 CRUD, multipart upload, and SigV4 auth work on both.
  • •Hetzner credentials are project-bound access key/secret pairs separate from Hetzner API tokens; the same S3 credential cannot be used across projects. Quake AI EC2 credentials are tied to a Keystone user and scoped per project via role assignments.
  • •Hetzner Object Storage locations (fsn1, nbg1, hel1) are distinct endpoints; buckets in different locations require separate credentials and aliases. Quake AI object storage uses a single regional endpoint per deployment.
View Hetzner docs →

Images

→ Rumble: Images

high4 diffs›
  • •Includes system images (OS), user images (snapshots/backups).
  • •API /v1/images; create via server action create_image (type=snapshot/backup).
  • •Billed per GB/month; backups cost 20% of server price.
  • •No direct image upload; custom via ISO attach or rebuild.
View Hetzner docs →

N/A (No equivalent)

→ Rumble: Snapshots

high4 diffs›
  • •No support for volume snapshots in API or console; explicitly stated 'we do not provide Backups or Snapshots for Volumes' and server snapshots exclude volumes.
  • •Workarounds like rsync/dd to new volume required, unlike Cinder's create/delete/get/manage_snapshot API.
  • •Recent confirmations (2026) show no addition of feature.
  • •Created as Image type='snapshot' via server action; stored under /images.
View Hetzner docs →

N/A (No managed NAT service — self-managed Linux NAT server required)

→ Rumble: NAT

high4 diffs›
  • •Hetzner has no managed NAT gateway service. Outbound internet access for private servers requires provisioning a server with a public IP, enabling Linux IP forwarding (net.ipv4.ip_forward=1), and configuring iptables MASQUERADE. Neutron provides managed SNAT via the L3 agent when a router has an external gateway attached.
  • •The NAT server must be provisioned as a regular billable server (minimum ~€3.29/month); Neutron SNAT is a control-plane service with no additional instance cost.
  • •Hetzner SDN routes traffic to the NAT server via a static network route (destination: 0.0.0.0/0, gateway: <nat-server-private-ip>); this must be manually configured and updated if the NAT server IP changes. Neutron manages routing automatically when a router has an external gateway.
  • •No native HA NAT option; high availability requires a custom keepalived/VRRP setup. Neutron L3 HA routers support active-standby failover.
View Hetzner docs →

N/A (No port resource — server network interfaces managed implicitly via attach action)

→ Rumble: Ports

high4 diffs›
  • •Hetzner has no port concept. Network attachment is managed at the server level via POST /v1/servers/{id}/actions/attach_to_network with an optional fixed IP. In Neutron, a port is an independent resource that can exist without a server attached, has its own UUID, security groups, and fixed IP.
  • •Neutron ports support multiple fixed IPs per port, allowed-address-pairs for virtual IP failover (VRRP/keepalived), and port security disable. Hetzner network attachment has no equivalent of allowed-address-pairs or port security controls.
  • •In Neutron, ports are the attachment point for security groups (POST /v2.0/ports with security_groups). Hetzner uses Firewalls (POST /v1/firewalls) attached to servers or server groups directly, not to network interfaces.
  • •Neutron port status transitions (ACTIVE/DOWN/BUILD) are observable via API. Hetzner server network attachment status is an action result with no independent port lifecycle.
View Hetzner docs →

N/A (No router resource — static routes via network routes API)

→ Rumble: Routers

high4 diffs›
  • •Hetzner has no managed router resource. Inter-subnet and internet routing is configured via static routes in the network (POST /v1/networks/{id}/routes) pointing to a gateway server IP. Neutron provides a managed router resource (POST /v2.0/routers) with a dedicated control-plane service.
  • •Adding an external gateway in Neutron (connecting a router to the external network for floating IP allocation) is a single API call. On Hetzner, internet egress requires provisioning a server with IP forwarding and iptables MASQUERADE configured as a NAT gateway — all manual or IaC-managed steps.
  • •Neutron router interfaces can be hot-added and removed. Hetzner routes are defined at the network level and take effect in the SDN without a dedicated router resource to manage.
  • •Dynamic routing protocols (BGP, OSPF) are not supported on Hetzner private networks; Neutron supports BGP via the neutron-dynamic-routing extension.
View Hetzner docs →

N/A (No subscription model — pay-as-you-go with monthly invoices per project)

→ Rumble: Subscriptions

high4 diffs›
  • •Hetzner has no subscription or commitment model; all billing is usage-based with monthly invoices. There are no reserved instance discounts or committed use discounts. Quake AI's pricing model is operator-defined.
  • •Hetzner invoices are generated per project at the end of each month; multiple projects are invoiced separately even under the same Hetzner account. There is no consolidated invoice across projects.
  • •Hetzner has no free tier or trial credits for new accounts (unlike AWS, GCP, Azure which offer free tiers). Resource usage begins billing immediately on provisioning.
  • •Hetzner invoices include VAT for private customers in Germany (19%); business customers in EU can provide a VAT ID. Quake AI's tax handling is operator-defined.
View Hetzner docs →

Networks

→ Rumble: Networks

high4 diffs›
  • •Private networks (vSwitch-like but called Networks) created via API, up to 10.0.0.0/8 subnets, attach to servers/LBs.
  • •CCM supports route controller for pod networking when enabled; no native provider networks like OpenStack.
  • •Limited to Hetzner regions, IPv4 only for private (IPv6 public).
  • •Networks are free with no usage charges, unlike potential metering in OpenStack clouds ().
View Hetzner docs →

No managed Kubernetes service (self-managed with CCM and CSI)

→ Rumble: Kubernetes

high3 diffs›
  • •Similar self-managed model to Quake AI; both require users to provision servers and install Kubernetes with tools like OpenTofu/Terraform and k3s/kubeadm. Hetzner provides a Cloud Controller Manager and CSI driver, while Quake AI uses OpenStack-compatible storage and network integrations.
  • •Hetzner-specific cloud-provider=external CCM must be deployed manually in kube-system namespace.
  • •No cluster API or web UI for cluster lifecycle; all via Hetzner Cloud API token and kubectl.
View Hetzner docs →

Object Versioning

→ Rumble: Versioning

medium1 diff›
  • •Supported in both, but Hetzner S3 limited NoncurrentVersionExpiration to NoncurrentDays only.
View Hetzner docs →

Placement Groups

→ Rumble: Server groups

high4 diffs›
  • •Only 'spread' type (anti-affinity: servers on different physical hosts); no 'affinity' or policy-based like OpenStack.
  • •Max 10 servers/group (spread), 50 groups/project, 1 group/server.
  • •Free; add servers via API action (must be off for existing).
  • •No rack/host-level control; protects against single host failure only.
View Hetzner docs →

Private Network Subnets

→ Rumble: Subnets

high4 diffs›
  • •Hetzner subnets are defined with a network_zone (e.g. eu-central) and an IP range within the parent network CIDR via POST /v1/networks/{id}/subnets; Neutron subnets are independently addressable resources not scoped to zones.
  • •Hetzner private networks are limited to 100 servers per network; Neutron networks have no hardcoded server limit (quota-limited by project).
  • •Hetzner SDN operates at strictly Layer 3 (no broadcast, multicast, or unknown unicast traffic); Neutron supports L2 broadcast domains with ML2 backends (OVN/OVS).
  • •Hetzner subnets cannot be deleted individually while servers are attached; Neutron supports port removal and subnet deletion independently.
View Hetzner docs →

Project Billing

→ Rumble: Billing

high4 diffs›
  • •Hourly pro-rated with monthly cap, invoiced monthly post-usage to project Owner vs real-time OpenStack usage data via Ceilometer/gnocchi.
  • •No billing API endpoints; view invoices in console vs queryable meters/resources via APIs.
  • •Owner always billed for all project resources irrespective of member actions vs flexible billing/project assignment in OpenStack.
  • •Traffic overage in 100MB blocks with notifications to owner.
View Hetzner docs →

Project Members

→ Rumble: Team roles

high4 diffs›
  • •Console/email invite-based with fixed roles (Owner/Admin/Member/Restricted); no Keystone users/roles/groups API.
  • •Owner uniquely billed for project resources regardless of creator vs OpenStack project owners/admins configurable.
  • •Light accounts for externals limited to project (no own projects/products) vs full user accounts with multi-project access.
  • •Admin role manages members/tokens via UI; no API for users/roles; migrating user must re-invite via console.
View Hetzner docs →

Projects (flat, no organization hierarchy above project level)

→ Rumble: Organizations

high4 diffs›
  • •Hetzner has no organization or team hierarchy above the project level. Multiple Hetzner accounts cannot be grouped into an organization; access sharing across projects requires inviting individual accounts to each project separately.
  • •Hetzner API tokens are project-scoped bearer tokens with no cross-project token or service account concept. Keystone application credentials are user-scoped and work across projects when the user has appropriate roles.
  • •Hetzner projects are billing containers invoiced separately even under the same account; there is no consolidated billing across projects. OpenStack has no native billing hierarchy.
  • •Hetzner projects have no RBAC beyond owner vs. member; members cannot be restricted to specific resource types. OpenStack Keystone roles (admin, member, reader) provide granular per-project access control.
View Hetzner docs →

S3 Credentials (Access Key / Secret Key)

→ Rumble: Access control

high3 diffs›
  • •Project-scoped keys valid for all buckets in project by default; restrict via policy on key (Hetzner-specific?); Quake AI/Swift uses Keystone tokens/roles/EC2 creds for S3 compat or user roles for native.
  • •Up to 200 credentials across projects; Swift unlimited via Keystone.
  • •SSE-C only (no SSE-S3/KMS); Swift supports encryption via Ceph backend but API varies.
View Hetzner docs →

Server Snapshots (Image type: snapshot)

→ Rumble: Snapshots

high4 diffs›
  • •Hetzner server snapshots are created via POST /v1/servers/{id}/actions/create_image with type: snapshot. Hetzner recommends powering off the server first for data consistency, though live snapshots are supported. Nova createImage does not require VM shutdown.
  • •Hetzner snapshots are billed per gigabyte of compressed snapshot size per month (billed for the fraction of the month if deleted early). OpenStack image storage pricing is operator-defined.
  • •Hetzner snapshots are stored within the project and location where the server resides; cross-project sharing requires downloading and re-uploading. Glance images can be shared across OpenStack projects using image visibility controls.
  • •Hetzner has no snapshot scheduling API; snapshots are manual only. Automated backups (7 slots, 20% of server price/month) are a separate feature. OpenStack has no built-in snapshot scheduling.
View Hetzner docs →

Server Types

→ Rumble: Flavors

high4 diffs›
  • •Fixed predefined types (e.g. CX11, CPX31) with shared_vcpu (noisy neighbors) vs dedicated_vcpu.
  • •GET /v1/server_types lists all; no custom flavor creation like OpenStack.
  • •Includes pricing (hourly/monthly net/gross), included_traffic, architecture (x86/amd64/arm).
  • •Resize via change_type action, but limited to compatible types.
View Hetzner docs →

SSH Keys

→ Rumble: Key pairs

high4 diffs›
  • •API /v1/ssh_keys; POST public_key, name; inject array of ssh_keys on server create.
  • •No private key management; user provides public keys only.
  • •Fingerprint-based listing/filtering; labels support.
  • •Injected via cloud-init on boot.
View Hetzner docs →

Network· 30 mappings

API Token

→ Rumble: Authentication

high4 diffs›
  • •Hetzner API tokens are project-scoped: each token is valid only for the project it was created in and must be separately generated per project. OpenStack Keystone application credentials are user-scoped and can be used across projects when the user has appropriate roles.
  • •Hetzner has no OAuth2/OIDC integration for API access; all programmatic access requires a static bearer token. Keystone supports OIDC federation, LDAP backends, and federated identity (SAML2).
  • •Hetzner tokens have no built-in expiry and must be manually rotated; there is no token TTL or refresh concept. Keystone tokens have configurable TTLs (default 1 hour) and support re-authentication.
  • •Hetzner tokens are either read-only or read-write with no fine-grained scope. OpenStack roles (admin, member, reader) provide service-level access control per project.
View Hetzner docs →

Buckets

→ Rumble: Containers

high3 diffs›
  • •S3 API (PUT Bucket requires specific headers like x-amz-acl limited to private/public-read, LocationConstraint); Swift uses POST/PUT Container with broader ACLs via X-Container-Read/Write.
  • •Public access via https://bucket.location.your-objectstorage.com/object; Swift public via temp URLs or ACLs.
  • •Up to 100 buckets per account; Swift has no hard limit.
View Hetzner docs →

Cloud API

→ Rumble: API

high4 diffs›
  • •Proprietary REST API over HTTPS with Bearer token auth, not OpenStack Identity API (keystone) endpoints or mechanisms.
  • •Base URL https://api.hetzner.cloud/v1/ with resource-specific endpoints (e.g., /servers) vs OpenStack service endpoints (nova, cinder).
  • •No multi-project handling in single auth; separate per-project tokens vs keystone scopes/projects.
  • •Missing identity/catalog endpoints; no service discovery via API.
View Hetzner docs →

Cloud Load Balancers

→ Rumble: Load balancer

high4 diffs›
  • •Provisioned via CCM using annotations like load-balancer.hetzner.cloud/location=fsn1 on Services type LoadBalancer.
  • •Separate billed resource with HTTP, TCP, and UDP support plus TLS termination; integrates with private networks.
  • •Provider-managed regional load balancers use a simpler model than self-managed reverse proxies or Kubernetes LoadBalancer Services.
  • •L4 TCP/UDP support and two balancing algorithms differ from application-layer routing configured on a self-managed edge.
View Hetzner docs →

Cloud Servers

→ Rumble: Instances

high4 diffs›
  • •Servers provisioned individually via Hetzner API (hcloud), not OpenStack Nova flavors; fixed instance types like CX11 (1 vCPU, 2GB RAM, 20GB NVMe).
  • •No flavor customization; choose from predefined shared/dedicated vCPU series.
  • •Billing hourly with monthly cap per server (e.g., €3.29/mo cap for CX11), charged even when powered off until deleted, unlike typical OpenStack stop-to-pause billing.
  • •Custom REST API at api.hetzner.cloud/v1/servers instead of OpenStack Nova /v2.1/servers (different auth, payloads, response formats).
View Hetzner docs →

Cloud Volumes

→ Rumble: Volumes

high4 diffs›
  • •Provisioned via Hetzner CSI driver (csi.hetzner.cloud), ReadWriteOnce only, min 10GB, NVMe-based.
  • •Billed €0.044/GB/month until deleted, no pause; attach/detach via CSI, unlike Cinder's broader access modes (RWX via Manila).
  • •Snapshots supported but no volume encryption at rest by default; location-specific (e.g., fsn1).
  • •Proprietary REST API at https://api.hetzner.cloud/v1/volumes using Bearer token auth, not OpenStack Cinder API (v3 JSON over Keystone). Endpoints like POST /volumes/{id}/actions/attach, POST /volumes/{id}/actions/resize (upsize only). No /v3/{project_id}/volumes/{volume_id}/action os-extend.
View Hetzner docs →

Floating IPs

→ Rumble: Floating IPs

high4 diffs›
  • •Flat monthly billing €3/IPv4 or hourly equivalent, not usage-based per hour ().
  • •Locked to specific location/zone, cannot move across datacenters unlike global pools in OpenStack ().
  • •Hot-reassign without server reboot but requires manual OS config (e.g., ifupdown/netplan) post-change ().
  • •Limits: 10/account default, 20/server max; single assignment at a time ().
View Hetzner docs →

hcloud_firewall

→ Rumble: Security groups

high4 diffs›
  • •Applies only to Cloud Servers (not Load Balancers), up to 5/server, 500 rules max; free ().
  • •Default: inbound blocked, outbound allowed; uses label selectors for auto-apply; statefulness not specified but likely stateless given rules ().
  • •No per-port/per-network granularity like Neutron SG rules; connection limits (80k concurrent/server) ().
  • •Custom Hetzner API vs Neutron security-groups API.
View Hetzner docs →

Hetzner API Changelog

→ Rumble: API versioning

›

No specific divergences documented yet.

View Hetzner docs →

Hetzner Cloud hourly/monthly pricing with monthly cap

→ Rumble: Pricing

high4 diffs›
  • •Hetzner bills servers per hour with a monthly cap; if a server is deleted before month end, only the hourly rate applies. Servers are billed even when powered off because resources remain allocated. Quake AI's billing model is operator-defined.
  • •Hetzner pricing is embedded in the server type API response (GET /v1/server_types): each type includes a prices array with hourly and monthly (net/gross) for each location. This makes Hetzner pricing programmatically discoverable, unlike AWS/Azure/GCP which require separate pricing APIs.
  • •Hetzner includes a traffic allowance per server (e.g. 20 TB/month for CX21); overage is billed per 100MB block rounded up. Quake AI's bandwidth pricing is operator-defined.
  • •Hetzner snapshots are billed per GB of compressed snapshot storage per month; backups are billed at 20% of the server price for up to 7 automated backup slots.
View Hetzner docs →

Hetzner Cloud Networking (Private Networks + Floating IPs + Firewalls)

→ Rumble: Networking

high4 diffs›
  • •Hetzner's network model has three main primitives: Private Networks (L3 SDN), Floating IPs (public IP reassignment), and Firewalls (stateful L3/L4 rules). Neutron separates these into networks, subnets, routers, ports, floating IPs, security groups, and FWaaS rules as independently addressable resources.
  • •Hetzner does not have a concept of external networks, provider networks, or network types (flat/VLAN/VXLAN). All private networking is via Hetzner's proprietary SDN; Neutron supports multiple backend drivers (OVN, OVS, ML2 plugins).
  • •IPv6 on Hetzner private networks is not supported as of April 2026; only public interfaces can have IPv6 addresses. Neutron supports dual-stack subnets (IPv4+IPv6) on private networks.
  • •Hetzner network limits: max 100 servers per private network, max 50 private networks per project. Neutron quotas are operator-defined and typically much higher.
View Hetzner docs →

Hetzner Object Storage (S3-compatible, Ceph-backed)

→ Rumble: S3 compatibility

high4 diffs›
  • •Hetzner Object Storage endpoint format is location-scoped: {bucket}.{location}.your-objectstorage.com (e.g. my-bucket.fsn1.your-objectstorage.com); Quake AI uses a regional endpoint. Credentials are project-scoped and must be regenerated per project.
  • •Hetzner does not publish a full S3 compatibility matrix; advanced operations (S3 Select, Object Lock, Replication, Lifecycle rules) are not documented as supported. Both Hetzner and Quake AI use Ceph RGW, so core S3 CRUD, multipart upload, and SigV4 auth work on both.
  • •Hetzner credentials are project-bound access key/secret pairs separate from Hetzner API tokens; the same S3 credential cannot be used across projects. Quake AI EC2 credentials are tied to a Keystone user and scoped per project via role assignments.
  • •Hetzner Object Storage locations (fsn1, nbg1, hel1) are distinct endpoints; buckets in different locations require separate credentials and aliases. Quake AI object storage uses a single regional endpoint per deployment.
View Hetzner docs →

Images

→ Rumble: Images

high4 diffs›
  • •Includes system images (OS), user images (snapshots/backups).
  • •API /v1/images; create via server action create_image (type=snapshot/backup).
  • •Billed per GB/month; backups cost 20% of server price.
  • •No direct image upload; custom via ISO attach or rebuild.
View Hetzner docs →

N/A (No equivalent)

→ Rumble: Snapshots

high4 diffs›
  • •No support for volume snapshots in API or console; explicitly stated 'we do not provide Backups or Snapshots for Volumes' and server snapshots exclude volumes.
  • •Workarounds like rsync/dd to new volume required, unlike Cinder's create/delete/get/manage_snapshot API.
  • •Recent confirmations (2026) show no addition of feature.
  • •Created as Image type='snapshot' via server action; stored under /images.
View Hetzner docs →

N/A (No managed NAT service — self-managed Linux NAT server required)

→ Rumble: NAT

high4 diffs›
  • •Hetzner has no managed NAT gateway service. Outbound internet access for private servers requires provisioning a server with a public IP, enabling Linux IP forwarding (net.ipv4.ip_forward=1), and configuring iptables MASQUERADE. Neutron provides managed SNAT via the L3 agent when a router has an external gateway attached.
  • •The NAT server must be provisioned as a regular billable server (minimum ~€3.29/month); Neutron SNAT is a control-plane service with no additional instance cost.
  • •Hetzner SDN routes traffic to the NAT server via a static network route (destination: 0.0.0.0/0, gateway: <nat-server-private-ip>); this must be manually configured and updated if the NAT server IP changes. Neutron manages routing automatically when a router has an external gateway.
  • •No native HA NAT option; high availability requires a custom keepalived/VRRP setup. Neutron L3 HA routers support active-standby failover.
View Hetzner docs →

N/A (No port resource — server network interfaces managed implicitly via attach action)

→ Rumble: Ports

high4 diffs›
  • •Hetzner has no port concept. Network attachment is managed at the server level via POST /v1/servers/{id}/actions/attach_to_network with an optional fixed IP. In Neutron, a port is an independent resource that can exist without a server attached, has its own UUID, security groups, and fixed IP.
  • •Neutron ports support multiple fixed IPs per port, allowed-address-pairs for virtual IP failover (VRRP/keepalived), and port security disable. Hetzner network attachment has no equivalent of allowed-address-pairs or port security controls.
  • •In Neutron, ports are the attachment point for security groups (POST /v2.0/ports with security_groups). Hetzner uses Firewalls (POST /v1/firewalls) attached to servers or server groups directly, not to network interfaces.
  • •Neutron port status transitions (ACTIVE/DOWN/BUILD) are observable via API. Hetzner server network attachment status is an action result with no independent port lifecycle.
View Hetzner docs →

N/A (No router resource — static routes via network routes API)

→ Rumble: Routers

high4 diffs›
  • •Hetzner has no managed router resource. Inter-subnet and internet routing is configured via static routes in the network (POST /v1/networks/{id}/routes) pointing to a gateway server IP. Neutron provides a managed router resource (POST /v2.0/routers) with a dedicated control-plane service.
  • •Adding an external gateway in Neutron (connecting a router to the external network for floating IP allocation) is a single API call. On Hetzner, internet egress requires provisioning a server with IP forwarding and iptables MASQUERADE configured as a NAT gateway — all manual or IaC-managed steps.
  • •Neutron router interfaces can be hot-added and removed. Hetzner routes are defined at the network level and take effect in the SDN without a dedicated router resource to manage.
  • •Dynamic routing protocols (BGP, OSPF) are not supported on Hetzner private networks; Neutron supports BGP via the neutron-dynamic-routing extension.
View Hetzner docs →

N/A (No subscription model — pay-as-you-go with monthly invoices per project)

→ Rumble: Subscriptions

high4 diffs›
  • •Hetzner has no subscription or commitment model; all billing is usage-based with monthly invoices. There are no reserved instance discounts or committed use discounts. Quake AI's pricing model is operator-defined.
  • •Hetzner invoices are generated per project at the end of each month; multiple projects are invoiced separately even under the same Hetzner account. There is no consolidated invoice across projects.
  • •Hetzner has no free tier or trial credits for new accounts (unlike AWS, GCP, Azure which offer free tiers). Resource usage begins billing immediately on provisioning.
  • •Hetzner invoices include VAT for private customers in Germany (19%); business customers in EU can provide a VAT ID. Quake AI's tax handling is operator-defined.
View Hetzner docs →

Networks

→ Rumble: Networks

high4 diffs›
  • •Private networks (vSwitch-like but called Networks) created via API, up to 10.0.0.0/8 subnets, attach to servers/LBs.
  • •CCM supports route controller for pod networking when enabled; no native provider networks like OpenStack.
  • •Limited to Hetzner regions, IPv4 only for private (IPv6 public).
  • •Networks are free with no usage charges, unlike potential metering in OpenStack clouds ().
View Hetzner docs →

No managed Kubernetes service (self-managed with CCM and CSI)

→ Rumble: Kubernetes

high3 diffs›
  • •Similar self-managed model to Quake AI; both require users to provision servers and install Kubernetes with tools like OpenTofu/Terraform and k3s/kubeadm. Hetzner provides a Cloud Controller Manager and CSI driver, while Quake AI uses OpenStack-compatible storage and network integrations.
  • •Hetzner-specific cloud-provider=external CCM must be deployed manually in kube-system namespace.
  • •No cluster API or web UI for cluster lifecycle; all via Hetzner Cloud API token and kubectl.
View Hetzner docs →

Object Versioning

→ Rumble: Versioning

medium1 diff›
  • •Supported in both, but Hetzner S3 limited NoncurrentVersionExpiration to NoncurrentDays only.
View Hetzner docs →

Placement Groups

→ Rumble: Server groups

high4 diffs›
  • •Only 'spread' type (anti-affinity: servers on different physical hosts); no 'affinity' or policy-based like OpenStack.
  • •Max 10 servers/group (spread), 50 groups/project, 1 group/server.
  • •Free; add servers via API action (must be off for existing).
  • •No rack/host-level control; protects against single host failure only.
View Hetzner docs →

Private Network Subnets

→ Rumble: Subnets

high4 diffs›
  • •Hetzner subnets are defined with a network_zone (e.g. eu-central) and an IP range within the parent network CIDR via POST /v1/networks/{id}/subnets; Neutron subnets are independently addressable resources not scoped to zones.
  • •Hetzner private networks are limited to 100 servers per network; Neutron networks have no hardcoded server limit (quota-limited by project).
  • •Hetzner SDN operates at strictly Layer 3 (no broadcast, multicast, or unknown unicast traffic); Neutron supports L2 broadcast domains with ML2 backends (OVN/OVS).
  • •Hetzner subnets cannot be deleted individually while servers are attached; Neutron supports port removal and subnet deletion independently.
View Hetzner docs →

Project Billing

→ Rumble: Billing

high4 diffs›
  • •Hourly pro-rated with monthly cap, invoiced monthly post-usage to project Owner vs real-time OpenStack usage data via Ceilometer/gnocchi.
  • •No billing API endpoints; view invoices in console vs queryable meters/resources via APIs.
  • •Owner always billed for all project resources irrespective of member actions vs flexible billing/project assignment in OpenStack.
  • •Traffic overage in 100MB blocks with notifications to owner.
View Hetzner docs →

Project Members

→ Rumble: Team roles

high4 diffs›
  • •Console/email invite-based with fixed roles (Owner/Admin/Member/Restricted); no Keystone users/roles/groups API.
  • •Owner uniquely billed for project resources regardless of creator vs OpenStack project owners/admins configurable.
  • •Light accounts for externals limited to project (no own projects/products) vs full user accounts with multi-project access.
  • •Admin role manages members/tokens via UI; no API for users/roles; migrating user must re-invite via console.
View Hetzner docs →

Projects (flat, no organization hierarchy above project level)

→ Rumble: Organizations

high4 diffs›
  • •Hetzner has no organization or team hierarchy above the project level. Multiple Hetzner accounts cannot be grouped into an organization; access sharing across projects requires inviting individual accounts to each project separately.
  • •Hetzner API tokens are project-scoped bearer tokens with no cross-project token or service account concept. Keystone application credentials are user-scoped and work across projects when the user has appropriate roles.
  • •Hetzner projects are billing containers invoiced separately even under the same account; there is no consolidated billing across projects. OpenStack has no native billing hierarchy.
  • •Hetzner projects have no RBAC beyond owner vs. member; members cannot be restricted to specific resource types. OpenStack Keystone roles (admin, member, reader) provide granular per-project access control.
View Hetzner docs →

S3 Credentials (Access Key / Secret Key)

→ Rumble: Access control

high3 diffs›
  • •Project-scoped keys valid for all buckets in project by default; restrict via policy on key (Hetzner-specific?); Quake AI/Swift uses Keystone tokens/roles/EC2 creds for S3 compat or user roles for native.
  • •Up to 200 credentials across projects; Swift unlimited via Keystone.
  • •SSE-C only (no SSE-S3/KMS); Swift supports encryption via Ceph backend but API varies.
View Hetzner docs →

Server Snapshots (Image type: snapshot)

→ Rumble: Snapshots

high4 diffs›
  • •Hetzner server snapshots are created via POST /v1/servers/{id}/actions/create_image with type: snapshot. Hetzner recommends powering off the server first for data consistency, though live snapshots are supported. Nova createImage does not require VM shutdown.
  • •Hetzner snapshots are billed per gigabyte of compressed snapshot size per month (billed for the fraction of the month if deleted early). OpenStack image storage pricing is operator-defined.
  • •Hetzner snapshots are stored within the project and location where the server resides; cross-project sharing requires downloading and re-uploading. Glance images can be shared across OpenStack projects using image visibility controls.
  • •Hetzner has no snapshot scheduling API; snapshots are manual only. Automated backups (7 slots, 20% of server price/month) are a separate feature. OpenStack has no built-in snapshot scheduling.
View Hetzner docs →

Server Types

→ Rumble: Flavors

high4 diffs›
  • •Fixed predefined types (e.g. CX11, CPX31) with shared_vcpu (noisy neighbors) vs dedicated_vcpu.
  • •GET /v1/server_types lists all; no custom flavor creation like OpenStack.
  • •Includes pricing (hourly/monthly net/gross), included_traffic, architecture (x86/amd64/arm).
  • •Resize via change_type action, but limited to compatible types.
View Hetzner docs →

SSH Keys

→ Rumble: Key pairs

high4 diffs›
  • •API /v1/ssh_keys; POST public_key, name; inject array of ssh_keys on server create.
  • •No private key management; user provides public keys only.
  • •Fingerprint-based listing/filtering; labels support.
  • •Injected via cloud-init on boot.
View Hetzner docs →

Object storage· 4 mappings

Buckets

→ Rumble: Containers

high3 diffs›
  • •S3 API (PUT Bucket requires specific headers like x-amz-acl limited to private/public-read, LocationConstraint); Swift uses POST/PUT Container with broader ACLs via X-Container-Read/Write.
  • •Public access via https://bucket.location.your-objectstorage.com/object; Swift public via temp URLs or ACLs.
  • •Up to 100 buckets per account; Swift has no hard limit.
View Hetzner docs →

Hetzner Object Storage (S3-compatible, Ceph-backed)

→ Rumble: S3 compatibility

high4 diffs›
  • •Hetzner Object Storage endpoint format is location-scoped: {bucket}.{location}.your-objectstorage.com (e.g. my-bucket.fsn1.your-objectstorage.com); Quake AI uses a regional endpoint. Credentials are project-scoped and must be regenerated per project.
  • •Hetzner does not publish a full S3 compatibility matrix; advanced operations (S3 Select, Object Lock, Replication, Lifecycle rules) are not documented as supported. Both Hetzner and Quake AI use Ceph RGW, so core S3 CRUD, multipart upload, and SigV4 auth work on both.
  • •Hetzner credentials are project-bound access key/secret pairs separate from Hetzner API tokens; the same S3 credential cannot be used across projects. Quake AI EC2 credentials are tied to a Keystone user and scoped per project via role assignments.
  • •Hetzner Object Storage locations (fsn1, nbg1, hel1) are distinct endpoints; buckets in different locations require separate credentials and aliases. Quake AI object storage uses a single regional endpoint per deployment.
View Hetzner docs →

Object Versioning

→ Rumble: Versioning

medium1 diff›
  • •Supported in both, but Hetzner S3 limited NoncurrentVersionExpiration to NoncurrentDays only.
View Hetzner docs →

S3 Credentials (Access Key / Secret Key)

→ Rumble: Access control

high3 diffs›
  • •Project-scoped keys valid for all buckets in project by default; restrict via policy on key (Hetzner-specific?); Quake AI/Swift uses Keystone tokens/roles/EC2 creds for S3 compat or user roles for native.
  • •Up to 200 credentials across projects; Swift unlimited via Keystone.
  • •SSE-C only (no SSE-S3/KMS); Swift supports encryption via Ceph backend but API varies.
View Hetzner docs →

Block storage· 30 mappings

API Token

→ Rumble: Authentication

high4 diffs›
  • •Hetzner API tokens are project-scoped: each token is valid only for the project it was created in and must be separately generated per project. OpenStack Keystone application credentials are user-scoped and can be used across projects when the user has appropriate roles.
  • •Hetzner has no OAuth2/OIDC integration for API access; all programmatic access requires a static bearer token. Keystone supports OIDC federation, LDAP backends, and federated identity (SAML2).
  • •Hetzner tokens have no built-in expiry and must be manually rotated; there is no token TTL or refresh concept. Keystone tokens have configurable TTLs (default 1 hour) and support re-authentication.
  • •Hetzner tokens are either read-only or read-write with no fine-grained scope. OpenStack roles (admin, member, reader) provide service-level access control per project.
View Hetzner docs →

Buckets

→ Rumble: Containers

high3 diffs›
  • •S3 API (PUT Bucket requires specific headers like x-amz-acl limited to private/public-read, LocationConstraint); Swift uses POST/PUT Container with broader ACLs via X-Container-Read/Write.
  • •Public access via https://bucket.location.your-objectstorage.com/object; Swift public via temp URLs or ACLs.
  • •Up to 100 buckets per account; Swift has no hard limit.
View Hetzner docs →

Cloud API

→ Rumble: API

high4 diffs›
  • •Proprietary REST API over HTTPS with Bearer token auth, not OpenStack Identity API (keystone) endpoints or mechanisms.
  • •Base URL https://api.hetzner.cloud/v1/ with resource-specific endpoints (e.g., /servers) vs OpenStack service endpoints (nova, cinder).
  • •No multi-project handling in single auth; separate per-project tokens vs keystone scopes/projects.
  • •Missing identity/catalog endpoints; no service discovery via API.
View Hetzner docs →

Cloud Load Balancers

→ Rumble: Load balancer

high4 diffs›
  • •Provisioned via CCM using annotations like load-balancer.hetzner.cloud/location=fsn1 on Services type LoadBalancer.
  • •Separate billed resource with HTTP, TCP, and UDP support plus TLS termination; integrates with private networks.
  • •Provider-managed regional load balancers use a simpler model than self-managed reverse proxies or Kubernetes LoadBalancer Services.
  • •L4 TCP/UDP support and two balancing algorithms differ from application-layer routing configured on a self-managed edge.
View Hetzner docs →

Cloud Servers

→ Rumble: Instances

high4 diffs›
  • •Servers provisioned individually via Hetzner API (hcloud), not OpenStack Nova flavors; fixed instance types like CX11 (1 vCPU, 2GB RAM, 20GB NVMe).
  • •No flavor customization; choose from predefined shared/dedicated vCPU series.
  • •Billing hourly with monthly cap per server (e.g., €3.29/mo cap for CX11), charged even when powered off until deleted, unlike typical OpenStack stop-to-pause billing.
  • •Custom REST API at api.hetzner.cloud/v1/servers instead of OpenStack Nova /v2.1/servers (different auth, payloads, response formats).
View Hetzner docs →

Cloud Volumes

→ Rumble: Volumes

high4 diffs›
  • •Provisioned via Hetzner CSI driver (csi.hetzner.cloud), ReadWriteOnce only, min 10GB, NVMe-based.
  • •Billed €0.044/GB/month until deleted, no pause; attach/detach via CSI, unlike Cinder's broader access modes (RWX via Manila).
  • •Snapshots supported but no volume encryption at rest by default; location-specific (e.g., fsn1).
  • •Proprietary REST API at https://api.hetzner.cloud/v1/volumes using Bearer token auth, not OpenStack Cinder API (v3 JSON over Keystone). Endpoints like POST /volumes/{id}/actions/attach, POST /volumes/{id}/actions/resize (upsize only). No /v3/{project_id}/volumes/{volume_id}/action os-extend.
View Hetzner docs →

Floating IPs

→ Rumble: Floating IPs

high4 diffs›
  • •Flat monthly billing €3/IPv4 or hourly equivalent, not usage-based per hour ().
  • •Locked to specific location/zone, cannot move across datacenters unlike global pools in OpenStack ().
  • •Hot-reassign without server reboot but requires manual OS config (e.g., ifupdown/netplan) post-change ().
  • •Limits: 10/account default, 20/server max; single assignment at a time ().
View Hetzner docs →

hcloud_firewall

→ Rumble: Security groups

high4 diffs›
  • •Applies only to Cloud Servers (not Load Balancers), up to 5/server, 500 rules max; free ().
  • •Default: inbound blocked, outbound allowed; uses label selectors for auto-apply; statefulness not specified but likely stateless given rules ().
  • •No per-port/per-network granularity like Neutron SG rules; connection limits (80k concurrent/server) ().
  • •Custom Hetzner API vs Neutron security-groups API.
View Hetzner docs →

Hetzner API Changelog

→ Rumble: API versioning

›

No specific divergences documented yet.

View Hetzner docs →

Hetzner Cloud hourly/monthly pricing with monthly cap

→ Rumble: Pricing

high4 diffs›
  • •Hetzner bills servers per hour with a monthly cap; if a server is deleted before month end, only the hourly rate applies. Servers are billed even when powered off because resources remain allocated. Quake AI's billing model is operator-defined.
  • •Hetzner pricing is embedded in the server type API response (GET /v1/server_types): each type includes a prices array with hourly and monthly (net/gross) for each location. This makes Hetzner pricing programmatically discoverable, unlike AWS/Azure/GCP which require separate pricing APIs.
  • •Hetzner includes a traffic allowance per server (e.g. 20 TB/month for CX21); overage is billed per 100MB block rounded up. Quake AI's bandwidth pricing is operator-defined.
  • •Hetzner snapshots are billed per GB of compressed snapshot storage per month; backups are billed at 20% of the server price for up to 7 automated backup slots.
View Hetzner docs →

Hetzner Cloud Networking (Private Networks + Floating IPs + Firewalls)

→ Rumble: Networking

high4 diffs›
  • •Hetzner's network model has three main primitives: Private Networks (L3 SDN), Floating IPs (public IP reassignment), and Firewalls (stateful L3/L4 rules). Neutron separates these into networks, subnets, routers, ports, floating IPs, security groups, and FWaaS rules as independently addressable resources.
  • •Hetzner does not have a concept of external networks, provider networks, or network types (flat/VLAN/VXLAN). All private networking is via Hetzner's proprietary SDN; Neutron supports multiple backend drivers (OVN, OVS, ML2 plugins).
  • •IPv6 on Hetzner private networks is not supported as of April 2026; only public interfaces can have IPv6 addresses. Neutron supports dual-stack subnets (IPv4+IPv6) on private networks.
  • •Hetzner network limits: max 100 servers per private network, max 50 private networks per project. Neutron quotas are operator-defined and typically much higher.
View Hetzner docs →

Hetzner Object Storage (S3-compatible, Ceph-backed)

→ Rumble: S3 compatibility

high4 diffs›
  • •Hetzner Object Storage endpoint format is location-scoped: {bucket}.{location}.your-objectstorage.com (e.g. my-bucket.fsn1.your-objectstorage.com); Quake AI uses a regional endpoint. Credentials are project-scoped and must be regenerated per project.
  • •Hetzner does not publish a full S3 compatibility matrix; advanced operations (S3 Select, Object Lock, Replication, Lifecycle rules) are not documented as supported. Both Hetzner and Quake AI use Ceph RGW, so core S3 CRUD, multipart upload, and SigV4 auth work on both.
  • •Hetzner credentials are project-bound access key/secret pairs separate from Hetzner API tokens; the same S3 credential cannot be used across projects. Quake AI EC2 credentials are tied to a Keystone user and scoped per project via role assignments.
  • •Hetzner Object Storage locations (fsn1, nbg1, hel1) are distinct endpoints; buckets in different locations require separate credentials and aliases. Quake AI object storage uses a single regional endpoint per deployment.
View Hetzner docs →

Images

→ Rumble: Images

high4 diffs›
  • •Includes system images (OS), user images (snapshots/backups).
  • •API /v1/images; create via server action create_image (type=snapshot/backup).
  • •Billed per GB/month; backups cost 20% of server price.
  • •No direct image upload; custom via ISO attach or rebuild.
View Hetzner docs →

N/A (No equivalent)

→ Rumble: Snapshots

high4 diffs›
  • •No support for volume snapshots in API or console; explicitly stated 'we do not provide Backups or Snapshots for Volumes' and server snapshots exclude volumes.
  • •Workarounds like rsync/dd to new volume required, unlike Cinder's create/delete/get/manage_snapshot API.
  • •Recent confirmations (2026) show no addition of feature.
  • •Created as Image type='snapshot' via server action; stored under /images.
View Hetzner docs →

N/A (No managed NAT service — self-managed Linux NAT server required)

→ Rumble: NAT

high4 diffs›
  • •Hetzner has no managed NAT gateway service. Outbound internet access for private servers requires provisioning a server with a public IP, enabling Linux IP forwarding (net.ipv4.ip_forward=1), and configuring iptables MASQUERADE. Neutron provides managed SNAT via the L3 agent when a router has an external gateway attached.
  • •The NAT server must be provisioned as a regular billable server (minimum ~€3.29/month); Neutron SNAT is a control-plane service with no additional instance cost.
  • •Hetzner SDN routes traffic to the NAT server via a static network route (destination: 0.0.0.0/0, gateway: <nat-server-private-ip>); this must be manually configured and updated if the NAT server IP changes. Neutron manages routing automatically when a router has an external gateway.
  • •No native HA NAT option; high availability requires a custom keepalived/VRRP setup. Neutron L3 HA routers support active-standby failover.
View Hetzner docs →

N/A (No port resource — server network interfaces managed implicitly via attach action)

→ Rumble: Ports

high4 diffs›
  • •Hetzner has no port concept. Network attachment is managed at the server level via POST /v1/servers/{id}/actions/attach_to_network with an optional fixed IP. In Neutron, a port is an independent resource that can exist without a server attached, has its own UUID, security groups, and fixed IP.
  • •Neutron ports support multiple fixed IPs per port, allowed-address-pairs for virtual IP failover (VRRP/keepalived), and port security disable. Hetzner network attachment has no equivalent of allowed-address-pairs or port security controls.
  • •In Neutron, ports are the attachment point for security groups (POST /v2.0/ports with security_groups). Hetzner uses Firewalls (POST /v1/firewalls) attached to servers or server groups directly, not to network interfaces.
  • •Neutron port status transitions (ACTIVE/DOWN/BUILD) are observable via API. Hetzner server network attachment status is an action result with no independent port lifecycle.
View Hetzner docs →

N/A (No router resource — static routes via network routes API)

→ Rumble: Routers

high4 diffs›
  • •Hetzner has no managed router resource. Inter-subnet and internet routing is configured via static routes in the network (POST /v1/networks/{id}/routes) pointing to a gateway server IP. Neutron provides a managed router resource (POST /v2.0/routers) with a dedicated control-plane service.
  • •Adding an external gateway in Neutron (connecting a router to the external network for floating IP allocation) is a single API call. On Hetzner, internet egress requires provisioning a server with IP forwarding and iptables MASQUERADE configured as a NAT gateway — all manual or IaC-managed steps.
  • •Neutron router interfaces can be hot-added and removed. Hetzner routes are defined at the network level and take effect in the SDN without a dedicated router resource to manage.
  • •Dynamic routing protocols (BGP, OSPF) are not supported on Hetzner private networks; Neutron supports BGP via the neutron-dynamic-routing extension.
View Hetzner docs →

N/A (No subscription model — pay-as-you-go with monthly invoices per project)

→ Rumble: Subscriptions

high4 diffs›
  • •Hetzner has no subscription or commitment model; all billing is usage-based with monthly invoices. There are no reserved instance discounts or committed use discounts. Quake AI's pricing model is operator-defined.
  • •Hetzner invoices are generated per project at the end of each month; multiple projects are invoiced separately even under the same Hetzner account. There is no consolidated invoice across projects.
  • •Hetzner has no free tier or trial credits for new accounts (unlike AWS, GCP, Azure which offer free tiers). Resource usage begins billing immediately on provisioning.
  • •Hetzner invoices include VAT for private customers in Germany (19%); business customers in EU can provide a VAT ID. Quake AI's tax handling is operator-defined.
View Hetzner docs →

Networks

→ Rumble: Networks

high4 diffs›
  • •Private networks (vSwitch-like but called Networks) created via API, up to 10.0.0.0/8 subnets, attach to servers/LBs.
  • •CCM supports route controller for pod networking when enabled; no native provider networks like OpenStack.
  • •Limited to Hetzner regions, IPv4 only for private (IPv6 public).
  • •Networks are free with no usage charges, unlike potential metering in OpenStack clouds ().
View Hetzner docs →

No managed Kubernetes service (self-managed with CCM and CSI)

→ Rumble: Kubernetes

high3 diffs›
  • •Similar self-managed model to Quake AI; both require users to provision servers and install Kubernetes with tools like OpenTofu/Terraform and k3s/kubeadm. Hetzner provides a Cloud Controller Manager and CSI driver, while Quake AI uses OpenStack-compatible storage and network integrations.
  • •Hetzner-specific cloud-provider=external CCM must be deployed manually in kube-system namespace.
  • •No cluster API or web UI for cluster lifecycle; all via Hetzner Cloud API token and kubectl.
View Hetzner docs →

Object Versioning

→ Rumble: Versioning

medium1 diff›
  • •Supported in both, but Hetzner S3 limited NoncurrentVersionExpiration to NoncurrentDays only.
View Hetzner docs →

Placement Groups

→ Rumble: Server groups

high4 diffs›
  • •Only 'spread' type (anti-affinity: servers on different physical hosts); no 'affinity' or policy-based like OpenStack.
  • •Max 10 servers/group (spread), 50 groups/project, 1 group/server.
  • •Free; add servers via API action (must be off for existing).
  • •No rack/host-level control; protects against single host failure only.
View Hetzner docs →

Private Network Subnets

→ Rumble: Subnets

high4 diffs›
  • •Hetzner subnets are defined with a network_zone (e.g. eu-central) and an IP range within the parent network CIDR via POST /v1/networks/{id}/subnets; Neutron subnets are independently addressable resources not scoped to zones.
  • •Hetzner private networks are limited to 100 servers per network; Neutron networks have no hardcoded server limit (quota-limited by project).
  • •Hetzner SDN operates at strictly Layer 3 (no broadcast, multicast, or unknown unicast traffic); Neutron supports L2 broadcast domains with ML2 backends (OVN/OVS).
  • •Hetzner subnets cannot be deleted individually while servers are attached; Neutron supports port removal and subnet deletion independently.
View Hetzner docs →

Project Billing

→ Rumble: Billing

high4 diffs›
  • •Hourly pro-rated with monthly cap, invoiced monthly post-usage to project Owner vs real-time OpenStack usage data via Ceilometer/gnocchi.
  • •No billing API endpoints; view invoices in console vs queryable meters/resources via APIs.
  • •Owner always billed for all project resources irrespective of member actions vs flexible billing/project assignment in OpenStack.
  • •Traffic overage in 100MB blocks with notifications to owner.
View Hetzner docs →

Project Members

→ Rumble: Team roles

high4 diffs›
  • •Console/email invite-based with fixed roles (Owner/Admin/Member/Restricted); no Keystone users/roles/groups API.
  • •Owner uniquely billed for project resources regardless of creator vs OpenStack project owners/admins configurable.
  • •Light accounts for externals limited to project (no own projects/products) vs full user accounts with multi-project access.
  • •Admin role manages members/tokens via UI; no API for users/roles; migrating user must re-invite via console.
View Hetzner docs →

Projects (flat, no organization hierarchy above project level)

→ Rumble: Organizations

high4 diffs›
  • •Hetzner has no organization or team hierarchy above the project level. Multiple Hetzner accounts cannot be grouped into an organization; access sharing across projects requires inviting individual accounts to each project separately.
  • •Hetzner API tokens are project-scoped bearer tokens with no cross-project token or service account concept. Keystone application credentials are user-scoped and work across projects when the user has appropriate roles.
  • •Hetzner projects are billing containers invoiced separately even under the same account; there is no consolidated billing across projects. OpenStack has no native billing hierarchy.
  • •Hetzner projects have no RBAC beyond owner vs. member; members cannot be restricted to specific resource types. OpenStack Keystone roles (admin, member, reader) provide granular per-project access control.
View Hetzner docs →

S3 Credentials (Access Key / Secret Key)

→ Rumble: Access control

high3 diffs›
  • •Project-scoped keys valid for all buckets in project by default; restrict via policy on key (Hetzner-specific?); Quake AI/Swift uses Keystone tokens/roles/EC2 creds for S3 compat or user roles for native.
  • •Up to 200 credentials across projects; Swift unlimited via Keystone.
  • •SSE-C only (no SSE-S3/KMS); Swift supports encryption via Ceph backend but API varies.
View Hetzner docs →

Server Snapshots (Image type: snapshot)

→ Rumble: Snapshots

high4 diffs›
  • •Hetzner server snapshots are created via POST /v1/servers/{id}/actions/create_image with type: snapshot. Hetzner recommends powering off the server first for data consistency, though live snapshots are supported. Nova createImage does not require VM shutdown.
  • •Hetzner snapshots are billed per gigabyte of compressed snapshot size per month (billed for the fraction of the month if deleted early). OpenStack image storage pricing is operator-defined.
  • •Hetzner snapshots are stored within the project and location where the server resides; cross-project sharing requires downloading and re-uploading. Glance images can be shared across OpenStack projects using image visibility controls.
  • •Hetzner has no snapshot scheduling API; snapshots are manual only. Automated backups (7 slots, 20% of server price/month) are a separate feature. OpenStack has no built-in snapshot scheduling.
View Hetzner docs →

Server Types

→ Rumble: Flavors

high4 diffs›
  • •Fixed predefined types (e.g. CX11, CPX31) with shared_vcpu (noisy neighbors) vs dedicated_vcpu.
  • •GET /v1/server_types lists all; no custom flavor creation like OpenStack.
  • •Includes pricing (hourly/monthly net/gross), included_traffic, architecture (x86/amd64/arm).
  • •Resize via change_type action, but limited to compatible types.
View Hetzner docs →

SSH Keys

→ Rumble: Key pairs

high4 diffs›
  • •API /v1/ssh_keys; POST public_key, name; inject array of ssh_keys on server create.
  • •No private key management; user provides public keys only.
  • •Fingerprint-based listing/filtering; labels support.
  • •Injected via cloud-init on boot.
View Hetzner docs →

Kubernetes· 1 mapping

No managed Kubernetes service (self-managed with CCM and CSI)

→ Rumble: Kubernetes

high3 diffs›
  • •Similar self-managed model to Quake AI; both require users to provision servers and install Kubernetes with tools like OpenTofu/Terraform and k3s/kubeadm. Hetzner provides a Cloud Controller Manager and CSI driver, while Quake AI uses OpenStack-compatible storage and network integrations.
  • •Hetzner-specific cloud-provider=external CCM must be deployed manually in kube-system namespace.
  • •No cluster API or web UI for cluster lifecycle; all via Hetzner Cloud API token and kubectl.
View Hetzner docs →

Account· 3 mappings

API Token

→ Rumble: Authentication

high4 diffs›
  • •Hetzner API tokens are project-scoped: each token is valid only for the project it was created in and must be separately generated per project. OpenStack Keystone application credentials are user-scoped and can be used across projects when the user has appropriate roles.
  • •Hetzner has no OAuth2/OIDC integration for API access; all programmatic access requires a static bearer token. Keystone supports OIDC federation, LDAP backends, and federated identity (SAML2).
  • •Hetzner tokens have no built-in expiry and must be manually rotated; there is no token TTL or refresh concept. Keystone tokens have configurable TTLs (default 1 hour) and support re-authentication.
  • •Hetzner tokens are either read-only or read-write with no fine-grained scope. OpenStack roles (admin, member, reader) provide service-level access control per project.
View Hetzner docs →

Project Members

→ Rumble: Team roles

high4 diffs›
  • •Console/email invite-based with fixed roles (Owner/Admin/Member/Restricted); no Keystone users/roles/groups API.
  • •Owner uniquely billed for project resources regardless of creator vs OpenStack project owners/admins configurable.
  • •Light accounts for externals limited to project (no own projects/products) vs full user accounts with multi-project access.
  • •Admin role manages members/tokens via UI; no API for users/roles; migrating user must re-invite via console.
View Hetzner docs →

Projects (flat, no organization hierarchy above project level)

→ Rumble: Organizations

high4 diffs›
  • •Hetzner has no organization or team hierarchy above the project level. Multiple Hetzner accounts cannot be grouped into an organization; access sharing across projects requires inviting individual accounts to each project separately.
  • •Hetzner API tokens are project-scoped bearer tokens with no cross-project token or service account concept. Keystone application credentials are user-scoped and work across projects when the user has appropriate roles.
  • •Hetzner projects are billing containers invoiced separately even under the same account; there is no consolidated billing across projects. OpenStack has no native billing hierarchy.
  • •Hetzner projects have no RBAC beyond owner vs. member; members cannot be restricted to specific resource types. OpenStack Keystone roles (admin, member, reader) provide granular per-project access control.
View Hetzner docs →

Billing· 3 mappings

Hetzner Cloud hourly/monthly pricing with monthly cap

→ Rumble: Pricing

high4 diffs›
  • •Hetzner bills servers per hour with a monthly cap; if a server is deleted before month end, only the hourly rate applies. Servers are billed even when powered off because resources remain allocated. Quake AI's billing model is operator-defined.
  • •Hetzner pricing is embedded in the server type API response (GET /v1/server_types): each type includes a prices array with hourly and monthly (net/gross) for each location. This makes Hetzner pricing programmatically discoverable, unlike AWS/Azure/GCP which require separate pricing APIs.
  • •Hetzner includes a traffic allowance per server (e.g. 20 TB/month for CX21); overage is billed per 100MB block rounded up. Quake AI's bandwidth pricing is operator-defined.
  • •Hetzner snapshots are billed per GB of compressed snapshot storage per month; backups are billed at 20% of the server price for up to 7 automated backup slots.
View Hetzner docs →

N/A (No subscription model — pay-as-you-go with monthly invoices per project)

→ Rumble: Subscriptions

high4 diffs›
  • •Hetzner has no subscription or commitment model; all billing is usage-based with monthly invoices. There are no reserved instance discounts or committed use discounts. Quake AI's pricing model is operator-defined.
  • •Hetzner invoices are generated per project at the end of each month; multiple projects are invoiced separately even under the same Hetzner account. There is no consolidated invoice across projects.
  • •Hetzner has no free tier or trial credits for new accounts (unlike AWS, GCP, Azure which offer free tiers). Resource usage begins billing immediately on provisioning.
  • •Hetzner invoices include VAT for private customers in Germany (19%); business customers in EU can provide a VAT ID. Quake AI's tax handling is operator-defined.
View Hetzner docs →

Project Billing

→ Rumble: Billing

high4 diffs›
  • •Hourly pro-rated with monthly cap, invoiced monthly post-usage to project Owner vs real-time OpenStack usage data via Ceilometer/gnocchi.
  • •No billing API endpoints; view invoices in console vs queryable meters/resources via APIs.
  • •Owner always billed for all project resources irrespective of member actions vs flexible billing/project assignment in OpenStack.
  • •Traffic overage in 100MB blocks with notifications to owner.
View Hetzner docs →

Platform· 1 mapping

Hetzner API Changelog

→ Rumble: API versioning

›

No specific divergences documented yet.

View Hetzner docs →

Tools· 1 mapping

Cloud API

→ Rumble: API

high4 diffs›
  • •Proprietary REST API over HTTPS with Bearer token auth, not OpenStack Identity API (keystone) endpoints or mechanisms.
  • •Base URL https://api.hetzner.cloud/v1/ with resource-specific endpoints (e.g., /servers) vs OpenStack service endpoints (nova, cinder).
  • •No multi-project handling in single auth; separate per-project tokens vs keystone scopes/projects.
  • •Missing identity/catalog endpoints; no service discovery via API.
View Hetzner docs →

Self-managed services and deployment patterns#

Hetzner serviceStatus on Quake AIAlternative
Managed DatabaseNot availableSelf-managed on VMs with automation templates
DNS (Hetzner DNS)Not availableExternal DNS provider (Cloudflare or similar)

Next steps#

Usage Guidelines

The sample code, software libraries, command line tools, proofs of concept, templates, and other related technology on this page (including any of the foregoing that is provided by Quake AI personnel) is provided to you as Quake AI Content under the Quake AI Customer Agreement, or the relevant written agreement between you and Quake AI (whichever applies). Do not use this Quake AI Content in your production accounts, or on production or other critical data. You are responsible for testing, securing, and optimizing the Quake AI Content (such as sample code) as appropriate for production grade use based on your specific quality control practices and standards. Deploying Quake AI Content may incur Quake AI charges for creating or using Quake AI chargeable resources, such as running Compute instances or storing data in Object Storage. Your use is also subject to the Acceptable Use Policy.

Comparisons to third-party providers in this material reflect publicly documented behavior as of the validation date below. Pricing, quotas, service limits, and feature availability change frequently on every cloud. Verify provider-specific claims against the provider's own current documentation before relying on them for a procurement, architecture, or migration decision.

For the full policy, see Usage Guidelines.

Last validated: 22.06.2026

Was this page helpful?