Saltar al contenido
FloatingIP-to-DNS

FloatingIP-to-DNS

FloatingIP-to-DNS

Configuración del DNS

Generar un par de claves pública/privada:

$ tsig-keygen -a HMAC-MD5 www.domain.com.

Configurar la zona DNS de la siguiente manera:

...
key "www.domain.com" {
  algorithm hmac-md5;
  secret "the-value-of-the-generated-key-that-you-can-see-in-public-and-private-keys ==";
};
...
zone "domain.com" {
  type master;
  file "/etc/bind/keys.d/domain.com.tsig";
  allow-update { key "www.domain.com."; };
};

Configuración de terraform

module cache-openstack-floatingip-to-register {

    source = "./modules/cache-openstack-floatingip-to-register"
    
    #
    # will be completed as
    # <openstack-project-name>.<openstack-domain-name>.<dns_suffix>
    #
    dns_suffix = var.dns_suffix

    dns_fip_default_ttl = var.dns_fip_default_ttl

}

module register-openstack-floatingip-to-external-dns1 {

    source = "./modules/register-openstack-floatingip-to-external-dns"

    ddns_suffix   = module.cache-openstack-floatingip-to-register.dns_suffix
    ddns_fip_name = module.cache-openstack-floatingip-to-register.dns_fip_name
    ddns_fip_ipv4 = module.cache-openstack-floatingip-to-register.dns_fip_ipv4
    ddns_fip_ttl  = module.cache-openstack-floatingip-to-register.dns_fip_ttl

    ddns_server_ip     = var.dns2__ddns_server_ip
    ddns_key_name      = var.dns2__ddns_key_name
    ddns_key_algorithm = var.dns2__ddns_key_algorithm
    ddns_key_secret    = var.dns2__ddns_key_secret

}

module register-openstack-floatingip-to-external-dns2 {

    source = "./modules/register-openstack-floatingip-to-external-dns"

    ddns_suffix   = module.cache-openstack-floatingip-to-register.dns_suffix
    ddns_fip_name = module.cache-openstack-floatingip-to-register.dns_fip_name
    ddns_fip_ipv4 = module.cache-openstack-floatingip-to-register.dns_fip_ipv4
    ddns_fip_ttl  = module.cache-openstack-floatingip-to-register.dns_fip_ttl

    ddns_server_ip     = var.dns2__ddns_server_ip
    ddns_key_name      = var.dns2__ddns_key_name
    ddns_key_algorithm = var.dns2__ddns_key_algorithm
    ddns_key_secret    = var.dns2__ddns_key_secret

}
variable dns_suffix {
    type = string
}

variable dns_fip_default_ttl {
    type = number
}

variable dns1__ddns_server_ip {
    type = string
}

variable dns1__ddns_key_name {
    type = string
}

variable dns1__ddns_key_algorithm {
    type = string
}

variable dns1__ddns_key_secret {
    type = string
}

variable dns2__ddns_server_ip {
    type = string
}

variable dns2__ddns_key_name {
    type = string
}

variable dns2__ddns_key_algorithm {
    type = string
}

variable dns2__ddns_key_secret {
    type = string
}

module/cache-openstack-floatingip-to-register

El módulo terraform cache-openstack-floatingip-to-register consulta una instancia OpenStack en un proyecto dado para obtener la lista de IPs flotantes y sus tags asociados.
terraform
terraform {
  required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "~> 1.48.0"
    }
    external = {
      version = "~> 2.2.3"
    }
  }
}
variable dns_suffix {
    type = string
}

variable dns_fip_default_ttl {
    type = string
    default = "3600"
}
locals {

    suffix = lower(join(".", [
       data.openstack_identity_auth_scope_v3.self.project_name,
       data.openstack_identity_auth_scope_v3.self.project_domain_name
    ]))

    ddns_suffix = join(".", [
       local.suffix,
       "microstack."
    ])

}
output dns_suffix {
    value = local.ddns_suffix
}

output dns_fip_name {
    value = data.external.openstack_networking_floatingip_name.result
}

output dns_fip_ipv4 {
    value = data.external.openstack_networking_floatingip_ipv4.result
}

output dns_fip_ttl {
    value = data.external.openstack_networking_floatingip_ttl.result
}

module/register-openstack-floatingip-to-external-dns

El módulo terraform register-openstack-floatingip-to-external-dns registra las IPs flotantes en el DNS cuando es necesario, utilizando la información recogida por el módulo cache-openstack-floatingip-to-register.
terraform {
  required_version = ">= 0.14.0"
  required_providers {
    dns = {
      source = "hashicorp/dns"
      version = "~> 3.2.3"
    }
  }
}
resource dns_a_record_set record {

    for_each = var.ddns_fip_name

    name = each.value
    zone = var.ddns_suffix
    addresses = [
        lookup(var.ddns_fip_ipv4, each.key)
    ]
    ttl = tonumber(lookup(var.ddns_fip_ttl, each.key))

}