Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

API Reference

This document describes the Custom Resource Definitions (CRDs) provided by Bindy.

Note: This file is AUTO-GENERATED from src/crd.rs DO NOT EDIT MANUALLY - Run cargo run --bin crddoc to regenerate

Table of Contents

Zone Management

DNSZone

API Version: bindy.firestoned.io/v1alpha1

DNSZone represents an authoritative DNS zone managed by BIND9. Each DNSZone defines a zone (e.g., example.com) with SOA record parameters. Can reference either a namespace-scoped Bind9Cluster or cluster-scoped Bind9GlobalCluster.

Spec Fields

FieldTypeRequiredDescription
clusterRefstringNoReference to a namespace-scoped `Bind9Cluster` in the same namespace. Must match the name of a `Bind9Cluster` resource in the same namespace. The zone will be added to all instances in this cluster. Either `clusterRef` or `globalClusterRef` must be specified (not both).
globalClusterRefstringNoReference to a cluster-scoped `Bind9GlobalCluster`. Must match the name of a `Bind9GlobalCluster` resource (cluster-scoped). The zone will be added to all instances in this global cluster. Either `clusterRef` or `globalClusterRef` must be specified (not both).
nameServerIpsobjectNoMap of nameserver hostnames to IP addresses for glue records. Glue records provide IP addresses for nameservers within the zone’s own domain. This is necessary when delegating subdomains where the nameserver is within the delegated zone itself. Example: When delegating `sub.example.com` with nameserver `ns1.sub.example.com`, you must provide the IP address of `ns1.sub.example.com` as a glue record. Format: `{“ns1.example.com.”: “192.0.2.1”, “ns2.example.com.”: “192.0.2.2”}` Note: Nameserver hostnames should end with a dot (.) for FQDN.
soaRecordobjectYesSOA (Start of Authority) record - defines zone authority and refresh parameters. The SOA record is required for all authoritative zones and contains timing information for zone transfers and caching.
ttlintegerNoDefault TTL (Time To Live) for records in this zone, in seconds. If not specified, individual records must specify their own TTL. Typical values: 300-86400 (5 minutes to 1 day).
zoneNamestringYesDNS zone name (e.g., “example.com”). Must be a valid DNS zone name. Can be a domain or subdomain. Examples: “example.com”, “internal.example.com”, “10.in-addr.arpa”

Status Fields

FieldTypeRequiredDescription
conditionsarrayNo
observedGenerationintegerNo
recordCountintegerNo
secondaryIpsarrayNoIP addresses of secondary servers configured for zone transfers. Used to detect when secondary IPs change and zones need updating.

DNS Records

ARecord

API Version: bindy.firestoned.io/v1alpha1

ARecord maps a DNS hostname to an IPv4 address. Multiple A records for the same name enable round-robin DNS load balancing.

Spec Fields

FieldTypeRequiredDescription
ipv4AddressstringYesIPv4 address in dotted-decimal notation. Must be a valid IPv4 address (e.g., “192.0.2.1”).
namestringYesRecord name within the zone. Use “@” for the zone apex. Examples: “www”, “mail”, “ftp”, “@” The full DNS name will be: {name}.{zone}
ttlintegerNoTime To Live in seconds. Overrides zone default TTL if specified. Typical values: 60-86400 (1 minute to 1 day).
zoneRefstringYesReference to a `DNSZone` resource by metadata.name. Directly references a `DNSZone` resource in the same namespace by its Kubernetes resource name. This is more efficient than searching by zone name. Example: If the `DNSZone` is named “example-com”, use `zoneRef: example-com`

Status Fields

FieldTypeRequiredDescription
conditionsarrayNo
observedGenerationintegerNo

AAAARecord

API Version: bindy.firestoned.io/v1alpha1

AAAARecord maps a DNS hostname to an IPv6 address. This is the IPv6 equivalent of an A record.

Spec Fields

FieldTypeRequiredDescription
ipv6AddressstringYesIPv6 address in standard notation. Examples: `2001:db8::1`, `fe80::1`, `::1`
namestringYesRecord name within the zone.
ttlintegerNoTime To Live in seconds.
zoneRefstringYesReference to a `DNSZone` resource by metadata.name. Directly references a `DNSZone` resource in the same namespace by its Kubernetes resource name.

Status Fields

FieldTypeRequiredDescription
conditionsarrayNo
observedGenerationintegerNo

CNAMERecord

API Version: bindy.firestoned.io/v1alpha1

CNAMERecord creates a DNS alias from one hostname to another. A CNAME cannot coexist with other record types for the same name.

Spec Fields

FieldTypeRequiredDescription
namestringYesRecord name within the zone. Note: CNAME records cannot be created at the zone apex (@).
targetstringYesTarget hostname (canonical name). Should be a fully qualified domain name ending with a dot. Example: “example.com.” or “www.example.com.”
ttlintegerNoTime To Live in seconds.
zoneRefstringYesReference to a `DNSZone` resource by metadata.name. Directly references a `DNSZone` resource in the same namespace by its Kubernetes resource name.

Status Fields

FieldTypeRequiredDescription
conditionsarrayNo
observedGenerationintegerNo

MXRecord

API Version: bindy.firestoned.io/v1alpha1

MXRecord specifies mail exchange servers for a domain. Lower priority values indicate higher preference for mail delivery.

Spec Fields

FieldTypeRequiredDescription
mailServerstringYesFully qualified domain name of the mail server. Must end with a dot. Example: “mail.example.com.”
namestringYesRecord name within the zone. Use “@” for the zone apex.
priorityintegerYesPriority (preference) of this mail server. Lower values = higher priority. Common values: 0-100. Multiple MX records can exist with different priorities.
ttlintegerNoTime To Live in seconds.
zoneRefstringYesReference to a `DNSZone` resource by metadata.name. Directly references a `DNSZone` resource in the same namespace by its Kubernetes resource name.

Status Fields

FieldTypeRequiredDescription
conditionsarrayNo
observedGenerationintegerNo

NSRecord

API Version: bindy.firestoned.io/v1alpha1

NSRecord delegates a subdomain to authoritative nameservers. Used for subdomain delegation to different DNS providers or servers.

Spec Fields

FieldTypeRequiredDescription
namestringYesSubdomain to delegate. For zone apex, use “@”.
nameserverstringYesFully qualified domain name of the nameserver. Must end with a dot. Example: “ns1.example.com.”
ttlintegerNoTime To Live in seconds.
zoneRefstringYesReference to a `DNSZone` resource by metadata.name. Directly references a `DNSZone` resource in the same namespace by its Kubernetes resource name.

Status Fields

FieldTypeRequiredDescription
conditionsarrayNo
observedGenerationintegerNo

TXTRecord

API Version: bindy.firestoned.io/v1alpha1

TXTRecord stores arbitrary text data in DNS. Commonly used for SPF, DKIM, DMARC policies, and domain verification.

Spec Fields

FieldTypeRequiredDescription
namestringYesRecord name within the zone.
textarrayYesArray of text strings. Each string can be up to 255 characters. Multiple strings are concatenated by DNS resolvers. For long text, split into multiple strings.
ttlintegerNoTime To Live in seconds.
zoneRefstringYesReference to a `DNSZone` resource by metadata.name. Directly references a `DNSZone` resource in the same namespace by its Kubernetes resource name.

Status Fields

FieldTypeRequiredDescription
conditionsarrayNo
observedGenerationintegerNo

SRVRecord

API Version: bindy.firestoned.io/v1alpha1

SRVRecord specifies the hostname and port of servers for specific services. The record name follows the format _service._proto (e.g., _ldap._tcp).

Spec Fields

FieldTypeRequiredDescription
namestringYesService and protocol in the format: _service._proto Example: “_ldap._tcp”, “_sip._udp”, “_http._tcp”
portintegerYesTCP or UDP port where the service is available.
priorityintegerYesPriority of the target host. Lower values = higher priority.
targetstringYesFully qualified domain name of the target host. Must end with a dot. Use “.” for “service not available”.
ttlintegerNoTime To Live in seconds.
weightintegerYesRelative weight for records with the same priority. Higher values = higher probability of selection.
zoneRefstringYesReference to a `DNSZone` resource by metadata.name. Directly references a `DNSZone` resource in the same namespace by its Kubernetes resource name.

Status Fields

FieldTypeRequiredDescription
conditionsarrayNo
observedGenerationintegerNo

CAARecord

API Version: bindy.firestoned.io/v1alpha1

CAARecord specifies which certificate authorities are authorized to issue certificates for a domain. Enhances domain security and certificate issuance control.

Spec Fields

FieldTypeRequiredDescription
flagsintegerYesFlags byte. Use 0 for non-critical, 128 for critical. Critical flag (128) means CAs must understand the tag.
namestringYesRecord name within the zone. Use “@” for the zone apex.
tagstringYesProperty tag. Common values: “issue”, “issuewild”, “iodef”. - “issue”: Authorize CA to issue certificates - “issuewild”: Authorize CA to issue wildcard certificates - “iodef”: URL/email for violation reports
ttlintegerNoTime To Live in seconds.
valuestringYesProperty value. Format depends on the tag. For “issue”/“issuewild”: CA domain (e.g., “letsencrypt.org”) For “iodef”: mailto: or https: URL
zoneRefstringYesReference to a `DNSZone` resource by metadata.name. Directly references a `DNSZone` resource in the same namespace by its Kubernetes resource name.

Status Fields

FieldTypeRequiredDescription
conditionsarrayNo
observedGenerationintegerNo

Infrastructure

Bind9Cluster

API Version: bindy.firestoned.io/v1alpha1

Bind9Cluster defines a namespace-scoped logical grouping of BIND9 DNS server instances. Use this for tenant-managed DNS infrastructure isolated to a specific namespace. For platform-managed cluster-wide DNS, use Bind9GlobalCluster instead.

Spec Fields

FieldTypeRequiredDescription
aclsobjectNoACLs that can be referenced by instances
configMapRefsobjectNo`ConfigMap` references for BIND9 configuration files
globalobjectNoGlobal configuration shared by all instances in the cluster This configuration applies to all instances (both primary and secondary) unless overridden at the instance level or by role-specific configuration.
imageobjectNoContainer image configuration
primaryobjectNoPrimary instance configuration Configuration specific to primary (authoritative) DNS instances, including replica count and service specifications.
rndcSecretRefsarrayNoReferences to Kubernetes Secrets containing RNDC/TSIG keys for authenticated zone transfers. Each secret should contain the key name, algorithm, and base64-encoded secret value. These secrets are used for secure communication with BIND9 instances via RNDC and for authenticated zone transfers (AXFR/IXFR) between primary and secondary servers.
secondaryobjectNoSecondary instance configuration Configuration specific to secondary (replica) DNS instances, including replica count and service specifications.
versionstringNoShared BIND9 version for the cluster
volumeMountsarrayNoVolume mounts that specify where volumes should be mounted in containers These mounts are inherited by all instances unless overridden.
volumesarrayNoVolumes that can be mounted by instances in this cluster These volumes are inherited by all instances unless overridden. Common use cases include `PersistentVolumeClaims` for zone data storage.

Status Fields

FieldTypeRequiredDescription
conditionsarrayNoStatus conditions for this cluster
instanceCountintegerNoNumber of instances in this cluster
instancesarrayNoNames of `Bind9Instance` resources created for this cluster
observedGenerationintegerNoObserved generation for optimistic concurrency
readyInstancesintegerNoNumber of ready instances

Bind9Instance

API Version: bindy.firestoned.io/v1alpha1

Bind9Instance represents a BIND9 DNS server deployment in Kubernetes. Each instance creates a Deployment, Service, ConfigMap, and Secret for managing a BIND9 server with RNDC protocol communication.

Spec Fields

FieldTypeRequiredDescription
bindcarConfigobjectNoBindcar RNDC API sidecar container configuration. The API container provides an HTTP interface for managing zones via rndc. If not specified, uses default configuration.
clusterRefstringYesReference to the cluster this instance belongs to. Can reference either: - A namespace-scoped `Bind9Cluster` (must be in the same namespace as this instance) - A cluster-scoped `Bind9GlobalCluster` (cluster-wide, accessible from any namespace) The cluster provides shared configuration and defines the logical grouping. The controller will automatically detect whether this references a namespace-scoped or cluster-scoped cluster resource.
configobjectNoInstance-specific BIND9 configuration overrides. Overrides cluster-level configuration for this instance only.
configMapRefsobjectNo`ConfigMap` references override. Inherits from cluster if not specified.
imageobjectNoContainer image configuration override. Inherits from cluster if not specified.
primaryServersarrayNoPrimary server addresses for zone transfers (required for secondary instances). List of IP addresses or hostnames of primary servers to transfer zones from. Example: `[“10.0.1.10”, “primary.example.com”]`
replicasintegerNoNumber of pod replicas for high availability. Defaults to 1 if not specified. For production, use 2+ replicas.
rndcSecretRefobjectNoReference to an existing Kubernetes Secret containing RNDC key. If specified, uses this existing Secret instead of auto-generating one. The Secret must contain the keys specified in the reference (defaults: “key-name”, “algorithm”, “secret”, “rndc.key”). This allows sharing RNDC keys across instances or using externally managed secrets. If not specified, a Secret will be auto-generated for this instance.
rolestringYesRole of this instance (primary or secondary). Primary instances are authoritative for zones. Secondary instances replicate zones from primaries via AXFR/IXFR.
storageobjectNoStorage configuration for zone files. Specifies how zone files should be stored. Defaults to emptyDir (ephemeral storage). For persistent storage, use persistentVolumeClaim.
versionstringNoBIND9 version override. Inherits from cluster if not specified. Example: “9.18”, “9.16”
volumeMountsarrayNoVolume mounts override for this instance. Inherits from cluster if not specified. These mounts override cluster-level volume mounts.
volumesarrayNoVolumes override for this instance. Inherits from cluster if not specified. These volumes override cluster-level volumes. Common use cases include instance-specific `PersistentVolumeClaims` for zone data storage.

Status Fields

FieldTypeRequiredDescription
conditionsarrayNo
observedGenerationintegerNo
readyReplicasintegerNo
replicasintegerNo
serviceAddressstringNoIP or hostname of this instance’s service