The deployment of the Hetzner Cloud Cloud Controller Manager with Networks support is quite different to the normal one. If you would like to use the version without using our Networks feature, you can follow the Steps at "Basic deployment".
We assume, that you have knowledge about Kubernetes and the Hetzner Cloud.
- Create a new Network via
hcloud-cli
(hcloud network create --name my-network --ip-range=10.0.0.0/8
)or the Hetzner Cloud Console - Add each Node of the Cluster to the Hetzner Cloud Network
- Download the latest deployment file with networks support from Github to your local machine
- Change the
--cluster-cidr=
flag in the deployment file to fit your pod range. Default is10.244.0.0/16
. - Create a new secret containing a Hetzner Cloud API Token and the name or the ID of the Network you want to use
kubectl -n kube-system create secret generic hcloud --from-literal=token=<hcloud API token> --from-literal=network=<hcloud Network_ID_or_Name>
- Deploy the deployment file
kubectl -n kube-system apply -f path/to/your/deployment.yaml
- (Recommended) Deploy a CNI (like Cilium
kubectl create -f https://raw.githubusercontent.com/cilium/cilium/v1.5/examples/kubernetes/<kubernetes-version>/cilium.yaml
- please replace<kubernetes-version>
with your version like1.15
)
When deploying Cilium, make sure that you have set tunnel: disabled
and nativeRoutingCIDR
to your clusters subnet CIDR. If you are using Cilium < 1.9.0 you also have to set blacklist-conflicting-routes: false
.
After this, you should be able to see the correct routes in the Hetzner Cloud Console or via hcloud-cli
(hcloud network describe <hcloud Network_ID_or_Name>
).
The cluster-cidr
Range must be within the Hetzner Cloud Network Range, but must not overlap with any created subnets. By default, Kubernetes assigns a /24
(254 addresses) per Node. Changing the range later on is possible, but requires some work. You should assign a range that is large enough to fit enough nodes. For example, if you plan to use a cluster with 10 nodes, you need to assign at least a /20
(16 x /24
) to the cluster-cidr
flag.
The service-cidr
Range can be within the Hetzner Cloud Network Range, as long as it does not overlap with any other Subnets.
Some example values:
- Hetzner Cloud Network Range:
10.0.0.0/16
- Subnet for Cloud Servers & Load Balancers:
10.0.1.0/24
(254 Servers & LBs, API maximum is 100 members) - Subnet for Robot vSwitch:
10.0.2.0/24
(254 Servers, API maximum is 100 members) - Cluster CIDR:
10.0.16.0/20
(up to 16 Nodes)- Kubernetes will assign a
/24
to every node:- Node 1:
10.0.16.0/24
, Node 2:10.0.17.0/24
, ...
- Node 1:
- Kubernetes will assign a
- Service CIDR:
10.0.8.0/21
(up to 2046ClusterIP
services)
Some further restrictions and considerations are explained in the Hetzner Cloud Docs:
Error Message:
Could not create route xy-xy-xy-xy-xy 10.244.0.0/24 for node xy.example.com after 1s: hcloud/CreateRoute: network route destination overlaps with another subnetwork or network route (invalid_input)
Solution: Make sure the cluster-cidr does not overlap with any subnet created in the Hetzner Cloud Network. Check Considerations on the IP Ranges for more information.