Skip to main content

Load balance to bare-metal nodes

Inspect 1.36

A Hetzner load balancer serves bare-metal (Robot) nodes exactly like Cloud nodes. The CCM handles both natively, so there is nothing extra to do for bare metal. Point a type: LoadBalancer Service at a pool that includes Robot servers and it works. The rest of this page explains how the CCM adds each kind and how the standard settings behave, so a mixed pool is easy to reason about.

Server targets and IP targets

The CCM adds the two machine kinds as different target types:

  • Hetzner Cloud nodes join as server targets. The CCM references the cloud server by its ID, and Hetzner tracks it.
  • Bare-metal (Robot) nodes join as IP targets. The CCM adds the Robot server by its public IPv4 address.

Both back the same type: LoadBalancer Service, so a mixed pool of Cloud and Robot nodes works, and the load balancer spreads traffic across both.

Bare-metal targets stay IPv4

By default the platform pins bare-metal targets to IPv4, with HCLOUD_LOAD_BALANCERS_ROBOT_TARGET_ADDRESS_FAMILY=ipv4 on the CCM. This is the same reason the rest of the cluster runs IPv4: nodes have no usable IPv6, so an IPv6 target would never pass its health check and would remain permanently unhealthy. On an IPv4-only cluster the default is the correct setting, and you leave it unchanged.

You can set the family per Service with the robot-target-address-family annotation:

yaml
		metadata:
  annotations:
    load-balancer.hetzner.cloud/robot-target-address-family: ipv4
	

Traffic policies on bare-metal servers

Service traffic policies behave identically on bare-metal and cloud nodes. For deep dives on how externalTrafficPolicy impacts packet hops and source IP preservation, see .

When configuring externalTrafficPolicy: Local on bare-metal nodes:

  • Schedule pods on all target servers: The load balancer will only route traffic to bare-metal servers running a ready replica. Ensure your pods are evenly distributed (or deployed via a DaemonSet) so physical servers do not sit idle.
  • Tune health checks: See to ensure fast target pool ejection during maintenance.

For why you would run bare metal at all, and how to add it, see and .