【问题标题】:Azure Terraform Hub and Spoke with multiple subscriptions具有多个订阅的 Azure Terraform Hub 和 Spoke
【发布时间】:2020-10-16 20:36:18
【问题描述】:

我想在多个订阅中使用 terraform 部署 Azure 登陆区,Hub 网络应该在订阅 1 中有 azure 防火墙,并且每个辐条有不同的订阅,我需要 4 个辐条,它们将部署在 4 个单独的订阅中。

谁能帮我解释一下逻辑,如何编写 terraform。

【问题讨论】:

标签: azure terraform terraform-provider-azure


【解决方案1】:

根据您的要求,这里是您可以关注的architecture。 Hub 和 Spoke 通过 VNet Peering 连接。根据描述:

虚拟网络可以在相同或不同的订阅中。 当您在不同订阅中对等虚拟网络时,两者 订阅可以关联到相同或不同的 Azure Active 目录租户。

因此,您可以在两个不同的订阅中对等 VNet。我假设您使用 Azure CLI 作为您的帐户已经登录的身份验证,并且在两个订阅中都具有足够的权限。这是一个示例代码:

provider "azurerm" {
  features {}

  alias = "subscription1"

  subscription_id = "xxxxxxx"
}

provider "azurerm" {
  features {}

  alias = "subscription2"

  subscription_id = "xxxxxxx"
}

data "azurerm_virtual_network" "remote" {
  provider = azurerm.subscription1
  name = "remote_vnet_name"
  resource_group_name = "remote_group_name"
}

data "azurerm_virtual_network" "vnet" {
  provider = azurerm.subscription2
  name = "vnet_name"
  resource_group_name = "group_name"
}

resource "azurerm_virtual_network_peering" "peering" {
  provider = azurerm.subscription2
  name                         = "${data.azurerm_virtual_network.vnet.name}-to-${data.azurerm_virtual_network.remote.name}"
  resource_group_name          = "group_name"
  virtual_network_name         = data.azurerm_virtual_network.vnet.name
  remote_virtual_network_id    = data.azurerm_virtual_network.remote.id
  allow_virtual_network_access = true
  allow_forwarded_traffic      = true

  # `allow_gateway_transit` must be set to false for vnet Global Peering
  allow_gateway_transit = false
}

resource "azurerm_virtual_network_peering" "peering1" {
  provider = azurerm.subscription1
  name                         = "${data.azurerm_virtual_network.remote.name}-to-${data.azurerm_virtual_network.vnet.name}"
  resource_group_name          = "remote_group_name"
  virtual_network_name         = data.azurerm_virtual_network.remote.name
  remote_virtual_network_id    = data.azurerm_virtual_network.vnet.id
  allow_virtual_network_access = true
  allow_forwarded_traffic      = true

  # `allow_gateway_transit` must be set to false for vnet Global Peering
  allow_gateway_transit = false
}

VNet 对等始终附带一对。因此,您需要为对等互连中不同订阅中的每个 VNet 创建对等互连。此示例仅向您展示如何为不同订阅中的两个 VNet 创建对等互连。然后你就可以在 Terraform 中如你所愿地完成整个架构了。

【讨论】:

  • 是的,这是好查尔斯。但我想通过 azure devops 管道部署这个 terraform 模板。在那种情况下如何管理订阅?
  • @G.Prashanth 我认为是一样的。
  • 当我遵循相同的方式时,我遇到了身份验证错误 charles。
  • @G.Prashanth 你得到什么错误?权限被拒绝?
  • 嗨,查尔斯,我收到“发生错误”的消息,就是这样。我没有收到具体的错误消息,在 azure devops 管道中遇到 terraform plan 错误。
猜你喜欢
  • 2019-01-13
  • 2014-06-25
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 2016-08-30
  • 2022-10-20
  • 2016-06-27
  • 1970-01-01
相关资源
最近更新 更多