Troubleshooting Rancher
Audience: operator · Profile:
demo· Read this when: Rancher will not come up, a cluster will not import, or its Web Jump will not connect.
Part of Rancher Kubernetes Management.
Kubernetes (Rancher) tab is missing — enable Kubernetes under Settings → Integrations. The flag applies immediately.
"Rancher node isn't configured" card — the node's cloud has no credentials, or no Rancher bootstrap password is set. Add both under Settings.
Deploy fails: "cannot be placed in \<region>: … is not set for that region" — the chosen region has no configured subnet (and, on AWS, no VPC). That is deliberate: falling back would put the node in the default region's network while the form, the job and the row all said otherwise. Run that cloud's sandbox setup for the region, or add a per-region config under Settings → Multi-region.
Deploy job fails with a permission error — the node's cloud is missing a
permission. GCP: compute.instances.create or compute.firewalls.* — re-run
setup-gcp.sh or grant roles/compute.admin. AWS: EC2 run/terminate or
security-group authorize/revoke — re-run setup-aws.sh to refresh
dashboard-app-policy. Azure: Contributor on the resource group — re-run
setup-azure.sh.
Azure: deploy fails at 30% with "(InvalidRequestContent) … Could not find member
'hardware_profile' on object of type 'ResourceDefinition'" — Azure rejected the VM
create request itself, so nothing was provisioned (no VM, no cost) and the job has no
output. It is a dashboard-side bug, not a permission, quota or region problem: the
azure-mgmt-compute SDK ≥ 38 sends a raw request body straight through to Azure
instead of translating it to the REST shape. Fixed in this version — the Azure node
launcher builds the request from SDK model objects — so rebuild/redeploy the
dashboard image and deploy again. The same request kills the Portainer node deploy,
since both land in the same launcher.
Node is RUNNING but the URL won't load — the node is closed. Set
rancher_allowed_source_cidrs to include your IP (it fails closed by design) and
redeploy to patch the rule. Check what is actually allowed with
GET /api/containers/rancher/firewall, or the read-only allow-list on
Settings → Kubernetes.
Deploy job fails waiting for Rancher — two common causes, and the error names
both. (1) The node is up but the dashboard's egress IP isn't in the firewall —
the dashboard talks to the node over its public IP, so its own egress must be
allowed. Auto-detection usually handles this; if it's blocked (e.g. a TLS-inspecting
proxy), set rancher_dashboard_egress_cidr and redeploy. Compare the node's firewall
sourceRanges (or GET /api/containers/rancher/firewall) against the dashboard host's
public egress IP. (2) Rancher hasn't come up yet — it needs 1–3 minutes (longer on
a cold image pull / slow disk); raise rancher_ready_timeout_s and check the VM's
serial console / the container's logs in GCP (google-logging-enabled is on).
Deploy job fails immediately: "firewall is closed" — no source CIDRs were set
and the dashboard couldn't auto-detect its own egress IP, so opening the firewall
would leave the node unreachable. Set rancher_dashboard_egress_cidr or
rancher_allowed_source_cidrs (or enable Allow open) and redeploy.
"Rancher IS up … but the HTTPS handshake is being terminated in transit" —
this network TLS-inspects and rejects the node's self-signed cert at the proxy
(plain-HTTP /ping answered, so the node itself is fine). Set
rancher_api_transport=runner and redeploy, or add a proxy Do Not Inspect
exception for the node — see Corp TLS inspection.
Deploy sits at 85% "Completing Rancher first-run" for a long time — on
rancher_api_transport=runner this stage is four sequential API calls, and each
one is a whole container cold start. Usually ~60 s apiece, but not bounded by that:
one was measured at 15 m 12 s on Azure ACI (2026-09-21) while the other three
took ~60 s. The launcher's own ceiling is ~20 minutes per call, so up to ~80 minutes
in this stage is slow, not hung. The progress message names the step currently
running (1/4: changing the admin password … 4/4: clearing the first-login
prompt), and the worker log brackets each call with
Rancher API (runner): <METHOD> <path> lines carrying its elapsed time. If a call
does hit the ceiling the stage still finishes — first-run is best-effort by
contract, so the deploy completes and the job note says what was skipped; you finish
that wizard step by hand once. On direct transport this stage takes seconds.
Readiness flip-flops / works one minute, times out the next — a corp proxy
pool (e.g. Cloudflare WARP) egresses from multiple IPs while the firewall pins one
/32. Set the pool's CIDR in rancher_dashboard_egress_cidr (e.g.
104.28.182.0/24); detection keeps a containing CIDR intact.
Machine type rejected — GCE types under 4 GB (e2-micro, e2-small, …) are
refused outright; use e2-medium or larger. On AWS and Azure the API accepts a small
size and Rancher then OOMs instead, which looks like a readiness timeout — use at
least t3.medium or Standard_B2s.
Azure: the node is RUNNING but nothing answers — an Azure VM with a Standard
public IP and no NSG rule denies every inbound packet, so this looks identical to a
closed allow-list. Confirm the node's NSG (<node>-allow-mgmt) exists and carries an
allow-mgmt inbound rule; a deploy whose ingress step failed leaves the VM up and
unreachable.
AWS: the VPC won't delete after a teardown — the node's security group is
unreferenced but still present, and an orphaned group blocks a VPC delete with an
opaque DependencyViolation. Teardown reclaims it once the instance releases its
ENI, and the sandbox rollback sweeps any *-allow-mgmt group it finds; delete it by
hand if both were interrupted.
Imported cluster stays "Pending" in Rancher — the cattle-cluster-agent
can't reach the node. Confirm the downstream cluster has egress to the node's
public URL and that the node's firewall allows the cluster's egress IP.
Everything broke after a stop/recreate — expected for the ephemeral node: the IP changed and state was wiped. Redeploy, then re-import the clusters. See Ephemeral node.