Skip to content
Community

logo

ExternalDNS#

ExternalDNS makes Kubernetes resources discoverable via public DNS servers. Like KubeDNS, it retrieves a list of resources (Services, Ingresses, etc.) from the Kubernetes API to determine a desired list of DNS records. Unlike KubeDNS, however, it’s not a DNS server itself, but merely configures other DNS providers accordingly—e.g. AWS Route 53 or Google Cloud DNS.

In a broader sense, ExternalDNS allows you to control DNS records dynamically via Kubernetes resources in a DNS provider-agnostic way.

Prerequisites#

Deploy k0rdent v1.7.0: QuickStart

Install template to k0rdent#

helm upgrade --install external-dns oci://ghcr.io/k0rdent/catalog/charts/kgst --set "chart=external-dns:1.20.0" -n kcm-system

Verify service template#

kubectl get servicetemplates -A
# NAMESPACE    NAME                            VALID
# kcm-system   external-dns-1-20-0             true

Deploy service template#

apiVersion: k0rdent.mirantis.com/v1beta1
kind: MultiClusterService
metadata:
  name: external-dns
spec:
  clusterSelector:
    matchLabels:
      group: demo
  serviceSpec:
    services:
    - template: external-dns-1-20-0
      name: external-dns
      namespace: external-dns
Configuration with Cloudflare#

Use ExternalDNS to leverage Cloudflare provider.

apiVersion: k0rdent.mirantis.com/v1beta1
kind: ClusterDeployment
# kind: MultiClusterService
...
  serviceSpec:
    services:
      - template: external-dns-1-20-0
        name: external-dns
        namespace: external-dns
        values: |
          external-dns:
            provider:
              name: cloudflare
            env:
            - name: CF_API_TOKEN
              valueFrom:
                secretKeyRef:
                  name: dns-tokens
                  key: cloudflare

You need to have your DNS provider access secret in your managed cluster, e.g. for Cloudflare:

CF_API_TOKEN=<your-cloudflare-api-token>
kubectl create secret generic dns-tokens --from-literal=cloudflare=${CF_API_TOKEN} -n external-dns