NetworkPolicy silently drops the traffic, the client uses the wrong address or port, or a Node-level routing problem breaks the path. Start with the error string: connection refused points at the Service and its Endpoints, while connection timed out points at a NetworkPolicy or a wrong target. CKS uses Cilium as its container network interface (CNI), and Cilium replaces kube-proxy for in-cluster Service load balancing. You configure Services, Endpoints, and NetworkPolicy. CoreWeave manages the underlying data plane.
What you see
Most pod-to-service failures surface as one of four errors when a client Pod attempts to connect to a Service. The error string indicates which layer to check first.
The most useful single discriminator:
connection refused means a reachable host said no, while connection timed out means the packets vanished. Refused points at the Service and its backends. Timed out points at a NetworkPolicy or a wrong target.
First three checks
Run these read-only checks in order. They resolve most pod-to-service tickets.1. Confirm the client Pod has an IP and is Running
Replace[POD-NAME] and [NAMESPACE] with the client Pod and its namespace, and [SERVICE-NAME] with the target Service, throughout this page:
Pending or ContainerCreating, hasn’t joined the network yet. Resolve the scheduling or startup problem before testing connectivity.
2. Confirm the target Service has Endpoints
An emptyEndpoints list is the single most common cause of connection refused. When a ClusterIP Service has no Ready backend Pods, the CKS data plane issues a REJECT, which surfaces to the client as connection refused, not a timeout.
<none> or an empty endpoints set, check two things:
- Are the backend Pods Ready? A failing readiness probe removes a Pod from
Endpoints. Runkubectl get pods -n [NAMESPACE] -l [SELECTOR]and confirm theREADYcolumn shows all containers ready. - Does the Service selector match the Pod labels? A typo in
spec.selectorproduces a Service with zero Endpoints. Comparekubectl get svc [SERVICE-NAME] -n [NAMESPACE] -o jsonpath='{.spec.selector}'against the Pod labels.
3. Check for a NetworkPolicy in the namespace
Aconnection timed out between Pods that should be allowed to communicate usually means a NetworkPolicy (or CiliumNetworkPolicy) drops the traffic.
100.124.0.0/18 (Kubernetes API and platform services) and DNS egress to node-local-dns rather than kube-dns. Both are common causes of a connection timed out to a Service that should be reachable. For the exact rules and a full default-deny example, see Cilium network policy on CKS and Deploy network policies.
It works in-cluster but not externally
If acurl from inside the cluster succeeds but an external client fails, the problem isn’t your Service or its backends. Use this discriminator, replacing [SERVICE-IP] and [PORT] with the Service’s ClusterIP and port:
curl http://[LOADBALANCER-IP]:[PORT] from your laptop, replacing [LOADBALANCER-IP] with the Service’s external IP.
A
LoadBalancer Service receives an internet-facing IP only when you request public addressing. Without it, the Service receives a private address reachable only from inside the cluster or a connected VPC. See Choose public or private addressing and Get a publicly routable IP for your LoadBalancer Service.
What this is not
Consider the following points:- If your client connects successfully to a Service IP but fails on its name, check DNS resolution from the Pod. If the name resolves to the expected IP but the connection still fails, continue troubleshooting Service connectivity.
connection refusedisn’t a firewall block. Firewalls andNetworkPolicydrops produce timeouts, not refusals. A refusal means a reachable host rejected the connection, most often an emptyEndpointsset.- You don’t need to inspect or tune the CNI data plane. See What CoreWeave manages.
When to open a ticket
Open a support ticket in any of these situations:- An in-cluster
curlto the Service IP works but the external client still can’t reach a publicLoadBalancerIP after you confirmed thepublicannotation. - You see intermittent
connection refusedto an internalLoadBalancervirtual IP that you can’t tie to an emptyEndpointsset. - Connectivity fails with
no route to hostfor traffic that has noNetworkPolicyin the path.