/external-dns-app

Helm chart for external-dns service running in workload clusters

Primary LanguageSmartyApache License 2.0Apache-2.0

CircleCI

external-dns-app chart

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.


Index

Installing

There are 3 ways to install this app onto a workload cluster:

  1. Using our web interface
  2. Using our API
  3. Directly creating the App custom resource on the Management Cluster

Configuring

Configuration options are documented in the Configuration.md document. See also the default values.yaml

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.

Compatibility

This app has been tested to work with the following workload cluster release versions:

  • AWS v13.0.0
  • Azure v16.0.2

Limitations

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 to v1.14.0, you can work around this by running the following command to ensure the default external-dns continues to reconcile the relevant Service:
kubectl -n kube-system annotate service nginx-ingress-controller-app "giantswarm.io/external-dns=managed"

Release Process

  • 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 called master#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 the giantswarm-catalog

Contributing & Reporting Bugs

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.