使用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。
Plain Text
1 terraform {
2 required_providers {
3 baiducloud = {
4 source = "baidubce/baiducloud"
5 version = "1.14.5" #版本号 可去官网查询版本更新信息
6 }
7 }
8 }
- 执行命令terraform init,Terraform会根据当前文件夹内的version.tf文件初始化工作空间。
-
编辑Terraform配置文件。新建文件main.tf,在文件中指定VPC、私有域、解析记录的元信息。参考配置和步骤如下:
更多参数信息可参考baidu provider官方文档
- 创建VPC
Plain Text
1 resource "baiducloud_vpc" "test-vpc" {
2 name = "test_vpc" # VPC名称
3 description = "test_description" # 描述
4 cidr = "192.168.0.0/16" # cidr信息
5 }
- 创建私有域
Plain Text
1 resource "baiducloud_localdns_privatezone" "my-private-zone" {
2 zone_name = "terrraform.com" # 私有域名称
3 }
- 绑定私有域和VPC
Plain Text
1 resource "baiducloud_localdns_vpc" "bind-zone-vpc" {
2 # 私有域id 这里使用了上一步创建出来的私有域 也可以直接填入私有域id
3 zone_id = "${baiducloud_localdns_privatezone.my-private-zone.id}"
4 # 资源区域
5 region = "bj"
6 # 需要绑定的VPCs 一个私有域可绑定多个VPC
7 vpc_ids = [
8 "${baiducloud_vpc.default-vpc.id}"
9 ]
10 }
- 在私有域内创建解析记录
Plain Text
1 resource "baiducloud_localdns_record" "local-dns-test" {
2 # 私有域id 这里使用了上一步创建出来的私有域 也可以直接填入私有域id
3 zone_id = "${baiducloud_localdns_privatezone.my-private-zone.id}"
4 # 主机记录,不能与已有记录重复,记录值和zone的name长度加在一起不能超过255
5 rr = "www"
6 # 解析记录值
7 value = "1.1.1.1"
8 # 解析记录类型 目前支持A, AAAA,CNAME, TXT, MX, PTR, SRV
9 type = "A"
10 # 解析记录的生存时间
11 ttl = "3000"
12 # 解析记录优先级 只有MX类型的解析记录有优先级 其余类型应为0
13 priority = 0
14 # 解析记录描述
15 description = "terraform_test"
16 # 解析记录状态 应为 enable 或者 pause
17 status = "enable"
18 }
完整的配置文件信息可参考如下代码:
Plain Text
1 provider "baiducloud" {
2 access_key = "<YOUR_BAIDUCLOUD_ACCESS_KEY>"
3 secret_key = "<YOUR_BAIDUCLOUD_SECRET_KEY>"
4 region = "bj"
5 }
6 # 1.创建VPC
7 resource "baiducloud_vpc" "test-vpc" {
8 name = "test_vpc"
9 description = "test_description"
10 cidr = "192.168.0.0/16"
11 tags = {
12 "testKey" = "testValue"
13 "testKey2" = "testValue2"
14 }
15 }
16 # 2.创建私有域
17 resource "baiducloud_localdns_privatezone" "my-private-zone" {
18 zone_name = "terrraform.com"
19 }
20 # 3.私有域和VPC绑定
21 resource "baiducloud_localdns_vpc" "bind-zone-vpc" {
22 zone_id = "${baiducloud_localdns_privatezone.my-private-zone.id}"
23 region = "bj"
24 vpc_ids = [
25 "${baiducloud_vpc.test-vpc.id}"
26 ]
27 }
28 # 4.创建解析记录
29 resource "baiducloud_localdns_record" "local-dns-test" {
30 zone_id = "${baiducloud_localdns_privatezone.my-private-zone.id}"
31 rr = "www"
32 value = "1.1.1.1"
33 type = "A"
34 ttl = "3000"
35 priority = 0
36 description = "terraform_test"
37 status = "enable"
38 }
39
- 执行命令terraform plan,Terraform会根据当前配置文件中的信息列出资源变更计划。
- 执行命令terraform apply,根据提示输入yes,即自动执行资源创建。
3、查询云上资源详细信息
可使用Terraform的datasource进行云上资源详细信息的查询,并且支持关键字过滤,步骤如下:
- 编写配置文件
- VPC列表查询
Plain Text
1 data "baiducloud_vpcs" "default" {
2 vpc_id = "id" # id非必填 不填时查询所有
3 # 可根据提供的字段值的正则表达在结果中过滤 以下示例为查询 name = tf-test-acc* 的VPCs
4 filter {
5 name = "name"
6 values = ["tf-test-acc*"]
7 }
8 }
- 私有域信息查询
Plain Text
1 data "baiducloud_localdns_privatezones" "default" {
2 # 非必填
3 filter {
4 name = "name"
5 values = ["tf-test-zone*"]
6 }
7 }
- 查询私有域绑定的VPC列表
Plain Text
1 data "baiducloud_localdns_vpcs" "default" {
2 zone_id = "id" #私有域id 必填
3 }
- 私有域内解析记录详细信息查询
Plain Text
1 data "baiducloud_localdns_records" "local-dns-data" {
2 zone_id = "id" #私有域id 必填
3 # 非必填
4 filter {
5 name = "description"
6 values = ["terraform_test"]
7 }
8 }
- 执行terraform apply。
- 输入命令terraform show查看结果。
4、资源删除
可使用如下命令进行资源的删除:
Plain Text
1 #命令默认会释放当前main.tf中的所有资源
2 terraform destroy
3 #可以通过 -target 选项销毁特定的资源,格式为:-target=<资源类型>.<资源名称>,例如:
4 terraform destroy -target baiducloud_vpc.test-vpc
5、测试验证
在完成全部配置后,可在VPC内创建两台BCC,去测试是否能够通过内网DNS解析记录去获得正确的IP地址。参考思路如下:
- 通过步骤2的部署过程搭建出内网DNS服务。
- 在VPC内创建两台BCC。
- 添加一条解析记录指向其中的一台BCC。
- 在另一台BCC内通过Ping命令,查看是否能够通过域名解析获得IP地址。
至此,成功通过Terraform建立私有域名解析服务。
总结
借助Terraform,您可以一键搭建私有域名解析服务,快速配置VPC、私有域、解析记录等多种资源,实现内网DNS解析服务的的快速建立。