Skip to main content
Version: 1.28.0

ExternalDNS package

ExternalDNS synchronizes exposed Kubernetes Services and Ingresses with DNS providers.

Requirements

  • Kubernetes >= 1.22.0
  • Kustomize = v3.5.3

Image repository and tag

Deployment

This package provides two deployments of external-dns, one for "private" records and one for "public" records. The only thing that differs between the two packages is the suffix used on kustomize to generate all the resources.

The package itself cannot be used without patches, and in this module we provide terraform modules to generate the required cloud resources and kustomize patches.

You can deploy ExternalDNS in your cluster by including the package in your kustomize project:

kustomization.yaml file extract:

...

resources:
- katalog/external-dns/private
- katalog/external-dns/public

...

Refer to the Terraform module aws-eternal-dns to create the IAM role and the required kustomize patches automatically. For now the only supported cloud provider is AWS with Route53.

If still you want to create everything manually without using our Terraform Module, you need to patch the service accountas follows:

sa-patch.yaml

---
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789123:role/your-role-name-public
name: external-dns-public
namespace: ingress-nginx
---
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789123:role/your-role-name-private
name: external-dns-private
namespace: ingress-nginx

and then add on the kustomization.yaml file the patches:

kustomization.yaml file extract:

...

patchesStrategicMerge:
- sa-patch.yaml

...

You can then apply your kustomize project by running the following command:

kustomize build | kubectl apply -f -