Description:
Enhance the RFC2136 provider to support multiple hosts and introduce load balancing options to distribute DNS update requests evenly across available DNS servers.
Background:
Currently, the RFC2136 provider in ExternalDNS only supports a single host for DNS updates. In environments with multiple DNS servers, this limitation can lead to a single server becoming a bottleneck, especially when there are multiple ExternalDNS instances. We are experiencing an issue where all ExternalDNS pods are hitting a single data center (DC), causing it to become overloaded.
Proposed Solution:
Allow --rfc2136-host to Accept Multiple Hosts:
Modify the --rfc2136-host command-line option to accept multiple like the zone works.
Add a new command-line option --rfc2136-load-balancing-strategy to specify the load balancing strategy.
Supported options:
round-robin: Distribute DNS updates evenly across all specified hosts in a round-robin manner.
random: Randomly select a host for each DNS update.
disabled (default): Use the first host in the list as the primary, only moving to the next host if a failure occurs. Implement retry options. Only available if more than one host is provided, otherwise the value is ignored.
Retry Mechanism:
Implement a retry mechanism that moves to the next host in the list if the current host fails.
Allow configuration of the number of retries before moving to the next host.
Current Solution Limitations: The current RFC2136 provider implementation does not support automated failover, meaning that if the primary DNS server fails, the system does not automatically switch to a backup server. Manual intervention is required to update the configuration and switch to a different DNS server.
No Load Balancing: Without the proposed enhancements, the load balancing across multiple DNS servers must be manually managed by distributing the DNS zones or subdomains across multiple ExternalDNS instances.
These workarounds can help mitigate the immediate issue of overloading a single DNS server by distributing the load manually. However, they are not as efficient or resilient as an automated load balancing and failover solution. Implementing the proposed enhancements would significantly improve the system's reliability and performance by automating these processes.
Description: Enhance the RFC2136 provider to support multiple hosts and introduce load balancing options to distribute DNS update requests evenly across available DNS servers.
Background: Currently, the RFC2136 provider in ExternalDNS only supports a single host for DNS updates. In environments with multiple DNS servers, this limitation can lead to a single server becoming a bottleneck, especially when there are multiple ExternalDNS instances. We are experiencing an issue where all ExternalDNS pods are hitting a single data center (DC), causing it to become overloaded.
Proposed Solution:
Allow --rfc2136-host to Accept Multiple Hosts:
Introduce Load Balancing Options:
Retry Mechanism:
Example Configuration:
Benefits:
Tasks:
Workarounds:
Manually Distribute Zones Across ExternalDNS Instances:
Use Different Subdomains for Load Distribution:
Manual Failover Management:
Additional Notes:
These workarounds can help mitigate the immediate issue of overloading a single DNS server by distributing the load manually. However, they are not as efficient or resilient as an automated load balancing and failover solution. Implementing the proposed enhancements would significantly improve the system's reliability and performance by automating these processes.
Fixes: https://github.com/kubernetes-sigs/external-dns/issues/3470