使用 Terraform 在 Azure 中创建中心辐射型混合网络拓扑
使用 Terraform 可以定义、预览和部署云基础结构。 使用 Terraform 时,请使用 HCL 语法来创建配置文件。 利用 HCL 语法,可指定 Azure 这样的云提供程序和构成云基础结构的元素。 创建配置文件后,请创建一个执行计划,利用该计划,可在部署基础结构更改之前先预览这些更改。 验证了更改后,请应用该执行计划以部署基础结构。
本系列文章介绍如何使用 Terraform 在 Azure 中实现 中心辐射型网络拓扑。
使用中心辐射型拓扑可以隔离工作负荷,同时共享公用的服务。 这些服务包括标识和安全性。 中心是一个虚拟网络 (VNet),充当本地网络的中心连接点。 辐射是与中心对等互连的 VNet。 共享服务部署在中心内,而各个工作负荷部署在辐射网络内。
在本文中,学习如何:
- 布局中心辐射型混合网络参考体系结构资源
- 创建中心网络设备资源
- 在 Azure 中创建中心网络,以充当所有资源的共同点
- 在 Azure 中以分支 VNet 的形式创建单个工作负载
- 在本地和 Azure 网络之间建立网关和连接
- 创建辐射网络的 VNet 对等互连
1.配置环境
- Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
配置 Terraform:如果尚未这样做,请使用以下选项之一配置 Terraform:
2. 了解中心辐射型拓扑体系结构
在中心辐射型拓扑中,中心是一个 VNet。 该 VNet 充当本地网络的中心连接点。 分支是与中心对等互连的 VNet,可用于隔离工作负荷。 流量通过 ExpressRoute 或 VPN 网关连接在本地数据中心与中心之间流动。 下图演示了中心辐射型拓扑中的组件:
中心辐射型拓扑的优势
使用中心辐射型网络拓扑可以隔离工作负荷,同时共享公用的服务。 这些服务包括标识和安全性。 中心是一个 VNet,充当本地网络的中心连接点。 辐射是与中心对等互连的 VNet。 共享服务部署在中心内,而各个工作负荷部署在辐射网络内。 下面是中心辐射型网络拓扑的某些优势:
- 成本节省 - 将服务集中到可由多个工作负荷共享的单个位置。 这些工作负荷包括网络虚拟设备和 DNS 服务器。
- 克服订阅限制 - 通过将不同订阅中的 Vnet 对等互连到中心。
- 关注点隔离(在中心 IT(SecOps、InfraOps)与工作负荷 (DevOps) 之间)。
中心辐射型体系结构的典型用法
中心辐射型体系结构的某些典型用法包括:
- 许多客户在不同的环境中部署了工作负荷。 这些环境包括开发、测试和生产。 这些工作负荷经常需要共享 DNS、IDS、NTP 或 AD DS 等服务。 可将这些共享的服务放在中心 VNet 中。 这样,每个环境将部署到辐射网络以保持隔离性。
- 工作负荷不需要彼此连接,但需要访问共享的服务。
- 企业需要在安全方面进行集中控制。
- 企业需要对每个辐射网络中的工作负荷进行隔离式的管理。
3. 预览演示组件
在浏览本系列中的每篇文章时,不同的 Terraform 脚本中定义了各种组件。 创建并部署的演示体系结构包括以下组件:
本地网络。 组织中运行的专用局域网。 对于中心辐射型参考体系结构,Azure 中的 VNet 将用于模拟本地网络。
VPN 设备。 用于与本地网络建立外部连接的 VPN 设备或服务。 VPN 设备可以是硬件设备,也可以是软件解决方案。
中心 VNet。 中心是本地网络的中心连接点,也是服务的托管位置。 这些服务可供辐射 VNet 中托管的不同工作负荷使用。
网关子网。 VNet 网关保留在同一子网中。
辐射 VNet。 辐射可以用来隔离其自己的 VNet 中的工作负荷,独立于其他辐射进行管理。 每个工作负荷可以包括多个层,并具有通过 Azure 负载均衡器连接的多个子网。
VNet 对等互连。 可以使用对等互连来连接两个 VNet。 对等互连连接是 VNet 之间的不可传递低延迟连接。 对等互连后,VNet 将使用 Azure 主干交换流量,而无需路由器。 在中心辐射型网络拓扑中,使用 VNet 对等互连将中心连接到每个辐射。 可以对等互连相同区域或不同区域中的 VNet。
4. 实现 Terraform 代码
创建一个目录以包含整个多篇文章系列的示例代码。
创建名为
main.tf
的文件并插入下列代码:terraform { required_version = ">=0.12" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>2.0" } } } provider "azurerm" { features {} }
创建名为
variables.tf
的文件来包含项目变量,并插入以下代码:variable "location" { description = "Location of the network" default = "eastus" } variable "username" { description = "Username for Virtual Machines" default = "azureuser" } variable "password" { description = "Password for Virtual Machines" } variable "vmsize" { description = "Size of the VMs" default = "Standard_DS1_v2" }
要点:
- 本文使用在调用
terraform plan
时输入的密码。 在实际应用中,可以考虑使用 SSH 公钥/私钥对。 - 有关 SSH 密钥和 Azure 的详细信息,请参阅如何在 Azure 上将 SSH 密钥与 Windows 配合使用。
- 本文使用在调用
Azure 上的 Terraform 故障排除
排查在 Azure 上使用 Terraform 时遇到的常见问题