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, nil

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check what is already listening on the address (e.g. ss -ltnp) and free the port
  2. Configure the readiness probe to use a different, unused port
  3. 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.