这就是我认为可能发生的事情,也是我想要的。
我在 Amazon 中创建了一个 VPC,将一个公共子网放入其中,并在 VPC 中放置一个 Puppet 服务器实例和一个全栈 Web 服务器实例。
现在我将 Puppet 服务器的主机名设置为“puppet”,将 Web 服务器的主机名设置为“webserver”。
然后,我设置一个 DHCP 选项集,域名为“my-company-name.com.local”,使用 Amazon 提供的 DNS,并将其与 VPC 关联。我使用 Route 53 创建具有相同域名的区域记录。
然后我强制这两个实例获取新的 DHCP 租约,然后瞧!它们获得私有 IP 地址,并且 DNS 会自动更新以进行正向和反向 DNS 查找。
现在“puppet.mycompany.com.local”可以在我的 VPC 网络的私有端找到“webserver.mycompany.com.local”,反之亦然。
两个问题是:A) DNS 和 DHCP 就是这样工作的吗(尤其是它们之间的自动协作)?我不必在 DNS 记录中手动输入 DHCP 分配的 IP 地址,对吗?B) 我如何设置它才能工作,最有可能的是,我需要创建哪些 DNS 记录以及任何其他步骤?
答案1
似乎有两种方法。但回顾一下第二种方法,Route 53 中没有动态 DNS,即 AWS 上的 VPC 中的 DHCP 和 DNS 之间没有协作。
方法 1:http://www.ducea.com/2009/06/01/howto-update-dns-hostnames-automatically-for-your-amazon-ec2-instances/(需要网络中有 Bind9 DNS 服务器)
方法 2:http://cantina.co/automated-dns-for-aws-instances-using-route-53/(需要一组脚本和下载的库,另外还要放置一个 IAM 角色凭证,允许在系统中的每个服务器上进行 DNS 更新。一旦一个盒子被黑客入侵,您的网络就完蛋了。)
我该怎么办?无论如何我都需要运行 puppet,而 TheForeman 附带 Bind9 和 dhcp 服务器。所以我将为此专门创建一个实例。
答案2
我使用了上述问题的详细信息;这里还有一些补充内容:
在您的内部托管区域(例如这里在), 为你的主机创建 CNAME 而不是 A 记录,例如
test.in. CNAME ip-10-0-9.56.us-west-2.compute.internal
对于 DHCP 选项集,请确保您已设置以下内容
domain-name = in
domain-name-servers = AmazonProvidedDNS
答案3
如果您使用脚本来部署 ec2 实例:您可以在创建它的同时设置 DNS 记录,即(terraform)
resource "aws_route53_record" "ec2_alias_record" {
zone_id = "${var.domain_id}"
name = "MyComputer"
type = "CNAME"
ttl = "300"
records = ["${aws_instance.ec2_instance.public_ip}"]
}
每次创建(重新创建)实例时,记录都会更新。并且,您可以参数化,以便通过循环使用一些 count.index +1 变量来创建 N 个实例和 N 条记录。希望这能有所帮助。