docs/proposal/003-dnsendpoint-graduation-to-beta.md
---
title: "Proposal: Defining a path to Beta for DNSEndpoint API"
version: v1alpha1
authors: @ivankatliarchuk, @raffo, @szuecs
creation-date: 2025-02-09
status: approved
---
The DNSEndpoint API in Kubernetes SIGs external-dns is currently in alpha. To ensure its stability and readiness for production environments, we propose defining and agreeing upon the necessary requirements for its graduation to beta.
By defining clear criteria, we aim to ensure stability, usability, and compatibility with the broader Kubernetes ecosystem. On completions of all this items, we should be in the position to graduate DNSEndpoint to v1beta.
The DNSEndpoint API is a crucial component of the ExternalDNS project, allowing users to manage DNS records dynamically. Currently, it remains in the alpha stage, limiting its adoption due to potential instability and lack of guaranteed backward compatibility. By advancing to beta, we can provide users with a more reliable API and encourage wider adoption with confidence in its long-term viability and support.
DNSEndpoint API to reach beta status.DNSEndpoint a stable (GA) API at this stage.The proposal aims to formalize the promotion process by addressing API design, user needs, and implementation details.
To graduate the DNSEndpoint API to beta, we propose the following actions:
endpoint folder, move away api/crd related stuff to apis/<apiVersion> folderdocs/flags.mdProposed folder structure for apis. Examples - gateway-api
Multiple APIs under same version
├── apis
│ ├── v1alpha
│ │ ├── util/validation
│ │ ├── doc.go
│ │ └── zz_generated.***.go
│ ├── v1beta # outside of scope currently, just an example
│ │ ├── util/validation
│ │ ├── doc.go
│ │ └── zz_generated.***.go
│ ├── v1 # outside of scope currently, just an example
│ │ ├── util/validation
│ │ ├── doc.go
│ │ └── zz_generated.***.go
Or similar folder structure for apis. Examples - cert-manager
APIs versioned independently
├── apis
│ ├── dnsendpoint
│ │ ├── v1alpha
│ │ │ ├── util/validation
│ │ │ ├── doc.go
│ │ │ └── zz_generated.***.go
│ │ ├── v1beta # outside of scope currently, just an example
│ │ │ ├── util/validation
│ │ │ ├── doc.go
│ │ │ └── zz_generated.***.go
│ │ ├── v1 # outside of scope currently, just an example
│ │ │ ├── util/validation
│ │ │ ├── doc.go
│ │ │ └── zz_generated.***.go
│ ├── dnsentry
│ │ ├── v1alpha
As a cluster operator or administrator, I want a stable DNSEndpoint API to reliably manage DNS records within Kubernetes so that I can ensure consistent and automated DNS resolution for my services.
As a developer, I want a well-documented DNSEndpoint API that allows me to programmatically define and manage DNS records without worrying about breaking changes.
As a SRE, I need a tested and validated DNSEndpoint API that integrates seamlessly with cloud-native networking services, ensuring high availability and scalability.
As a platform engineer, I want stronger validation and defaulting so that I can reduce misconfigurations and operational overhead.
The DNSEndpoint API should provide a robust Custom Resource Definition (CRD) with well-defined fields and validation.
TBDapiVersion: externaldns.k8s.io/v1beta1
kind: DNSEndpoint
metadata:
name: example-endpoint
spec:
endpoints:
- dnsName: "example.com"
recordType: "A"
targets:
- "192.168.1.1"
ttl: 300
- dnsName: "www.example.com"
recordType: "CNAME"
targets:
- "example.com"
How should the new CRD or feature behave? Are there edge cases?
external-dns maintainers.Graduate Directly to GA: Skipping the beta phase could accelerate stability, but it would limit the opportunity for community feedback and refinement.
Introduce a New API Version: Instead of modifying the existing API, a new version (e.g., v2alpha1) could be introduced, allowing gradual migration.
v1alpha1 -> v2alpha1 -> v1betaRedesign the API Before Graduation
Deprecate DNSEndpoint and Rely on External Solutions or Annotations