Skip to content

[Broker/NATS] Follow-ups after Option D (chart-vendored NATS): decisions + deferred work #801

Description

@leecalcote

Tracking issue for the open decisions and deferred work after adopting Option D — the operator now consumes the official NATS Helm chart's vendored manifests (build-time helm templatego:embed → SSA), with token-via-Secret auth and no committed JWT.

Decisions needed from maintainers

  • 1. Default Service type. The chart renders ClusterIP; the overlay currently preserves the historical LoadBalancer default when spec.service.type is unset, to avoid an unflagged behavioral change. Flip the default to ClusterIP (works on every cluster; the plan's recommendation)? If so, Meshery Server must set spec.service.type explicitly for any environment that relied on the LB default, and it needs a release note. (Proposal §7 Q1, plan §8.)
  • 2. Broker CRD longevity. Is the Broker CRD a permanent part of the Meshery API, or is eventual Option C (Meshery-Server-driven Helm install, deprecate the CRD) on the table? Gates how much further to invest in the thin-CR wrapper. (Proposal §7 Q5.)
  • 3. Chart pin & refresh cadence. Chart is pinned to NATS_CHART_VERSION = 2.14.2 in the Makefile; a CI drift gate (.github/workflows/nats-chart-drift.yml) fails if pkg/broker/manifests/nats.gen.yaml drifts from a fresh make nats-manifests. Who owns the periodic bump + drift-gate review, and on what cadence? (Proposal §7 Q6.)
  • 4. Service/release naming. The vendored objects use the fixed chart release name meshery-nats (single-broker-per-namespace assumption). Keep it, or adopt chart-default <release> naming with an alias? (Proposal §7 Q7.)

Deferred work (scoped out of Option D — you chose core pub/sub + token auth)

  • Verify MeshSync↔broker connectivity end-to-end in a full Meshery deployment. The standalone integration-tests only assert "deployment available"; MeshSync (distroless, silent standalone) doesn't reach its NATS-connect path there. The operator provides the correct nats://<token>@host:port URL (independently verified to authenticate + publish via the nats CLI, same nats.go client MeshSync uses), but a real Meshery run should confirm MeshSync authenticates and publishes.
  • TLS via cert-manager for the NATS listeners (chart *.tls values) and for the operator's own metrics endpoint (cert-manager-issued cert instead of the current self-signed SecureServing). The cert-manager API is already on v1.
  • JetStream (chart config.jetstream.enabled + file-store PVC) — only if MeshSync ever needs persistent streaming. Add BrokerSpec.JetStream (additive) when needed.
  • NACK (jetstream.nats.io CRDs: Stream/Consumer/KeyValue) — only as a follow-on to JetStream, to declaratively manage JetStream objects on the running server.
  • NATS Prometheus exporter (promExporter.enabled) for broker metrics, if broker observability is wanted.

Notes

  • Helm stays a build-time-only tool; there is no Helm/NATS runtime dependency in go.mod (WS-6 preserved).
  • Meshery Server contracts are unchanged by Option D: the v1alpha1 CRDs, the typed client, and Broker.Status.Endpoint all behave as before.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions