|Project Name||Stars||Downloads||Repos Using This||Packages Using This||Most Recent Commit||Total Releases||Latest Release||Open Issues||License||Language|
|Kong||36,402||9 hours ago||95||apache-2.0||Lua|
|🦍 The Cloud-Native API Gateway|
|Kuboard 是基于 Kubernetes 的微服务管理界面。同时提供 Kubernetes 免费中文教程，入门教程，最新版本的 Kubernetes v1.23.4 安装手册，(k8s install) 在线答疑，持续更新。|
|Authelia||18,057||2||12 hours ago||64||October 28, 2019||102||apache-2.0||Go|
|The Single Sign-On Multi-Factor portal for web apps|
|Ingress Nginx||16,021||1||8 hours ago||63||July 21, 2021||596||apache-2.0||Go|
|Ingress-NGINX Controller for Kubernetes|
|External Dns||6,865||12||15 hours ago||139||November 07, 2023||264||apache-2.0||Go|
|Configure external DNS servers (AWS Route53, Google CloudDNS and others) for Kubernetes Ingresses and Services|
|K8s For Docker Desktop||4,782||11 days ago||47||apache-2.0||PowerShell|
|为Docker Desktop for Mac/Windows开启Kubernetes和Istio。|
|Flagger||4,501||7||6 days ago||62||November 30, 2023||247||apache-2.0||Go|
|Progressive delivery Kubernetes operator (Canary, A/B Testing and Blue/Green deployments)|
|Kubernetes Ingress||4,420||3||8 hours ago||102||October 19, 2022||82||apache-2.0||Go|
|NGINX and NGINX Plus Ingress Controllers for Kubernetes|
|Aws Load Balancer Controller||3,591||5 days ago||18||June 28, 2021||214||apache-2.0||Go|
|A Kubernetes controller for Elastic Load Balancers|
|K8s Tutorials||3,572||a month ago||2||mit||Go|
|k8s tutorials | k8s 教程|
ExternalDNS synchronizes exposed Kubernetes Services and Ingresses with DNS providers.
Inspired by Kubernetes DNS, Kubernetes' cluster-internal DNS server, 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.
The FAQ contains additional information and addresses several questions about key concepts of ExternalDNS.
ExternalDNS allows you to keep selected zones (via
--domain-filter) synchronized with Ingresses and Services of
type=LoadBalancer and nodes in various DNS providers:
ExternalDNS is, by default, aware of the records it is managing, therefore it can safely manage non-empty hosted zones. We strongly encourage you to set
--txt-owner-id to a unique value that doesn't change for the lifetime of your cluster. You might also want to run ExternalDNS in a dry run mode (
--dry-run flag) to see the changes to be submitted to your DNS Provider API.
Note that all flags can be replaced with environment variables; for instance,
--dry-run could be replaced with
No new provider will be added to ExternalDNS in-tree.
ExternalDNS has introduced a webhook system, which can be used to add a new provider. See PR #3063 for all the discussions about it.
Known providers using webhooks: | Provider | Repo | | -------- | ----------- | | IONOS | ionos-cloud/external-dns-ionos-webhook | | Adguard Home Provider | muhlba91/external-dns-provider-adguard | | STACKIT | stackitcloud/external-dns-stackit-webhook | | GleSYS | glesys/external-dns-glesys |
ExternalDNS supports multiple DNS providers which have been implemented by the ExternalDNS contributors. Maintaining all of those in a central repository is a challenge and we have limited resources to test changes. This means that it is very hard to test all providers for possible regressions and, as written in the Contributing section, we encourage contributors to step in as maintainers for the individual providers and help by testing the integrations.
We define the following stability levels for providers:
The following table clarifies the current status of the providers according to the aforementioned stability levels:
|Google Cloud DNS||Stable|
|AWS Route 53||Stable|
|AWS Cloud Map||Beta|
|Akamai Edge DNS||Beta|
|Oracle Cloud Infrastructure DNS||Alpha|
A breaking change was added in external-dns v0.10.0.
|ExternalDNS||<= 0.9.x||>= 0.10.0|
|Kubernetes <= 1.18||✅||❌|
|Kubernetes >= 1.19 and <= 1.21||✅||✅|
|Kubernetes >= 1.22||❌||✅|
The are two ways of running ExternalDNS:
The following tutorials are provided:
See the contributor guide for details on compiling from source.
Next, run an application and expose it via a Kubernetes Service:
kubectl run nginx --image=nginx --port=80 kubectl expose pod nginx --port=80 --target-port=80 --type=LoadBalancer
Annotate the Service with your desired external DNS name. Make sure to change
example.org to your domain.
kubectl annotate service nginx "external-dns.alpha.kubernetes.io/hostname=nginx.example.org."
Optionally, you can customize the TTL value of the resulting DNS record by using the
kubectl annotate service nginx "external-dns.alpha.kubernetes.io/ttl=10"
For more details on configuring TTL, see here.
Use the internal-hostname annotation to create DNS records with ClusterIP as the target.
kubectl annotate service nginx "external-dns.alpha.kubernetes.io/internal-hostname=nginx.internal.example.org."
If the service is not of type Loadbalancer you need the --publish-internal-services flag.
Locally run a single sync loop of ExternalDNS.
external-dns --txt-owner-id my-cluster-id --provider google --google-project example-project --source service --once --dry-run
This should output the DNS records it will modify to match the managed zone with the DNS records you desire. It also assumes you are running in the
default namespace. See the FAQ for more information regarding namespaces.
Note: TXT records will have the
my-cluster-id value embedded. Those are used to ensure that ExternalDNS is aware of the records it manages.
Once you're satisfied with the result, you can run ExternalDNS like you would run it in your cluster: as a control loop, and not in dry-run mode:
external-dns --txt-owner-id my-cluster-id --provider google --google-project example-project --source service
Check that ExternalDNS has created the desired DNS record for your Service and that it points to its load balancer's IP. Then try to resolve it:
dig +short nginx.example.org. 220.127.116.11
Now you can experiment and watch how ExternalDNS makes sure that your DNS records are configured as desired. Here are a couple of things you can try out:
The tutorials section contains examples, including Ingress resources, and shows you how to set up ExternalDNS in different environments such as other cloud providers and alternative Ingress controllers.
If using a txt registry and attempting to use a CNAME the
--txt-prefix must be set to avoid conflicts. Changing
--txt-prefix will result in lost ownership over previously created records.
externalIPs list is defined for a
LoadBalancer service, this list will be used instead of an assigned load balancer IP to create a DNS record. It's useful when you run bare metal Kubernetes clusters behind NAT or in a similar setup, where a load balancer IP differs from a public IP (e.g. with MetalLB).
Are you interested in contributing to external-dns? We, the maintainers and community, would love your suggestions, contributions, and help! Also, the maintainers can be contacted at any time to learn more about how to get involved.
We also encourage ALL active community participants to act as if they are maintainers, even if you don't have "official" write permissions. This is a community effort, we are here to serve the Kubernetes community. If you have an active interest and you want to get involved, you have real power! Don't assume that the only people who can get things done around here are the "maintainers". We also would love to add more "official" maintainers, so show us what you can do!
The external-dns project is currently in need of maintainers for specific DNS providers. Ideally each provider would have at least two maintainers. It would be nice if the maintainers run the provider in production, but it is not strictly required. Provider listed here that do not have a maintainer listed are in need of assistance.
For an overview on how to write new Sources and Providers check out Sources and Providers.
ExternalDNS is an effort to unify the following similar projects in order to bring the Kubernetes community an easy and predictable way of managing DNS records across cloud providers based on their Kubernetes resources: