Управление Route53 Частные записи DNS из частной подсети без доступа к Интернету - PullRequest
0 голосов
/ 28 апреля 2018

В настоящее время я использую Terraform для поддержки инфраструктуры в AWS. В рамках создания экземпляра каждого вычислительного экземпляра он обращается к мета-службе AWS и API-интерфейсу EC2, чтобы установить его имя хоста.

Любые экземпляры, помещенные в частную подсеть моего VPC, не будут иметь доступа к Интернету, пока я не настрою экземпляр прокси-сервера squid (вероятно, будет обработан Ansible).

Чтобы все экземпляры моего VPC могли общаться с API EC2, я настроил конечную точку VPC. К сожалению, нет такой конечной точки для общения с Route53. Это означает, что я не могу установить частные записи DNS для каждого экземпляра при его создании.

Я не уверен, как управлять настройками записей DNS для каждого из этих хостов. Частная подсеть в конечном итоге будет взаимодействовать с Интернетом через обратный прокси-сервер (прокси-сервер squid), но я бы не хотел, чтобы обратный прокси-сервер зависел от начальной настройки.

Моя единственная мысль - использовать экземпляр «Configuration», который находится в общедоступной подсети, каждый экземпляр в частной подсети может сообщить свое имя хоста экземпляру «Configuration», который затем может вызвать API Route53.

Возможно, стоит отметить, что имена хостов для некоторых из этих экземпляров будут динамическими и, следовательно, не могут быть установлены Terraform.

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Вы можете сделать это немного более сложным способом. Terraform (TF) может использовать данные из любого ресурса, который вы используете в других ресурсах.

resource "aws_instance" "foo" {}
resource "aws_route53_zone" "example_private" {}
На

может ссылаться маршрутный вызов

resource "aws_route53_record" "foo" {
  zone_id = "${aws_route53_zone.example_private.zone_id}"
  name    = "foo"
  type    = "A"
  ttl     = 300
  record  = [ "${aws_instance.foo.private_ip}" ]
}

Это создаст запись в домене example_private с использованием частного IP-адреса instance foo . Также ваши личные экземпляры будут общаться внутри AWS. Для этого не требуется доступ к общедоступному интернету.

0 голосов
/ 11 мая 2018

Лучше всего достичь этого с помощью роли экземпляра или ключа API и пользовательских данных. Используя эту процедуру, вы можете делать все что угодно - например, запускать Jenkins, обновляя любую информацию AWS. Поскольку это будет шаблон от terraform, вы можете гораздо больше настраивать с помощью его переменных.

Пожалуйста, дайте мне знать, как это происходит.

 #!/bin/bash
export http_proxy=X.X.X.X:3128
export https_proxy=X.X.X.X:3128

# Configure API Keys here if you don't have instance role.

# Gathering information about the instance
AZ=`curl http://169.254.169.254/latest/meta-data/placement/availability-zone`
REGION="`echo \"$AZ\" | sed 's/[a-z]$//'`"
INSTANCEID=`curl http://169.254.169.254/latest/meta-data/instance-id`

# NAME=`curl http://169.254.169.254/latest/meta-data/local-hostname`
NAME = test.example.com

# Setting the hostname of the instance
aws ec2 create-tags --region $REGION --resources $INSTANCEID --tags Key=Name,Value=$NAME
0 голосов
/ 28 апреля 2018

Если я правильно понимаю вашу проблему, вы хотите, чтобы экземпляры EC2, созданные вами с помощью Terraform, регистрировались в R53?

В зависимости от того, откуда вы запускаете TF, не можете ли вы создать запись Route53 в то же время, когда вы включаете экземпляр? Я бы не подумал, что для этого вам понадобится доступ в Интернет для вызова API AWS, но я могу ошибаться.

Если вы запустите TF из бастиона в публичной подсети, это решит проблему?

...