In un cluster di container come Kubernetes o Docker 1.12 Swarm, come si risolve con il DNS esterno al buon contenitore sul buon host?

Forse sono stupido, forse non sto usando le buone parole, ma non riesco a trovare una sola risposta in nessuna parte di Stackexchange o di tutto il Web.

Ho creato un sacco di siti web, principalmente con WordPress, Drupal, …
(E di recente, ho iniziato a sperimentare con Scala e Go, cercando di creare un sito web per get qualche conoscenza di queste lingue.)
Il mio fornitore di DNS è per lo più DNSMadeEasy .

In un primo momento, stavo usando solo un grande server dedicato , sotto Debian, con i miei diversi siti web solo in diverse cartelle, e Nginx, PHP-FPM, … servendo tutti i miei siti web. Impostazione tradizionale.

Poi, pochi anni fa, ho commutato a un setup Docker, ancora su un solo host , con un contenitore Nginx, un contenitore PHP-FPM, un contenitore MySQL, … per sito web.
E un contenitore nginx reverse-proxy davanti a tutto, per redirect il visitatore del sito web example.com ai contenitori example.com.

Con la configuration tradizionale o con l'installazione basata su Docker, stavo assegnando l' indirizzo IP del mio host al record A dei miei diversi siti web in DNSMadeEasy e voilà, tutto funzionava come previsto.

Ora, vorrei passare da un'impostazione di singolo host all'installazione di Cluster multi -host , utilizzando Docker Swarm (1.12 Swarm) o Kubernetes, per poter scalare più facilmente, in quanto questo era lo scopo di passare a Docker nel primo posto.
Come tali, i contenitori per i miei diversi siti web verranno distribuiti attraverso i diversi host del mio cluster.

Ho intenzione di utilizzare una cloud europea in esecuzione su OpenStack, come non posso (<> leggi sulla privacy) e non voglio utilizzare (<> troppo costose) nuvole americane come Google Cloud Engine o AWS EC2 (<> Patriot Act <> Dati europei), per favore, non mi dica di usare queste nuvole. Ho già potuto impostare un cluster Kubernetes e un cluster Docker Swarm, in questa nuvola Openstack.

LA MIA QUESTIONE: quello che non riesco a capire, come si fa a indicare i tuoi siti DYNAMICALLY ai nuovi servizi e pod che vengono creati automaticamente?

Diciamo che ho quattro host (1 master e 3 lavoratori).
Se faccio solo la risoluzione DNS di Round Robin , mettere tutti i quattro IP dei miei quattro host nel record A dei miei siti web in modo che va a uno dei quattro, sarà un incubo e un casino totale, con le intestazioni di cache e qualunque cosa. Inoltre, con DNSMadeEasy, hanno un'API per aggiungere e cancellare automaticamente i record, quindi suppongo che sia ansible aggiornare automaticamente il record A o il record CNAME dei siti web come questo plugin con AWS Route53: https: // github. com / wearemolecule / route53-kubernetes ? (Possiamo vedere che questo utilizza un LoadBalancer esterno in modo da suppongo che ho bisogno anche di un esterno lb per la mia configuration, se dovrei seguire quella soluzione?)

Sono consapevole che sia Kubernetes che Docker Swarm usano DNS per la scoperta di servizi e etcd / consul per la logging e l'elezione.
Ma da quello che ho capito, questo è usato come un sistema DNS interno, non un esterno, no?
O devo puntare il NS ai miei host e utilizzare i miei host invece di DnsMadeEasy !! ??

Mi sto perdendo qualcosa ? Lo faccio male?

Per favore qualcuno mi aiuti, comincio ad avere mal di testa enormi cercando di ordinare le cose 🙂

Y

  • Che cos'è questo servizio chiamato in inglese?
  • Che cosa è il 17.10.13.204 (Apple?) Facendo quello che è sempre bloccato come traffico port-scanning?
  • Come elencare tutte le richieste di socket di udp?
  • Quale è il miglior sistema operativo per PPTP?
  • Come configurare il traffico da un IP specifico rigido ad un IP per inoltrare ad un altro IP: PORT utilizzando iptables?
  • droping packet su iptables = sprecare la width di banda?
  • è ansible colbind direttamente un client e un server con cavi in ​​rame 10GBASE CX4?
  • Computer su crash di networking
  • 2 Solutions collect form web for “In un cluster di container come Kubernetes o Docker 1.12 Swarm, come si risolve con il DNS esterno al buon contenitore sul buon host?”

    Kubernetes DNS incorporato

    A partire da Kubernetes 1.3, DNS è un servizio integrato avviato automaticamente utilizzando il componente addon manager cluster add-on. Un cluster DNS e un servizio DNS verranno pianificati e i kubelets verranno configurati per indicare ai singoli contenitori di utilizzare l'IP del Servizio DNS per risolvere i nomi DNS.

    Ogni servizio definito nel cluster (incluso il server DNS stesso) verrà assegnato un nome DNS. Per impostazione predefinita, un'elenco di ricerca DNS di Pod di un client includerà lo spazio dei nomi di Pod e il dominio predefinito del cluster. Questo è meglio illustrato dall'esempio:

    Assumere un servizio denominato foo nella barra dei nomi Kubernetes. Un pod in esecuzione nella barra degli spazi dei nomi può cercare questo servizio semplicemente facendo una query DNS per foo. Un pod in esecuzione nello spazio dei nomi quux può cercare questo servizio eseguendo una query DNS per foo.bar.

    Per ulteriori informazioni, consultare la documentazione Kubernetes .

    Bilanciamento del carico NGINX

    Configurazioni predefinite per il bilanciamento del carico:

    http { upstream myapp1 { server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://myapp1; } } } 

    Per ulteriori informazioni, consultare la documentazione NGINX .

    DNS REST API

    È quindi ansible creare uno script personalizzato per interagire con l'API del provider DNS come necessario.

    Per ulteriori informazioni, controllare la documentazione API di DNSMadeEasy REST .

    Docker 1.12 con swarm-mode è dotato di bilanciamento del carico incorporato.

    Nel tuo caso, il vantaggio principale di questo è che non devi aggiornare dynamicmente il tuo DNS a seconda di quale host un determinato contenitore finisce in esecuzione (cosa che probabilmente port comunque a disastro, a causa del DNS ttl e della cache).

    Dite ad esempio che hai eseguito:

     docker service create --name nginx -p 80:80 nginx 

    Questo creerà un servizio nginx con una replica, quindi un singolo contenitore verrà avviato su un host random nel tuo swarm. Ma il bilanciamento del carico incorporato indirizzerà le richieste sulla port 80 su uno qualsiasi degli host swarm all'host in cui viene eseguito il contenitore. E allo stesso modo se si scala il servizio con:

     docker service scale nginx=2 

    Ciò rende una configuration molto semplice:

    1. Utilizza la funzionalità di round-robin di DNSMadeEasy e aggiunge i record A per tutti gli IP host nello swarm.
    2. Distribuisci l'applicazione con docker service create
    3. Profitto

    Dalla tua domanda, sembra che tu desideri eseguire più siti sul tuo swarm, ad esempio. molteplici applicazioni che ascoltano tutti sulla port 80 e la port 443. Come fa riferimento a @Flippy, per fare ciò devi attualmente eseguire un loadbalancer di livello 7 come HAProxy o nginx che esamina l'intestazione host richiesta e inoltra le richieste in modo appropriato. Questo è anche semplice da fare con la modalità Docker 1.12 Swarm e questa è una buona guida iniziata .

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.