kubernetes/kops · error
listening on %s: %w
Error message
listening on %s: %w
What it means
serveReadinessOnAddr creates a TCP listener for the readiness /readyz endpoint; this wraps net.Listen failing on the requested address, almost always because the port is already in use or the node lacks permission to bind (privileged port).
Source
Thrown at channels/pkg/cmd/readiness.go:67
}
func serveReadinessOnAddr(ctx context.Context, addr string) (*applyChannelReadiness, error) {
readiness := &applyChannelReadiness{}
mux := http.NewServeMux()
mux.HandleFunc("/readyz", func(w http.ResponseWriter, _ *http.Request) {
if readiness.ready.Load() {
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte("ok\n"))
} else {
w.WriteHeader(http.StatusServiceUnavailable)
_, _ = w.Write([]byte("apply iterations are failing\n"))
}
})
listener, err := net.Listen("tcp", addr)
if err != nil {
return nil, fmt.Errorf("listening on %s: %w", addr, err)
}
readiness.addr = listener.Addr().String()
server := &http.Server{
Handler: mux,
ReadHeaderTimeout: 5 * time.Second,
}
go func() {
<-ctx.Done()
_ = server.Close()
}()
go func() {
if err := server.Serve(listener); err != nil && !errors.Is(err, http.ErrServerClosed) {
klog.Fatalf("kops-channels readiness server stopped: %v", err)
}
}()
return readiness, nilView on GitHub (pinned to 4c8573c808)
Solutions
- Check what is already listening on the address (e.g. ss -ltnp) and free the port
- Configure the readiness probe to use a different, unused port
- If binding a port <1024, run with adequate privileges or choose a higher port
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at channels/pkg/cmd/readiness.go:67 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/dca323d491afd60f.
Report an issue: GitHub.