-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Description
What happened? I am unable to create new MX records using the TransIP provider in external-dns v0.16.1. Existing MX records (created manually or previously) are managed correctly, but creating a new DNSEndpoint with type MX fails in one of two ways depending on the target format:
- Standard Format ("10 mail.example.com"): Fails validation with an "illegal target" error in the logs, seemingly because it treats the whole string (priority + host) as a hostname to validate.
- External Target ("10 mx1.smtp.goog."): Passes validation (no error logs), but the record is not created on TransIP (silent failure).
- No Priority ("mail.example.com"): Fails validation with "illegal target".
- ProviderSpecific Priority: Setting priority via providerSpecific and using a clean hostname also fails validation.
A records and TXT records in the same zone work perfectly, proving credentials and connectivity are fine.
What you expected to happen? I expected external-dns to parse the priority and hostname from the target string (e.g., "10 mail.example.com") and successfully create the MX record on TransIP, similar to how it handles other providers or how it manages existing TransIP MX records.
How to reproduce it (as minimally and precisely as possible):
Deploy external-dns v0.16.1 configured with --provider=transip.
- Apply a DNSEndpoint for a zone that does not currently have an MX record (or a fresh subdomain):
apiVersion: externaldns.k8s.io/v1alpha1
kind: DNSEndpoint
metadata:
name: test-mx-creation
spec:
endpoints:
- dnsName: test-mx.example.com
recordType: MX
targets:
- "10 mail.example.com"
recordTTL: 600Observe logs for validation errors: level=warning msg="Endpoint ... has an illegal target. The subdomain must consist of lower case alphanumeric characters..."
Anything else we need to know?
- Existing Records: If I manually create the MX record in the TransIP control panel, external-dns sees it and does not complain. It only fails when it has to execute the create logic.
- Workaround: Manual creation is the only way to get unblocked.
Environment:
- External-DNS version: v0.16.1 (registry.k8s.io/external-dns/external-dns:v0.16.1)
- DNS Provider: TransIP
- Kubernetes version: v1.31.3+rke2r1 (Ubuntu 24.04)