Skip to content

fix(charts): refuse a mirror with no connectors; kates deploy keeps them - #585

Merged
bmscomp merged 1 commit into
mainfrom
fix/mm2-mirror-without-connectors
Nov 2, 2026
Merged

bmscomp merged 1 commit into
mainfrom
fix/mm2-mirror-without-connectors

Conversation

@bmscomp

@bmscomp bmscomp commented Nov 2, 2026

Copy link
Copy Markdown
Owner

Problem

A mirrors: override that names only the source replaces the chart's default list, connector blocks and source authentication included. Strimzi then reports the KafkaMirrorMaker2 Ready with zero connectors: healthy workers mirroring nothing, and nothing in kubectl get says so.

kates deploy produced exactly this on every non-kind cluster. It sets mirrors[0].source.clusterName / .namespace with --set, which merges into a list from a values file (values-kind.yaml has one) but replaces the chart's default list. values-generic.yaml had no mirrors key. This showed up on a live lab release that had zero connectors and no source credentials.

Changes

  • mirror-maker2.validate refuses a mirror with neither sourceConnector nor checkpointConnector. It runs last in the helper, so the more specific checks still name their own problem first.
  • values-generic.yaml restates the default mirror (RF 3, both connectors, kates-mm2 SCRAM credentials), so the CLI's --set merges into it.
  • New fail_expected case in ci-mirror-maker2.yml.
  • mirror-maker2 0.11.22, kates-platform 0.8.20, book versions appendix.

Verified locally

  • The workflow's lint, overlay-render and fail-case steps all pass, including all 21 rejection cases.
  • The CLI's exact flags over values-generic.yaml render both connectors with source auth. Before this change they hit the new guard.
  • scripts/chart_bumps.py origin/main, scripts/check-versions.sh and helm lint charts/kates-platform --set mirror-maker2.enabled=true all pass.

Not run against a cluster.

Behaviour change: kates deploy on a non-kind cluster now runs a working loopback mirror (krafter into itself, as source.* topics) instead of an idle one.

Helm replaces a list rather than merging it, so a mirrors: override that
names only the source drops the default entry's connector blocks. Strimzi
then reports the KafkaMirrorMaker2 Ready with zero connectors: healthy
workers mirroring nothing. mirror-maker2.validate now refuses a mirror
with neither sourceConnector nor checkpointConnector.

kates deploy hit exactly this on every non-kind cluster: it sets
mirrors[0].source.* with --set, which merges into a list from a values
file but replaced the chart's default list, and values-generic.yaml had
none. It now restates the default mirror, connectors and source
authentication included.

mirror-maker2 0.11.22, kates-platform 0.8.20.
@bmscomp
bmscomp merged commit eee5947 into main Nov 2, 2026
64 checks passed
bmscomp added a commit that referenced this pull request Nov 2, 2026
…tor default

main fixed the connector-less mirror its own way (refused at render time,
values-generic.yaml restates the default mirror). This branch's default
connectors and -f values.yaml would make that refusal dead code, so both
are dropped; the PR keeps only the Kafka egress fix for IPv6.
bmscomp added a commit that referenced this pull request Nov 2, 2026
…latform 0.8.21

main released 0.11.22/0.8.20 with #585, so the egress change needs its own bump.
bmscomp added a commit that referenced this pull request Nov 2, 2026
* fix(mm2): deploy gets working mirrors on every cluster, IPv6 included

On any cluster but kind, `kates deploy` installed MirrorMaker 2 with the
generic overlay, which has no mirrors list, and `--set mirrors[0].source…`
then made Helm replace the chart's default mirror with one holding only a
clusterName and a namespace: no sourceConnector, no checkpointConnector, no
source credentials. Strimzi creates no connector for an absent block and
still reports the KafkaMirrorMaker2 Ready, so nothing was replicated.

- cli: deploy passes the chart's values.yaml as a values file ahead of the
  --set flags, so they merge into the default mirror.
- mirror-maker2 0.11.22: a mirror without a connector block gets the
  connector (tasksMax 1) instead of none. Kafka egress drops ipBlock
  0.0.0.0/0, which matches no IPv6 address, for the Kafka ports at any
  address.
- kates-platform 0.8.20 packs it; the book's version table follows.

Tested on a k3d cluster: both connectors RUNNING and every Helm test of
the release passes.

* ci(mm2): the dropped Kafka egress ipBlock 0.0.0.0/0 is a deliberate render change

0.11.22 admits the Kafka ports at any address, IPv6 included, so the
additivity check reads the old ipBlock as REMOVED. It is a wider rule, not a
narrower one: record it in ALLOWED_LINE_REMOVALS with the reason.

* fix(mm2): the IPv6 egress fix ships as mirror-maker2 0.11.23, kates-platform 0.8.21

main released 0.11.22/0.8.20 with #585, so the egress change needs its own bump.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant