Conectividad en múltiples regiones usando OVH Public Cloud
Desde hace algún tiempo, he estado trabajando en un proyecto (no de trabajo) muy interesante que implica configurar infraestructura en la nube a través de OVH Public Cloud para proteger la "soberanía de datos" (data sovereignty). Parte del diseño de la infraestructura requiere configurar un recurso en una región específica y otro en una región diferente, y permitir que ambos se comuniquen entre sí a través de IPs privadas.
Este es un caso de uso común al configurar redes ne la nube, y lo he hecho muchas veces en otras oportunidades usando distintos proveedores de servicios en la nube (Azure, AWS, GCP...), pero mi experiencia previa e intuición no me ayudaron mucho al intentar replicar esto en OVH Public Cloud.
i suspect dns is at fault. it’s always dns.
— andrés ignacio torres (@andresitorresm.com) July 4, 2025 at 12:05 AM
Mi primer intento rápido, después de echarle un ojo ligero a la documentación de OVH, se veía algo así (en Terraform):
# Una red privada
resource "ovh_cloud_project_network_private" "network" {
service_name = "abc123"
name = "multiregion-network"
regions = ["GRA1", "BHS1"]
}
# Dos subnets en la misma red privada, una
# en cada región
resource "ovh_cloud_project_network_private_subnet" "subnet1" {
service_name = "abc123"
network_id = ovh_cloud_project_network_private.network.id
region = "GRA1"
start = "10.0.1.1"
end = "10.0.1.255"
network = "10.0.1.0/24"
dhcp = true
no_gateway = false
}
resource "ovh_cloud_project_network_private_subnet" "subnet2" {
service_name = "abc123"
network_id = ovh_cloud_project_network_private.network.id
region = "BHS1"
start = "10.0.2.1"
end = "10.0.2.255"
network = "10.0.2.0/24"
dhcp = true
no_gateway = false
}
Al principio pareció funcionar, no tuve ningún error al aplicar la configuración de Terraform. Pero al usar los recursos en cada subnet me di cuenta de que no podían comunicarse entre sí a través de sus IPs privadas. Esto me confundió un poco, y no pude encontrar ejemplos de configuración para múltiples regiones en la documentación de OVH o en Github.
Entre otros intentos, probé separando la red privada en dos redes diferentes, una por región (similar a tener dos VPCs en AWS), pero esto no funcionó tampoco (y no tenía sentido que lo hiciera, ya que la documentación de OVH te permite crear una misma red privada con presencia en múltiples regiones).
Luego de leer y buscar basante, enocntré una línea clave en la documentación de OVH que explicaba el problema (énfasis mío):
Redes privadas multi-región: Para lograr interconectividad de recursos entre regiones, se debe usar el mismo vRack/VLAN/subnet para crear una red privada en cada región. Ten en cuenta que se deben usar diferentes rangos de IP DHCP en diferentes regiones.
¡Y listo! La implicación de esto es que debía usar "la misma subnet" en cada región, y esto se traduce a usar el msmo CIDR en network
al crear cada recurso de subnet por región, asegurándome de que los rangos de start
y end
fueran diferentes para evitar conflictos.
Mi configuración de Terraform actualizada se ve así:
# Una red privada
resource "ovh_cloud_project_network_private" "network" {
service_name = "abc123"
name = "multiregion-network"
regions = ["GRA1", "BHS1"]
}
# Dos subnets en la misma red privada que comparten
# el mismo CIDR, pero con rangos de IPs diferentes
resource "ovh_cloud_project_network_private_subnet" "subnet1" {
service_name = "abc123"
network_id = ovh_cloud_project_network_private.network.id
region = "GRA1"
start = "10.0.1.1"
end = "10.0.1.155"
network = "10.0.1.0/24"
dhcp = true
no_gateway = false
}
resource "ovh_cloud_project_network_private_subnet" "subnet2" {
service_name = "abc123"
network_id = ovh_cloud_project_network_private.network.id
region = "BHS1"
start = "10.0.1.156"
end = "10.0.1.255"
network = "10.0.1.0/24"
dhcp = true
no_gateway = false
}
Este cambio fue suficiente para que los recursos desplegados en cada región pudieran comunicarse entre sí a través de sus IPs privadas. :-)