Skapa ett virtuellt hubbnätverk i Azure med terraform
Terraform möjliggör definition, förhandsversion och distribution av molninfrastruktur. Med Terraform skapar du konfigurationsfiler med hjälp av HCL-syntax. Med HCL-syntaxen kan du ange molnleverantören – till exempel Azure – och de element som utgör din molninfrastruktur. När du har skapat konfigurationsfilerna skapar du en körningsplan som gör att du kan förhandsgranska ändringarna i infrastrukturen innan de distribueras. När du har verifierat ändringarna tillämpar du körningsplanen för att distribuera infrastrukturen.
Det virtuella hubbnätverket fungerar som den centrala anslutningspunkten till det lokala nätverket. Det virtuella nätverket är värd för delade tjänster som används av arbetsbelastningar som finns i de virtuella ekernätverken. I demosyfte implementeras inga delade tjänster i den här artikeln.
I den här artikeln kan du se hur du:
- Implementera det virtuella hubbnätverket i en topologi med nav och eker.
- Skapa en virtuell nav jumpbox-dator.
- Skapa en virtuell virtuell nätverksgateway för hubb.
- Skapa hubbanslutningar och lokala gatewayanslutningar.
1. Konfigurera din miljö
- Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Konfigurera Terraform: Om du inte redan har gjort det konfigurerar du Terraform med något av följande alternativ:
2. Implementera Terraform-koden
Hubbnätverket består av följande komponenter:
- Ett virtuellt navnätverk
- En virtuell nätverksgateway för hubb
- Hubbgatewayanslutningar
Gör den exempelkatalog som skapades i den första artikeln i den här serien till den aktuella katalogen.
I exempelkatalogen skapar du en fil med namnet
hub-vnet.tf
.Infoga följande kod:
locals { prefix-hub = "hub" hub-location = "eastus" hub-resource-group = "hub-vnet-rg" shared-key = "4-v3ry-53cr37-1p53c-5h4r3d-k3y" } resource "azurerm_resource_group" "hub-vnet-rg" { name = local.hub-resource-group location = local.hub-location } resource "azurerm_virtual_network" "hub-vnet" { name = "${local.prefix-hub}-vnet" location = azurerm_resource_group.hub-vnet-rg.location resource_group_name = azurerm_resource_group.hub-vnet-rg.name address_space = ["10.0.0.0/16"] tags = { environment = "hub-spoke" } } resource "azurerm_subnet" "hub-gateway-subnet" { name = "GatewaySubnet" resource_group_name = azurerm_resource_group.hub-vnet-rg.name virtual_network_name = azurerm_virtual_network.hub-vnet.name address_prefixes = ["10.0.255.224/27"] } resource "azurerm_subnet" "hub-mgmt" { name = "mgmt" resource_group_name = azurerm_resource_group.hub-vnet-rg.name virtual_network_name = azurerm_virtual_network.hub-vnet.name address_prefixes = ["10.0.0.64/27"] } resource "azurerm_subnet" "hub-dmz" { name = "dmz" resource_group_name = azurerm_resource_group.hub-vnet-rg.name virtual_network_name = azurerm_virtual_network.hub-vnet.name address_prefixes = ["10.0.0.32/27"] } resource "azurerm_network_interface" "hub-nic" { name = "${local.prefix-hub}-nic" location = azurerm_resource_group.hub-vnet-rg.location resource_group_name = azurerm_resource_group.hub-vnet-rg.name enable_ip_forwarding = true ip_configuration { name = local.prefix-hub subnet_id = azurerm_subnet.hub-mgmt.id private_ip_address_allocation = "Dynamic" } tags = { environment = local.prefix-hub } } #Virtual Machine resource "azurerm_virtual_machine" "hub-vm" { name = "${local.prefix-hub}-vm" location = azurerm_resource_group.hub-vnet-rg.location resource_group_name = azurerm_resource_group.hub-vnet-rg.name network_interface_ids = [azurerm_network_interface.hub-nic.id] vm_size = var.vmsize storage_image_reference { publisher = "Canonical" offer = "UbuntuServer" sku = "16.04-LTS" version = "latest" } storage_os_disk { name = "myosdisk1" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" } os_profile { computer_name = "${local.prefix-hub}-vm" admin_username = var.username admin_password = var.password } os_profile_linux_config { disable_password_authentication = false } tags = { environment = local.prefix-hub } } # Virtual Network Gateway resource "azurerm_public_ip" "hub-vpn-gateway1-pip" { name = "hub-vpn-gateway1-pip" location = azurerm_resource_group.hub-vnet-rg.location resource_group_name = azurerm_resource_group.hub-vnet-rg.name allocation_method = "Dynamic" } resource "azurerm_virtual_network_gateway" "hub-vnet-gateway" { name = "hub-vpn-gateway1" location = azurerm_resource_group.hub-vnet-rg.location resource_group_name = azurerm_resource_group.hub-vnet-rg.name type = "Vpn" vpn_type = "RouteBased" active_active = false enable_bgp = false sku = "VpnGw1" ip_configuration { name = "vnetGatewayConfig" public_ip_address_id = azurerm_public_ip.hub-vpn-gateway1-pip.id private_ip_address_allocation = "Dynamic" subnet_id = azurerm_subnet.hub-gateway-subnet.id } depends_on = [azurerm_public_ip.hub-vpn-gateway1-pip] } resource "azurerm_virtual_network_gateway_connection" "hub-onprem-conn" { name = "hub-onprem-conn" location = azurerm_resource_group.hub-vnet-rg.location resource_group_name = azurerm_resource_group.hub-vnet-rg.name type = "Vnet2Vnet" routing_weight = 1 virtual_network_gateway_id = azurerm_virtual_network_gateway.hub-vnet-gateway.id peer_virtual_network_gateway_id = azurerm_virtual_network_gateway.onprem-vpn-gateway.id shared_key = local.shared-key } resource "azurerm_virtual_network_gateway_connection" "onprem-hub-conn" { name = "onprem-hub-conn" location = azurerm_resource_group.onprem-vnet-rg.location resource_group_name = azurerm_resource_group.onprem-vnet-rg.name type = "Vnet2Vnet" routing_weight = 1 virtual_network_gateway_id = azurerm_virtual_network_gateway.onprem-vpn-gateway.id peer_virtual_network_gateway_id = azurerm_virtual_network_gateway.hub-vnet-gateway.id shared_key = local.shared-key }
Felsöka Terraform i Azure
Felsöka vanliga problem när du använder Terraform i Azure
Nästa steg
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för