|
| 1 | +#!/bin/bash |
| 2 | +#Get Subscription ID and Azure service principal as input. It is used as default for controller, SQL Server Master instance (sa account) and Knox. |
| 3 | +# |
| 4 | +while true; do |
| 5 | + read -s -p "Your Azure Subscription: " subscription |
| 6 | + echo |
| 7 | + read -s -p "Your Resource Group Name: " resourcegroup |
| 8 | + echo |
| 9 | + read -s -p "In which region you're deploying: " region |
| 10 | + echo |
| 11 | + read -s -p "Your Azure service principal ID: " sp_id |
| 12 | + echo |
| 13 | + read -s -p "Your Azure service principal Password: " sp_pwd |
| 14 | +done |
| 15 | + |
| 16 | +#Define a set of environment variables to be used in resource creations. |
| 17 | +export SUBID=$subscription |
| 18 | + |
| 19 | +export REGION_NAME=$region |
| 20 | +export RESOURCE_GROUP=$resourcegroup |
| 21 | +export SUBNET_NAME=aks-subnet |
| 22 | +export VNET_NAME=bdc-vnet |
| 23 | +export AKS_NAME=bdcaksprivatecluster |
| 24 | +export FWNAME=bdcaksazfw |
| 25 | +export FWPUBIP=$FWNAME-ip |
| 26 | +export FWIPCONFIG_NAME=$FWNAME-config |
| 27 | + |
| 28 | +export FWROUTE_TABLE_NAME=bdcaks-rt |
| 29 | +export FWROUTE_NAME=bdcaksroute |
| 30 | +export FWROUTE_NAME_INTERNET=bdcaksrouteinet |
| 31 | + |
| 32 | +#Set Azure subscription current in use |
| 33 | +az account set --subscription $subscription |
| 34 | + |
| 35 | +#Create Azure Resource Group |
| 36 | +az group create -n $RESOURCE_GROUP -l $REGION_NAME |
| 37 | + |
| 38 | +#Create Azure Virtual Network to host your AKS cluster |
| 39 | +az network vnet create \ |
| 40 | + --resource-group $RESOURCE_GROUP \ |
| 41 | + --location $REGION_NAME \ |
| 42 | + --name $VNET_NAME \ |
| 43 | + --address-prefixes 10.0.0.0/8 \ |
| 44 | + --subnet-name $SUBNET_NAME \ |
| 45 | + --subnet-prefix 10.1.0.0/16 |
| 46 | + |
| 47 | + |
| 48 | +SUBNET_ID=$(az network vnet subnet show \ |
| 49 | + --resource-group $RESOURCE_GROUP \ |
| 50 | + --vnet-name $VNET_NAME \ |
| 51 | + --name $SUBNET_NAME \ |
| 52 | + --query id -o tsv) |
| 53 | + |
| 54 | + |
| 55 | +#Add Azure firewall extension |
| 56 | +az extension add --name azure-firewall |
| 57 | + |
| 58 | +#Dedicated subnet for Azure Firewall (Firewall name cannot be changed) |
| 59 | +az network vnet subnet create \ |
| 60 | + --resource-group $RESOURCE_GROUP \ |
| 61 | + --vnet-name $VNET_NAME \ |
| 62 | + --name AzureFirewallSubnet \ |
| 63 | + --address-prefix 10.2.0.0/24 |
| 64 | + |
| 65 | +#Create Azure firewall |
| 66 | +az network firewall create -g $RESOURCE_GROUP -n $FWNAME -l $REGION_NAME --enable-dns-proxy true |
| 67 | + |
| 68 | +#Create public IP for Azure Firewall |
| 69 | +az network public-ip create -g $RESOURCE_GROUP -n $FWPUBIP -l $REGION_NAME --sku "Standard" |
| 70 | + |
| 71 | +#Create IP configurations for Azure Firewall |
| 72 | +az network firewall ip-config create -g $RESOURCE_GROUP -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBIP --vnet-name $VNET_NAME |
| 73 | + |
| 74 | + |
| 75 | +#Getting public and private IP addresses for Azure Firewall |
| 76 | +export FWPUBLIC_IP=$(az network public-ip show -g $RESOURCE_GROUP -n $FWPUBIP --query "ipAddress" -o tsv) |
| 77 | +export FWPRIVATE_IP=$(az network firewall show -g $RESOURCE_GROUP -n $FWNAME --query "ipConfigurations[0].privateIpAddress" -o tsv) |
| 78 | + |
| 79 | +#Create an User defined route table |
| 80 | +az network route-table create -g $RESOURCE_GROUP --name $FWROUTE_TABLE_NAME |
| 81 | + |
| 82 | +#Create User defined routes |
| 83 | +az network route-table route create -g $RESOURCE_GROUP --name $FWROUTE_NAME --route-table-name $FWROUTE_TABLE_NAME --address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address $FWPRIVATE_IP --subscription $SUBID |
| 84 | + |
| 85 | +az network route-table route create -g $RESOURCE_GROUP --name $FWROUTE_NAME_INTERNET --route-table-name $FWROUTE_TABLE_NAME --address-prefix $FWPUBLIC_IP/32 --next-hop-type Internet |
| 86 | + |
| 87 | + |
| 88 | +#Add FW Network Rules |
| 89 | +az network firewall network-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$REGION_NAME" --destination-ports 1194 --action allow --priority 100 |
| 90 | +az network firewall network-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$REGION_NAME" --destination-ports 9000 |
| 91 | +az network firewall network-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwnr' -n 'time' --protocols 'UDP' --source-addresses '*' --destination-fqdns 'ntp.ubuntu.com' --destination-ports 123 |
| 92 | + |
| 93 | +#Add FW Application Rules |
| 94 | +az network firewall application-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwar' -n 'fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100 |
| 95 | + |
| 96 | +#Associate User defined route table (UDR) to AKS cluster where deployed BDC previsouly |
| 97 | +az network vnet subnet update -g $RESOURCE_GROUP --vnet-name $VNET_NAME --name $SUBNET_NAME --route-table $FWROUTE_TABLE_NAME |
| 98 | + |
| 99 | + |
| 100 | + |
| 101 | + |
| 102 | + |
| 103 | +#Create SP and Assign Permission to Virtual Network |
| 104 | +az ad sp create-for-rbac -n "bdcaks-sp" --skip-assignment |
| 105 | + |
| 106 | +export APPID=$sp_id |
| 107 | +export PASSWORD=$sp_pwd |
| 108 | +export VNETID=$(az network vnet show -g $RESOURCE_GROUP --name $VNET_NAME --query id -o tsv) |
| 109 | + |
| 110 | +#Assign SP Permission to VNET |
| 111 | +az role assignment create --assignee $APPID --scope $VNETID --role "Network Contributor" |
| 112 | + |
| 113 | +#Assign SP Permission to route table |
| 114 | +export RTID=$(az network route-table show -g $RESOURCE_GROUP -n $FWROUTE_TABLE_NAME --query id -o tsv) |
| 115 | +az role assignment create --assignee $APPID --scope $RTID --role "Network Contributor" |
| 116 | + |
| 117 | + |
| 118 | +#Create AKS Cluster |
| 119 | +az aks create \ |
| 120 | + --resource-group $RESOURCE_GROUP \ |
| 121 | + --location $REGION_NAME \ |
| 122 | + --name $AKS_NAME \ |
| 123 | + --load-balancer-sku standard \ |
| 124 | + --outbound-type userDefinedRouting \ |
| 125 | + --enable-private-cluster \ |
| 126 | + --network-plugin azure \ |
| 127 | + --vnet-subnet-id $SUBNET_ID \ |
| 128 | + --docker-bridge-address 172.17.0.1/16 \ |
| 129 | + --dns-service-ip 10.2.0.10 \ |
| 130 | + --service-cidr 10.2.0.0/24 \ |
| 131 | + --service-principal $APPID \ |
| 132 | + --client-secret $PASSWORD \ |
| 133 | + --node-vm-size Standard_D13_v2 \ |
| 134 | + --node-count 2 \ |
| 135 | + --generate-ssh-keys |
| 136 | + |
| 137 | + |
| 138 | + |
0 commit comments