kubectl cannot reach the API server. Either your kubeconfig points at the wrong place, or the control plane is actually down.
kubecfg points at an old cluster endpoint or an IP that changed (common after node replacement).
The API server pods are down, or the load balancer in front of them has no healthy backends.
VPN dropped, security group closed 6443 to your IP range.
kubectl config current-context && kubectl cluster-info
kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}'
curl -k --max-time 5 https://<endpoint>:6443/healthz
# e.g. for kops: kops export kubecfg --name cluster.example.com
If a plain curl to /healthz fails but the node itself is up, the problem is in front of the API server — LB or firewall — not in kubectl.
Nothing is listening at the address you're hitting: control plane down, wrong API endpoint in kubeconfig, or a firewall/security group blocking. Test the endpoint directly: nc -zv <api-host> 6443 distinguishes refused (not listening) from timeout (blocked).
Common shifts: kubeconfig regenerated with a new endpoint, the control plane node restarted with a new IP, or a certificate expired and the API server is failing to start. kubectl config view + the cluster's control-plane logs resolve it in minutes.
Kustomize base with probes, PDBs, and zero-downtime rollouts already wired.
Kubernetes Production Blueprints — $27 →One-time. Yours to modify. Instant download from the NinjaOps template store.