Skip to content

cluster create: registry unreachable from host with --serving=false #3980

Description

@gauron99

Context

PR #3856 migrated the dev cluster registry from a host-side container (localhost:50000) to an in-cluster Kubernetes deployment accessed via a Contour Ingress at registry.localtest.me.

Problem

The registry Ingress uses ingressClassName: contour-external, but Contour is only installed when --serving=true (the default). With --serving=false, no Ingress controller exists, so the host cannot reach the registry.

Before #3856: The registry was a host-side container on localhost:50000 — always reachable regardless of --serving.

After #3856: Host registry access requires Contour → requires --serving=true.

The help text (cmd/cluster.go:109-110) documents --serving=false --eventing=false as a valid "minimal cluster (just Kubernetes + registry)" use case, implying the registry should be functional.

Empirical test results (from func cluster create --serving=false --eventing=false):

  • Registry deployment: 1/1 Available inside the cluster ✅
  • Ingress object: exists but has no ADDRESS (no controller to reconcile it) ❌
  • contour-external namespace: does not exist ❌
  • curl http://registry.localtest.me/v2/: Connection reset by peer
  • In-cluster containerd mirrors via hostPort:5000: work fine ✅

Note: hack/cluster.sh doesn't have this problem because it always installs serving + Contour unconditionally.

Suggested fixes (pick one)

  • (a) Document it — note that --serving=false means no host push, only in-cluster access
  • (b) Always install Contour — decouple Contour installation from --serving so the registry Ingress always has a controller
  • (c) Fallback port mapping — add a Kind extraPortMappings entry that maps a host port to the registry's hostPort:5000, bypassing Ingress entirely

/kind bug

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions