Scenarios/AKS-Secure-Baseline-PrivateCluster/Terraform/04-Network-LZ/main.tf (331 lines of code) (raw):

locals { vnetHubId = var.deployingAllInOne == true ? var.vnetHubId : data.azurerm_virtual_network.vnethub.0.id firewallPrivateIp = var.deployingAllInOne == true ? var.firewallPrivateIp : data.azurerm_firewall.firewall.0.ip_configuration.0.private_ip_address } data "azurerm_virtual_network" "vnethub" { count = var.deployingAllInOne == true ? 0 : 1 name = var.vnetHubName resource_group_name = var.rgHubName } data "azurerm_firewall" "firewall" { count = var.deployingAllInOne == true ? 0 : 1 name = "azureFirewall" resource_group_name = var.rgHubName } # rg ensures we have unique CAF compliant names for our resources. module "naming" { source = "Azure/naming/azurerm" version = "~> 0.3" suffix = ["lz"] } # rg is required for resource modules resource "azurerm_resource_group" "rg" { location = var.location name = var.rgLzName } module "avm-res-network-routetable" { source = "Azure/avm-res-network-routetable/azurerm" version = "0.2.0" resource_group_name = azurerm_resource_group.rg.name name = var.rtLzName location = azurerm_resource_group.rg.location depends_on = [azurerm_resource_group.rg] routes = { route1 = { name = "aks-to-internet" address_prefix = var.routeAddr next_hop_type = "VirtualAppliance" next_hop_in_ip_address = local.firewallPrivateIp } } } locals { appgw_nsg_rules = { "rule01" = { name = "Allow443InBound" access = "Allow" destination_address_prefix = "*" destination_port_range = "443" direction = "Inbound" priority = 100 protocol = "Tcp" source_address_prefix = "*" source_port_range = "*" } "rule02" = { name = "AllowControlPlaneV2SKU" access = "Allow" destination_address_prefix = "*" destination_port_ranges = ["65200-65535"] direction = "Inbound" priority = 200 protocol = "Tcp" source_address_prefix = "GatewayManager" source_port_range = "*" } "rule03" = { name = "Allow80InBound" access = "Allow" destination_address_prefix = "*" destination_port_ranges = ["80"] direction = "Inbound" priority = 300 protocol = "Tcp" source_address_prefix = "*" source_port_range = "*" } } } module "avm-nsg-default" { source = "Azure/avm-res-network-networksecuritygroup/azurerm" version = "0.2.0" name = var.nsgLzDefaultName resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location } module "avm-nsg-appgw" { source = "Azure/avm-res-network-networksecuritygroup/azurerm" version = "0.2.0" name = var.nsgAppGWName resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location security_rules = local.appgw_nsg_rules } module "avm-res-network-vnet" { source = "Azure/avm-res-network-virtualnetwork/azurerm" version = "0.2.4" resource_group_name = azurerm_resource_group.rg.name address_space = [var.spokeVNETaddPrefixes] location = azurerm_resource_group.rg.location name = var.vnetLzName dns_servers = { dns_servers = [local.firewallPrivateIp] } subnets = { default = { name = "default" address_prefixes = [var.snetDefaultAddr] network_security_group = { id = module.avm-nsg-default.resource.id } route_table = { id = module.avm-res-network-routetable.resource.id } } } } module "avm-res-network-vnet-aks-subnet" { source = "Azure/avm-res-network-virtualnetwork/azurerm//modules/subnet" version = "0.4.0" name = "snet-aks" virtual_network = { resource_id = module.avm-res-network-vnet.resource.id } address_prefixes = [var.snetAksAddr] route_table = { id = module.avm-res-network-routetable.resource.id } network_security_group = { id = module.avm-nsg-default.resource.id } depends_on = [module.avm-res-network-vnet.resource] } module "avm-res-network-vnet-appgw-subnet" { source = "Azure/avm-res-network-virtualnetwork/azurerm//modules/subnet" version = "0.4.0" name = "snet-appgw" virtual_network = { resource_id = module.avm-res-network-vnet.resource.id } address_prefixes = [var.snetAppGWAddr] network_security_group = { id = module.avm-nsg-appgw.resource.id } depends_on = [module.avm-res-network-vnet.resource] } module "avm-res-network-vnet-vm-subnet" { source = "Azure/avm-res-network-virtualnetwork/azurerm//modules/subnet" version = "0.4.0" name = "snet-vm" virtual_network = { resource_id = module.avm-res-network-vnet.resource.id } address_prefixes = [var.snetVMAddr] route_table = { id = module.avm-res-network-routetable.resource.id } network_security_group = { id = module.avm-nsg-default.resource.id } depends_on = [module.avm-res-network-vnet.resource] } module "avm-res-network-vnet-spe-subnet" { source = "Azure/avm-res-network-virtualnetwork/azurerm//modules/subnet" version = "0.4.0" name = "snet-spe" virtual_network = { resource_id = module.avm-res-network-vnet.resource.id } address_prefixes = [var.snetServicePeAddr] route_table = { id = module.avm-res-network-routetable.resource.id } network_security_group = { id = module.avm-nsg-default.resource.id } depends_on = [module.avm-res-network-vnet.resource] } module "avm-res-network-vnet-peering" { source = "Azure/avm-res-network-virtualnetwork/azurerm//modules/peering" version = "0.2.4" virtual_network = { resource_id = module.avm-res-network-vnet.resource.id } remote_virtual_network = { resource_id = local.vnetHubId } name = "local-to-remote" allow_forwarded_traffic = true allow_gateway_transit = true allow_virtual_network_access = true use_remote_gateways = false create_reverse_peering = true reverse_name = "remote-to-local" reverse_allow_forwarded_traffic = false reverse_allow_gateway_transit = false reverse_allow_virtual_network_access = true reverse_use_remote_gateways = false } locals { domain_name = { akv = "privatelink.vaultcore.azure.net", acr = "privatelink.azurecr.io", aks = "azmk8s.io" contoso = "private.contoso.com" AzureUSGovernment = ".cx.aks.containerservice.azure.us" AzureChinaCloud = ".cx.prod.service.azk8s.cn" AzureGermanCloud = "" //TODO: what is the correct value here? } } module "avm-res-network-privatednszone-aks" { source = "Azure/avm-res-network-privatednszone/azurerm" version = "0.1.2" resource_group_name = azurerm_resource_group.rg.name domain_name = "privatelink.${var.location}.${local.domain_name.aks}" virtual_network_links = { vnetlink = { vnetlinkname = "vlink-ak" vnetid = local.vnetHubId autoregistration = false } } } module "avm-res-network-privatednszone-akv" { source = "Azure/avm-res-network-privatednszone/azurerm" version = "0.1.2" resource_group_name = azurerm_resource_group.rg.name domain_name = local.domain_name.akv virtual_network_links = { vnetlink = { vnetlinkname = "vlink-akv" vnetid = local.vnetHubId autoregistration = false } } } module "avm-res-network-privatednszone-acr" { source = "Azure/avm-res-network-privatednszone/azurerm" version = "0.1.2" resource_group_name = azurerm_resource_group.rg.name domain_name = local.domain_name.acr virtual_network_links = { vnetlink = { vnetlinkname = "vlink-acr" vnetid = local.vnetHubId autoregistration = false } } } module "avm-res-network-privatednszone-contoso" { source = "Azure/avm-res-network-privatednszone/azurerm" version = "0.1.2" resource_group_name = azurerm_resource_group.rg.name domain_name = local.domain_name.contoso virtual_network_links = { vnetlink = { vnetlinkname = "vlink-contoso" vnetid = local.vnetHubId autoregistration = false } } } module "avm-res-network-appgw" { source = "Azure/avm-res-network-applicationgateway/azurerm" version = "0.1.1" resource_group_name = azurerm_resource_group.rg.name name = "appgw" location = azurerm_resource_group.rg.location public_ip_name = "pip-appgw" vnet_name = module.avm-res-network-vnet.resource.name subnet_name_backend = module.avm-res-network-vnet-appgw-subnet.resource.name sku = { name = "Standard_v2" tier = "Standard_v2" capacity = 0 } autoscale_configuration = { min_capacity = 1 max_capacity = 2 } frontend_ports = { frontend-port-80 = { name = "frontend-port-80" port = 80 } } probe_configurations = { appGatewayProbe = { name = "appGatewayProbe" protocol = "Http" path = "/healthz" host = local.domain_name.contoso interval = 30 timeout = 30 unhealthy_threshold = 3 } } backend_address_pools = { appGatewayBackendPool = { name = "appGatewayBackendPool" # ip_addresses = ["10.0.1.6"] fqdns = [local.domain_name.contoso] } } backend_http_settings = { appGatewayBackendHttpSettings = { name = "appGatewayBackendHttpSettings" cookie_based_affinity = "Disabled" path = "/" enable_https = false request_timeout = 30 pick_host_name_from_backend_address = true probe_name = "appGatewayProbe" connection_draining = { enable_connection_draining = true drain_timeout_sec = 300 } } } http_listeners = { appGatewayHttpListener = { name = "appGatewayHttpListener" host_name = null frontend_port_name = "frontend-port-80" } } request_routing_rules = { routing-rule-1 = { name = "rule-1" rule_type = "Basic" http_listener_name = "appGatewayHttpListener" backend_address_pool_name = "appGatewayBackendPool" backend_http_settings_name = "appGatewayBackendHttpSettings" priority = 100 } } zones = ["1", "2", "3"] depends_on = [module.avm-res-network-vnet-appgw-subnet.resource] }