Helm chart for the external-dns service running in Workload Clusters. This chart is used to deploy both as a default app and as a Managed App. It can be installed multiple times in the same Workload Cluster.
What is this App?
external-dns
makes Kubernetes resources discoverable via external DNS servers. It dynamically configures external DNS providers (AWS Route 53, Azure DNS) for Kubernetes Ingresses, Services etc.
Why did we add it?
The App is already used as a default App in most clusters (except on-prem) to provide DNS records for nginx-ingress-controller-app.
Who can use it?
Customers using Giant Swarm clusters on AWS or Azure.
There are 3 ways to install this app onto a workload cluster:
- Using our web interface
- Using our API
- Directly creating the App custom resource on the Management Cluster
Configuration options are documented in the Configuration.md
document. See also the default values.yaml
This is an example of a values file you could upload using our web interface. It assumes:
- The cloud provider is AWS.
- API access is internal and therefore authentication is provided by KIAM.
- Only Ingress resources in the namespace
web-app
should be reconciled. - Only Hosted Zone
Z262CGXUQ3M97
will be modified.
# values.yaml
aws:
iam:
customRoleName: 'my-precreated-route53-role'
zoneType: private
externalDNS:
annotationFilter: "mydomain.com/external-dns=owned"
domainFilterList:
- web-app.mydomain.com
namespaceFilter: 'web-app'
registry:
txtPrefix: 'webapp'
sources:
- ingress
extraArgs:
- "--zone-id-filter=Z262CGXUQ3M97"
provider: aws
Additionally to the above example, external-dns
can also be configured to synchronize DNSEndpoint
custom resources:
# values.yaml
...
externalDNS:
sources:
- crd
...
Here is an example DNSEndpoint
resource:
apiVersion: externaldns.k8s.io/v1alpha1
kind: DNSEndpoint
metadata:
name: my-record
namespace: web-app
annotations:
mydomain.com/external-dns: owned
spec:
endpoints:
- dnsName: www.mydomain.com
recordTTL: 60
recordType: A
targets:
- 1.2.3.4
See our full reference page on how to configure applications for more details.
This app has been tested to work with the following workload cluster release versions:
- AWS
v13.0.0
- Azure
v16.0.2
Some apps have restrictions on how they can be deployed. Not following these limitations will most likely result in a broken deployment.
External DNS v2.0.0+ requires
- Kubernetes version
1.19.0-0
or greater - nginx-ingress-controller-app v1.14.0 or greater to work (due to the need for the filtering annotation).
- If you do not (or cannot) upgrade
nginx-ingress-controller-app
tov1.14.0
, you can work around this by running the following command to ensure the defaultexternal-dns
continues to reconcile the relevant Service:
- If you do not (or cannot) upgrade
kubectl -n kube-system annotate service nginx-ingress-controller-app "giantswarm.io/external-dns=managed"
- Ensure CHANGELOG.md is up to date.
- Create a new branch to trigger the release workflow e.g. to release
v0.1.0
, create a branch from master calledmaster#release#v0.1.0
and push it. - This will push a new git tag and trigger a new tarball to be pushed to the
default-catalog
and thegiantswarm-catalog
If you have suggestions for how external-dns
could be improved, or want to report a bug, open an issue! We'd love all and any contributions.
Check out the Contributing Guide for details on the contribution workflow, submitting patches, and reporting bugs.