使用Terraform快速搭建私有域名解析服务
更新时间:2024-08-30
概览
本文介绍了使用百度智能云内网DNS功能,实现私有域名映射到资源的IP地址,并通过Terraform实现内网DNS的快速创建、部署和管理。
需求场景
当内网资源较为复杂时,通过IP地址来管理过于繁琐,这时能够通过域名去进行管理,将私有域名的解析记录映射到资源的IP地址。同时,内部的域名不能暴露在公网上,内网的环境要和公网隔离。此时可以使用内网DNS服务来进行实现。
方案概述
内网DNS服务基于百度智能云私有网络环境,支持私有域名解析和管理服务。可以在自定义的一个或多个私有网络中快速构建DNS系统,实现私有域名映射到资源IP地址。通过内网DNS服务,您可以方便地使用私有域名记录来管理VPC中的BCC、BLB等百度智能云资源,而这些私有域名在VPC之外将无法访问。
服务搭建完成后,用户可在关联了VPC的私有域中,通过添加解析记录,实现私有域名到资源IP地址的映射。(如下图中云服务器A和云服务器B通信)的需求场景,这样方便运维管理。
配置步骤
1、环境准备
- Terraform:是一种安全有效地构建、更改和版本控制基础设施的工具。它以配置文件为驱动,您在文件中定义各种组件,Terraform会基于该文件完成所有组件的创建、变更和管理。目前百度智能云已与 Terraform集成,您可通过Terraform来创建、管理CFC、BOS、VPC、BCC等多种百度智能云资源,具体请参考Terraform BaiduCloud Provider。
- 私有网络VPC:私有网络VPC(Virtual private Cloud)是一个用户能够自定义的虚拟网络,灵活设置网络地址空间,实现私有网络隔离,多个虚拟网络之间(同城、跨城)稳定高速对等互通。具体信息请参考私有网络VPC。
2、部署过程
- 登录Terraform官网下载适用于您的操作系统的程序包。
- 配置terraform baidu provider信息,配置文件可参考如下的代码,在当前文件夹内保存为version.tf。
terraform {
required_providers {
baiducloud = {
source = "baidubce/baiducloud"
version = "1.14.5" #版本号 可去官网查询版本更新信息
}
}
}
- 执行命令terraform init,Terraform会根据当前文件夹内的version.tf文件初始化工作空间。
-
编辑Terraform配置文件。新建文件main.tf,在文件中指定VPC、私有域、解析记录的元信息。参考配置和步骤如下:
更多参数信息可参考baidu provider官方文档
- 创建VPC
resource "baiducloud_vpc" "test-vpc" {
name = "test_vpc" # VPC名称
description = "test_description" # 描述
cidr = "192.168.0.0/16" # cidr信息
}
- 创建私有域
resource "baiducloud_localdns_privatezone" "my-private-zone" {
zone_name = "terrraform.com" # 私有域名称
}
- 绑定私有域和VPC
resource "baiducloud_localdns_vpc" "bind-zone-vpc" {
# 私有域id 这里使用了上一步创建出来的私有域 也可以直接填入私有域id
zone_id = "${baiducloud_localdns_privatezone.my-private-zone.id}"
# 资源区域
region = "bj"
# 需要绑定的VPCs 一个私有域可绑定多个VPC
vpc_ids = [
"${baiducloud_vpc.default-vpc.id}"
]
}
- 在私有域内创建解析记录
resource "baiducloud_localdns_record" "local-dns-test" {
# 私有域id 这里使用了上一步创建出来的私有域 也可以直接填入私有域id
zone_id = "${baiducloud_localdns_privatezone.my-private-zone.id}"
# 主机记录,不能与已有记录重复,记录值和zone的name长度加在一起不能超过255
rr = "www"
# 解析记录值
value = "1.1.1.1"
# 解析记录类型 目前支持A, AAAA,CNAME, TXT, MX, PTR, SRV
type = "A"
# 解析记录的生存时间
ttl = "3000"
# 解析记录优先级 只有MX类型的解析记录有优先级 其余类型应为0
priority = 0
# 解析记录描述
description = "terraform_test"
# 解析记录状态 应为 enable 或者 pause
status = "enable"
}
完整的配置文件信息可参考如下代码:
provider "baiducloud" {
access_key = "<YOUR_BAIDUCLOUD_ACCESS_KEY>"
secret_key = "<YOUR_BAIDUCLOUD_SECRET_KEY>"
region = "bj"
}
# 1.创建VPC
resource "baiducloud_vpc" "test-vpc" {
name = "test_vpc"
description = "test_description"
cidr = "192.168.0.0/16"
tags = {
"testKey" = "testValue"
"testKey2" = "testValue2"
}
}
# 2.创建私有域
resource "baiducloud_localdns_privatezone" "my-private-zone" {
zone_name = "terrraform.com"
}
# 3.私有域和VPC绑定
resource "baiducloud_localdns_vpc" "bind-zone-vpc" {
zone_id = "${baiducloud_localdns_privatezone.my-private-zone.id}"
region = "bj"
vpc_ids = [
"${baiducloud_vpc.test-vpc.id}"
]
}
# 4.创建解析记录
resource "baiducloud_localdns_record" "local-dns-test" {
zone_id = "${baiducloud_localdns_privatezone.my-private-zone.id}"
rr = "www"
value = "1.1.1.1"
type = "A"
ttl = "3000"
priority = 0
description = "terraform_test"
status = "enable"
}
- 执行命令terraform plan,Terraform会根据当前配置文件中的信息列出资源变更计划。
- 执行命令terraform apply,根据提示输入yes,即自动执行资源创建。
3、查询云上资源详细信息
可使用Terraform的datasource进行云上资源详细信息的查询,并且支持关键字过滤,步骤如下:
- 编写配置文件
- VPC列表查询
data "baiducloud_vpcs" "default" {
vpc_id = "id" # id非必填 不填时查询所有
# 可根据提供的字段值的正则表达在结果中过滤 以下示例为查询 name = tf-test-acc* 的VPCs
filter {
name = "name"
values = ["tf-test-acc*"]
}
}
- 私有域信息查询
data "baiducloud_localdns_privatezones" "default" {
# 非必填
filter {
name = "name"
values = ["tf-test-zone*"]
}
}
- 查询私有域绑定的VPC列表
data "baiducloud_localdns_vpcs" "default" {
zone_id = "id" #私有域id 必填
}
- 私有域内解析记录详细信息查询
data "baiducloud_localdns_records" "local-dns-data" {
zone_id = "id" #私有域id 必填
# 非必填
filter {
name = "description"
values = ["terraform_test"]
}
}
- 执行terraform apply。
- 输入命令terraform show查看结果。
4、资源删除
可使用如下命令进行资源的删除:
#命令默认会释放当前main.tf中的所有资源
terraform destroy
#可以通过 -target 选项销毁特定的资源,格式为:-target=<资源类型>.<资源名称>,例如:
terraform destroy -target baiducloud_vpc.test-vpc
5、测试验证
在完成全部配置后,可在VPC内创建两台BCC,去测试是否能够通过内网DNS解析记录去获得正确的IP地址。参考思路如下:
- 通过步骤2的部署过程搭建出内网DNS服务。
- 在VPC内创建两台BCC。
- 添加一条解析记录指向其中的一台BCC。
- 在另一台BCC内通过Ping命令,查看是否能够通过域名解析获得IP地址。
至此,成功通过Terraform建立私有域名解析服务。
总结
借助Terraform,您可以一键搭建私有域名解析服务,快速配置VPC、私有域、解析记录等多种资源,实现内网DNS解析服务的的快速建立。