Ik probeer een DNS-server te hosten op Docker Swarm, maar ik loop tegen allerlei beperkingen aan die waarschijnlijk een gevolg zijn van klassiek denken aan mijn kant. Wie helpt me op weg?
Ik heb nu een klassieke VM met daarin een DNS-server. Die VM heeft een statisch IP. Een statisch IP is essentieel voor een DNS-server. Dat is problematisch voor Docker Swarm want voor zover ik weet is het niet mogelijk om statische IP-adressen te gebruiken binnen Docker Swarm. Alles moet dynamisch zijn.
Het model is dat de containers bereikbaar zijn op het IP-adres van iedere host-machine. Docker routeert het verkeer dan intern door. Dat klinkt leuk maar is praktisch onwerkbaar voor DNS-servers. De meest simpele beperking is dat je op de meeste plekken maar 2 ip-adressen kan opgeven voor je DNS-servers, en ik heb meer hosts dan dat. Ik wil er niet op rekenen dat een host altijd bereikbaar is. Het doel van dit project is juist om High-Availability te bereiken zodat ik individuele servers kan onderhouden of vervangen.
De klassieke oplossing is om er dan een load-balancer/proxy voor te zetten. Maar ja, dat is het probleem alleen maar verplaatsen, want waar ga ik de load-balancer dan hosten? Als ik dat in een klassieke VM ga doen kan ik daar beter de DNS-server zelf plaatsen en ben ik terug bij af.
Een vergelijkbaar verhaal kan ik houden over andere applicaties maar DNS is het lastigste omdat je daar IP-adressen moet gebruiken.
De beste oplossing die ik kan bedenken is om geen Docker Swarm te gebruiken, maar traditionele cluster-manager (zoals Cororsync/Pacemaker) in te zetten om standalone containers te starten die wel een statisch IP-adres kunnen krijgen. Ik zou echter liever een oplossing hebben die meer in de geest is van een moderne container omgeving, al weet ik niet hoe dat er dan uit zou moeten zien.
Iemand een suggestie voor de juiste aanpak?
PS. Ik ben niet getrouwd me Docker of Docker Swarm en heb ook even naar Kubernetes, Rancher, Nomad en andere tools gekeken. Die hebben ongeveer dezelfde beperkingen. Daarom zie ik het niet als een fout van Docker, maar als gebrek aan inzicht aan mijn kant. Ik wil met dit topic vooral mijn inzicht vergroten en begrijpen hoe ik zo iets aanpak in de containerwereld, ik ben dus niet op zoek naar een hack om het ouderwetse model bovenop containers te stapelen.
PS2. De DNS-server in kwestie host een gewoon domein met Bind en moet voor de buitenwereld bereikbaar zijn, ik heb het dus niet over Consul of andere tool die voor de containers intern is.
Ik heb nu een klassieke VM met daarin een DNS-server. Die VM heeft een statisch IP. Een statisch IP is essentieel voor een DNS-server. Dat is problematisch voor Docker Swarm want voor zover ik weet is het niet mogelijk om statische IP-adressen te gebruiken binnen Docker Swarm. Alles moet dynamisch zijn.
Het model is dat de containers bereikbaar zijn op het IP-adres van iedere host-machine. Docker routeert het verkeer dan intern door. Dat klinkt leuk maar is praktisch onwerkbaar voor DNS-servers. De meest simpele beperking is dat je op de meeste plekken maar 2 ip-adressen kan opgeven voor je DNS-servers, en ik heb meer hosts dan dat. Ik wil er niet op rekenen dat een host altijd bereikbaar is. Het doel van dit project is juist om High-Availability te bereiken zodat ik individuele servers kan onderhouden of vervangen.
De klassieke oplossing is om er dan een load-balancer/proxy voor te zetten. Maar ja, dat is het probleem alleen maar verplaatsen, want waar ga ik de load-balancer dan hosten? Als ik dat in een klassieke VM ga doen kan ik daar beter de DNS-server zelf plaatsen en ben ik terug bij af.
Een vergelijkbaar verhaal kan ik houden over andere applicaties maar DNS is het lastigste omdat je daar IP-adressen moet gebruiken.
De beste oplossing die ik kan bedenken is om geen Docker Swarm te gebruiken, maar traditionele cluster-manager (zoals Cororsync/Pacemaker) in te zetten om standalone containers te starten die wel een statisch IP-adres kunnen krijgen. Ik zou echter liever een oplossing hebben die meer in de geest is van een moderne container omgeving, al weet ik niet hoe dat er dan uit zou moeten zien.
Iemand een suggestie voor de juiste aanpak?
PS. Ik ben niet getrouwd me Docker of Docker Swarm en heb ook even naar Kubernetes, Rancher, Nomad en andere tools gekeken. Die hebben ongeveer dezelfde beperkingen. Daarom zie ik het niet als een fout van Docker, maar als gebrek aan inzicht aan mijn kant. Ik wil met dit topic vooral mijn inzicht vergroten en begrijpen hoe ik zo iets aanpak in de containerwereld, ik ben dus niet op zoek naar een hack om het ouderwetse model bovenop containers te stapelen.
PS2. De DNS-server in kwestie host een gewoon domein met Bind en moet voor de buitenwereld bereikbaar zijn, ik heb het dus niet over Consul of andere tool die voor de containers intern is.
This post is warranted for the full amount you paid me for it.