Как добавить DNS-запись в GCP с помощью Terraform? - PullRequest
5 голосов
/ 15 января 2020

Я пытаюсь заставить terraform добавить запись "A" в мою зону DNS в GCP. Попытки сделать это приводят к ошибке: «сервер обновлений не установлен». Подобная ошибка описана здесь . Поэтому я собрал из комментариев, сделанных там, что мне нужен элемент обновления в моем провайдере DNS. Который я покорно пытался предоставить.

provider "dns" {
  update {
    server = "xxx.xxx.x.x"
  }
}

За исключением того, что я понятия не имею, какой IP идет туда, и мои первые попытки потерпели неудачу.

Будут ли мне нужны другие настройки?

Я отмечаю в документации следующий формат ...

provider "dns" {
  update {
    server        = "192.168.0.1"
    key_name      = "example.com."
    key_algorithm = "hmac-md5"
    key_secret    = "3VwZXJzZWNyZXQ="
  }
}

Я не понимаю, откуда эти настройки.

Обновление:
Совет Мартина (принятый ответ ниже) работал как заклинание.

Для следующего человека, который боролся с этим, трюк заключался в использовании google_dns_record_set вместо dns_a_record_set.

1 Ответ

5 голосов
/ 16 января 2020

Поставщик dns внедряет стандартный протокол обновления DNS, определенный в RF C 2136: Dynami c Обновления в системе доменных имен , который, как правило, внедряется самодостаточным DNS серверное программное обеспечение, такое как BIND . В этом случае учетные данные будут настроены на стороне сервера оператором BIND, а затем вы, в свою очередь, передадите данные учетные данные поставщику.

К сожалению, поскольку DNS имеет тенденцию быть управляемой службой, предоставляемой для вас разные поставщики, большинство из них решили игнорировать RF C 2136 и вместо этого реализовывать свои собственные проприетарные API. По этой причине возможности управления dns поставщика Terraform несовместимы с большинством управляемых продуктов DNS.

Вместо этого мы управляем ими с помощью поставщика c, определенного поставщиком. В вашем случае, поскольку вы, очевидно, используете Google Cloud DNS, вы будете управлять своими зонами DNS и записями, используя типы ресурсов от поставщика google Terraform. В частности:

Вот минимальный пример для начала:

resource "google_dns_managed_zone" "example" {
  name     = "example"
  dns_name = "example.com."
}

resource "google_dns_record_set" "example" {
  managed_zone = google_dns_managed_zone.example.name

  name    = "www.${google_dns_managed_zone.example.dns_name}"
  type    = "A"
  rrdatas = ["10.1.2.1", "10.1.2.2"]
  ttl     = 300
}

Ключевое преимущество этих поставщиков, использующих API-интерфейсы c, определяемые поставщиком, состоит в том, что операции управления интегрируются с механизмами аутентификации, используемыми для остальных их API, и поэтому, если у вашего провайдера Google Cloud Platform есть учетные данные с достаточными привилегиями для управления этими объектами, вам не нужно для этого никаких дополнительных настроек провайдера.

Terraform имеет поддержку провайдера для ряда различных управляемых Поставщики DNS, поэтому пользователи, не использующие Google Cloud DNS, надеются, что их выбранный поставщик также будет поддерживаться аналогичным образом, просмотрев доступных поставщиков .

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...