* feat(traefik)!: disable legacy listeners on traefik.containo.us API Group * update docs accordingly * update test accordingly * type argument is infered * fix rebase
3.1 KiB
Traefik Proxy Source
This tutorial describes how to configure ExternalDNS to use the Traefik Proxy source. It is meant to supplement the other provider-specific setup tutorials.
Manifest (for clusters without RBAC enabled)
[[% include 'traefik-proxy/without-rbac.yaml' %]]
Manifest (for clusters with RBAC enabled)
[[% include 'traefik-proxy/with-cluster-rbac.yaml' %]]
Deploying a Traefik IngressRoute
Create an IngressRoute file called 'ingress-route-default' with the following contents:
[[% include 'traefik-proxy/ingress-route-default.yaml' %]]
Note the annotation on the IngressRoute (external-dns.alpha.kubernetes.io/target
); use the same hostname as the traefik DNS.
ExternalDNS uses this annotation to determine what services should be registered with DNS.
Create the IngressRoute:
kubectl create -f docs/snippets/traefik-proxy/ingress-route-default.yaml
Depending where you run your IngressRoute it can take a little while for ExternalDNS synchronize the DNS record.
Support private and public routing
To create a more robust and manageable Kubernetes environment, leverage separate Ingress classes to finely control public and private routing's security, performance, and operational policies. Similar approach could work in multi-tenant environments.
For this we are going to need two instances of traefik
(public and private) as well as two instances of external-dns
.
The traefik
configuration should contain (for more detailed configured validate with the vendor)
[[% include 'traefik-proxy/traefik-public-private-config.yaml' %]]
Create a IngressRoutes files with the following contents:
[[% include 'traefik-proxy/ingress-route-public-private.yaml' %]]
And the arguments for external-dns
instances should looks like
---
args:
- --source=traefik-proxy
- --annotation-filter="kubernetes.io/ingress.class=traefik-public"
---
args:
- --source=traefik-proxy
- --annotation-filter="kubernetes.io/ingress.class=traefik-private"
Cleanup
Now that we have verified that ExternalDNS will automatically manage Traefik DNS records, we can delete the tutorial's example:
kubectl delete -f docs/snippets/traefik-proxy/ingress-route-default.yaml
kubectl delete -f externaldns.yaml
Additional Flags
Flag | Description |
---|---|
--traefik-enable-legacy | Enable listeners on Resources under traefik.containo.us |
--traefik-disable-new | Disable listeners on Resources under traefik.io |
Resource Listeners
Traefik has deprecated the legacy API group, traefik.containo.us, in favor of traefik.io. By default the traefik-proxy
source listen for resources under traefik.io API groups.
If needed, you can enable legacy listener with --traefik-enable-legacy
and also disable new listener with --traefik-disable-new
.