
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.com
enrutar a nostalgic_shockley
y beta.xyz
enrutar a high_albattani
.
Miré /etc/hostname
y 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/hostname
pero 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.com
y beta.xyz.com
para 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).