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))
}