Inspired by Kubernetes DNS, Kubernetes' cluster-internal DNS server, ExternalDNS allows Kubernetes resources to be discovered via public DNS servers. Like KubeDNS, it retrieves a list of resources (services, ingresses, etc.) from the Kubernetes API to determine the 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.
For more information, refer to the NS1's GitHub repository for Kubernetes External DNS: https://github.com/ns1/external-dns