Drop redundant dynamic cluster mode
ci/woodpecker/pr/build Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful

The dynamic mode produced a byte-identical cluster to authoritative:
RFC2136 update capability is a per-zone property (BindZone.dynamicUpdate
+ updateKeyRef render allow-update { key ... }), not a cluster role. The
external-dns tier is just an authoritative cluster whose zones allow
dynamic updates.

- remove BindMode dynamic from the enum and constants
- switch the external-dns sample to mode authoritative
- update README migration mapping
This commit is contained in:
2026-07-03 18:32:09 +10:00
parent 4092a25f4f
commit e60080efa2
4 changed files with 12 additions and 13 deletions
+2 -2
View File
@@ -38,7 +38,7 @@ script picks one based on the pod ordinal.
| Kind | Purpose | | Kind | Purpose |
|------|---------| |------|---------|
| `BindCluster` | A set of BIND9 servers. `spec.mode`: `authoritative`, `resolver`, or `dynamic`. | | `BindCluster` | A set of BIND9 servers. `spec.mode`: `authoritative` or `resolver`. |
| `BindZone` | A forward/reverse zone (`primary`/`secondary`/`forward`/`stub`), records inline, optional dynamic-update + DNSSEC + catalog membership. | | `BindZone` | A forward/reverse zone (`primary`/`secondary`/`forward`/`stub`), records inline, optional dynamic-update + DNSSEC + catalog membership. |
| `DNSRecord` | A single record set applied via TSIG `nsupdate` — external-dns as a CRD. | | `DNSRecord` | A single record set applied via TSIG `nsupdate` — external-dns as a CRD. |
| `BindView` | A split-horizon view (`match-clients`, ordering, per-view recursion). | | `BindView` | A split-horizon view (`match-clients`, ordering, per-view recursion). |
@@ -58,7 +58,7 @@ The three Puppet-managed BIND roles map onto three `BindCluster`s:
|-------------|---------------|------| |-------------|---------------|------|
| 3× authoritative masters | `auth` | `authoritative` (pod-0 primary, 2 secondaries) | | 3× authoritative masters | `auth` | `authoritative` (pod-0 primary, 2 secondaries) |
| 3× only-resolvers | `resolver` | `resolver` (3 identical recursive servers) | | 3× only-resolvers | `resolver` | `resolver` (3 identical recursive servers) |
| 3× external-dns | `externaldns` | `dynamic` (RFC2136 TSIG updates on primary) | | 3× external-dns | `externaldns` | `authoritative` (zones set `dynamicUpdate` for RFC2136 TSIG updates) |
## Development ## Development
+6 -7
View File
@@ -7,20 +7,19 @@ import (
// BindMode selects the behaviour of a BindCluster and maps onto a classic // BindMode selects the behaviour of a BindCluster and maps onto a classic
// BIND deployment role. // BIND deployment role.
// - authoritative: serves signed/unsigned authoritative zones. Ordinal-0 is // - authoritative: serves authoritative zones. Ordinal-0 is the primary that
// the primary that holds zone data; the remaining pods are secondaries that // holds zone data; the remaining pods are secondaries that replicate via
// replicate via AXFR/IXFR + NOTIFY (optionally driven by a catalog zone). // AXFR/IXFR + NOTIFY (optionally driven by a catalog zone). Zones that set
// spec.dynamicUpdate accept RFC2136 TSIG updates (the external-dns pattern),
// so no separate mode is needed for external-dns servers.
// - resolver: N identical recursive resolvers, no zone replication. // - resolver: N identical recursive resolvers, no zone replication.
// - dynamic: like authoritative, but the primary accepts RFC2136 TSIG updates
// (the external-dns pattern); secondaries replicate the result.
// //
// +kubebuilder:validation:Enum=authoritative;resolver;dynamic // +kubebuilder:validation:Enum=authoritative;resolver
type BindMode string type BindMode string
const ( const (
ModeAuthoritative BindMode = "authoritative" ModeAuthoritative BindMode = "authoritative"
ModeResolver BindMode = "resolver" ModeResolver BindMode = "resolver"
ModeDynamic BindMode = "dynamic"
) )
// ClusterServiceSpec controls how the cluster is exposed to clients. // ClusterServiceSpec controls how the cluster is exposed to clients.
@@ -1007,7 +1007,6 @@ spec:
enum: enum:
- authoritative - authoritative
- resolver - resolver
- dynamic
type: string type: string
nodeSelector: nodeSelector:
additionalProperties: additionalProperties:
+4 -3
View File
@@ -1,13 +1,14 @@
--- ---
# external-dns role (replaces 3x Puppet external-dns servers). The primary # external-dns role (replaces 3x Puppet external-dns servers). This is an
# accepts RFC2136 TSIG updates from external-dns; secondaries replicate. # ordinary authoritative cluster; external-dns writes to the zone below via
# RFC2136 because the zone sets dynamicUpdate (allow-update { key ... }).
apiVersion: bind.unkin.net/v1alpha1 apiVersion: bind.unkin.net/v1alpha1
kind: BindCluster kind: BindCluster
metadata: metadata:
name: externaldns name: externaldns
namespace: bind-externaldns namespace: bind-externaldns
spec: spec:
mode: dynamic mode: authoritative
replicas: 3 replicas: 3
service: service:
type: LoadBalancer type: LoadBalancer