Dar a Docker múltiples contenedores nombres de host públicos únicos en un único servidor Ubuntu

Dar a Docker múltiples contenedores nombres de host públicos únicos en un único servidor Ubuntu

Estoy buscando configurar varios contenedores Docker para servir diferentes nombres de host en una sola máquina, sin la molestia de Kubernetes.

CONTAINER ID        IMAGE               COMMAND             STATUS              NAMES
673394ef1d4c        busybox             "top"               Up 45 seconds       nostalgic_shockley
d85756f57265        busybox             "top"               Up 51 seconds       high_albattani

Digamos que tengo algún dominio xyz.com; Me gustaría alpha.xyz.comenrutar a nostalgic_shockleyy beta.xyzenrutar a high_albattani.

Miré /etc/hostnamey tiene algún nombre de host local.

root@saag:/home/root# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
...
root@saag:/home/root# cat /etc/hostname
saag
...
root@saag:/home/root# cat /etc/hosts
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Incluso intenté asignar los nombres de host a direcciones IP individuales de Docker, /etc/hostnamepero todavía no pude acceder a los contenedores.

Además, en mi panel de administración de dominio... ¿debería simplemente configurar el registro a para alpha.xyz.comy beta.xyz.compara la dirección IP de este host?

Respuesta1

De alguna manera creo que estás en el camino equivocado. La red interna de Docker no está representada en la red externa del host. El anfitrión tendrá que enrutar el tráfico.

Por lo general, querrás permitir conexiones desde el mundo exterior.a algún servicio(es decir, un puerto tcp en la mayoría de los casos) dentro de los contenedores acoplables.

Si está hablando de HTTP y desea el puerto 80 (o 443) para ambos contenedores, no será tan simple como enrutar un puerto desde la interfaz externa hacia ellos, ya que no puede reenviarlo a ambos. Entonces, mi solución preferida sería tener un Apache en la máquina host que realice alojamiento virtual basado en nombres con dos vhosts para los dos nombres DNS diferentes y que reenvíen el tráfico a su respectivo contenedor Docker.

Por cierto: si tuviera diferentes puertos para asignar desde la red externa a los contenedores Docker, algunos métodos más simples (basados ​​en red) funcionarían, por ejemplo, algunos reenvíos basados ​​en iptables o asignaciones de puertos de host.

Respuesta2

Además, en mi panel de administración de dominio... ¿debería simplemente configurar el registro a para alpha.xyz.com y beta.xyz.com en la dirección IP de este host?

El panel de gestión de dominios es lo que debesEmpezar con.Ni Docker ni los propios contenedores pueden crear un subdominio de la nada; primero debe crearse dentro del proveedor de servicios DNS.

Una vez hecho esto, el host de Docker puede enrutar paquetes al contenedor correcto usando cualquier facilidad que Docker proporcione (supongo que reenvío de puertos TCP/UDP de iptables), o puede enrutar solicitudes HTTP usando un proxy inverso.

No es necesario cambiar los nombres de host del contenedor para que esto funcione.


(Técnicamente, DNS admite el registro dinámico dentro del protocolo, pero la mayoría de los proveedores de servicios no lo admiten en absoluto o requieren el uso de su API personalizada en lugar de las instalaciones DNS estándar.

Además de eso, las máquinas necesitarían tener una forma de autenticarse con el proveedor de DNS, y no existe un buen sistema universal para eso. Como resultado, dicha creación automática de subdominios es casi exclusiva de Active Directory en la práctica).

información relacionada