Self-managed Kubernetes on Azure

Published Mar 23 2022 08:32 AM 2,740 Views
Microsoft

Introduction

Cluster API is a Kubernetes community project started by the Kubernetes Special Interest Group (SIG) which brings declarative, Kubernetes-style APIs to cluster creation, configuration and management.

The supporting infrastructure on Azure for K8s cluster - like Virtual Machines, Virtual Networks, Load Balancers etc. as well as the Kubernetes cluster configuration are all defined through an YAML configuration file - thus making the K8s management seamless and easy for Infrastructure Architects across various environments.

 

High Level Architecture

capz-hla.png

 

Components

Management Cluster

  • Works as the deployment plane for the CAPZ cluster

  • This can be any K8s cluster and can be a simple, light-weight one - e.g. Kind, MicroK8s etc. This article uses a 3 Nodes AKS cluster, just as an example

  • CAPZ cluster configuration templates are applied on this cluster

  • Kubectl is used to deploy CAPZ templates which in turn deploys the underlying Azure Infrastructure and the K8s cluster on Azure

  • Post creation of CAPZ cluster, this management cluster becomes irrelevant except for the Deletion of the CAPZ cluster

    • Deletion of CAPZ cluster can also be done with a shell script as well

Virtual Networks

  • CAPZ templates would come up with its own VNET config to be used Or one can have BYOVNET - where a custom Virtual Network configuration can be specified as well

  • One Subnet each for Master Nodes and Worker Nodes

  • Subnet size for Master Plane depends on the number of Master Nodes and

  • Worker Nodes, Number of Pods and Pod sizes as well.

  • This article uses a /24 Subnet for Master Nodes and a /24 Subnet for Worker Nodes

     

Master Plane

  • Consists of Master Nodes

  • This article uses 1 Node Master Plane - Standard_DS2_V2

Worker Plane

  • Consists of Worker Nodes

  • This article uses 2 Node Worker Plane - Standard_DS2_V2

What are we going to build

  • Deploy a simple, light-weight AKS cluster as the Management cluster

  • Create necessary infrastructure for the CAPZ K8s cluster

  • Deploy an unmanaged K8s cluster on Azure using CAPZ templates

  • Secure the K8s cluster with Ingress Controller as Internal Load Balancer

  • Deploy one Frontend application (viz. RatingsWeb), one Backend application (viz. RatinsgAPI) and a MongoDB instance all in this K8s cluster

  • Test the flow end to end

capz-deploy-apis.png

 

Let us Get into some Action

Please refer Source Repo

Local variables

tenantId=""
subscriptionId=""
masterResourceGroup=""
masterVnetName=""
aksResourceGroup=""
location=""
aksClusterName=""
version="<k8s-version>"
aksVnetName=""
aksVnetPrefix=""
aksVnetId=
aksSubnetName=""
aksSubnetPrefix=""
aksSubnetId=
sysNodeSize="Standard_DS2_v2"
sysNodeCount=3
maxSysPods=30
networkPlugin=azure
networkPolicy=azure
sysNodePoolName=
vmSetType=VirtualMachineScaleSets

 

Prepare & Configure

# Login to Azure
az login --tenant $tenantId

# Create Service Principal
az ad sp create-for-rbac --skip-assignment -n https://aks-k8s-sp
{
 "appId": "<appId>",
 "displayName": "https://aks-k8s-sp",
 "password": "<password>",
 "tenant": "<tenantId>"
}

spAppId="<appId>"
spPassword="<password>"

# Virtual Network
az network vnet create -n $aksVnetName -g $aksResourceGroup --address-prefixes $aksVnetPrefix
aksVnetId=$(az network vnet show -n $aksVnetName -g $aksResourceGroup --query="id" -o tsv)
echo $aksVnetId

# Subnet for AKS
az network vnet subnet create -n $aksSubnetName --vnet-name $aksVnetName -g $aksResourceGroup --address-prefixes $aksSubnetPrefix
aksSubnetId=$(az network vnet subnet show -n $aksSubnetName --vnet-name $aksVnetName -g $aksResourceGroup --query="id" -o tsv)
echo $aksSubnetId

# Role Assignments
az role assignment create --assignee $spAppId --role "Network Contributor" --scope $aksVnetId
az role assignment create --assignee $spAppId --role "Contributor" --scope "/subscriptions/$subscriptionId"

 

Deploy Management Cluster

az aks create --name $aksClusterName \
--resource-group $aksResourceGroup \
--kubernetes-version $version --location $location \
--vnet-subnet-id "$aksSubnetId" \
--node-vm-size $sysNodeSize \
--node-count $sysNodeCount --max-pods $maxSysPods \
--service-principal $spAppId \
--client-secret $spPassword \
--network-plugin $networkPlugin --network-policy $networkPolicy \
--nodepool-name $sysNodePoolName --vm-set-type $vmSetType \
--generate-ssh-keys

# Connect to the Management cluster
az aks get-credentials -g $aksResourceGroup --name $aksClusterName --admin --overwrite

 

CAPZ - Worker Cluster

Define Variables

capzResourceGroup=capz-k8s-rg
capzClusterName=capz-k8s-cluster
capzVersion="1.22.4"
capzVnetName=capz-k8s-cluster-vnet
capzVnetPrefix=16.0.0.0/21
capzVnetId=
capzMasterSubnetName=capz-master-subnet
capzMasterSubnetPrefix=16.0.0.0/24
capzMasterSubnetId=
capzWorkerSubnetName=capz-worker-subnet
capzWorkerSubnetPrefix=16.0.1.0/24
capzWorkerSubnetId=
capzIngressSubnetName=capz-ingress-subnet
capzIngressSubnetPrefix=16.0.2.0/24
capzIngressSubnetId=
capzAppgwSubnetName=capz-appgw-subnet
capzAppgwSubnetPrefix=16.0.4.0/27
capzAppgwSubnetId=
capzMasterNSGName="capz-control-plane-nsg"
capzworkerNSGName="$clusterName-node-nsg"
aksCapzPeering="$aksVnetName-$capzVnetName-peering"
capzAksPeering="$capzVnetName-$aksVnetName-peering"
masterCapzPeering="$masterVnetName-$capzVnetName-peering"
capzMasterPeering="$capzVnetName-$masterVnetName-peering"
aksCapzPrivateDNSLink="$aksVnetName-capz-dns-link"
masterCapzPrivateDNSLink="$masterVnetName-capz-dns-link"
capzPrivateDNSLink="$capzVnetName-dns-link"
capzIngControllerName="capz-nginx-ing"
capzIngControllerNSName="capz-nginx-ing-ns"
capzIngControllerFileName="internal-ingress"
capzPrivateDNSZoneName="$capzClusterName.capz.io"
privateDNSZoneName="internal.wkshpdev.com"
capzACRName="<ACR to host docker images>"
capzKeyVaultName="capz-workshop-kv"

# Deployment Folder path
baseFolderPath="<baseFolderName>/K8s-CAPZ/Deployments"

# Test Folder path
testFolderPath="<baseFolderName>/K8s-CAPZ/Tests"

 

Prepare & Configure

# Install clusterctl - CAPZ CLI

version=v0.3.20 # latest is 1.1.2 at the time of wrriting this article

# Linux
curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/$version/clusterctl-linux-amd64 -o clusterctl

# MacOS
curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/$version/clusterctl-darwin-amd64 -o clusterctl

chmod +x ./clusterctl
sudo mv ./clusterctl /usr/local/bin/

# Check version
clusterctl version

# Create Service Principalfor CAPZ cluster
az ad sp create-for-rbac --skip-assignment --name http://k8s-capz-sp
{
 "appId": "",
 "displayName": "k8s-capz-sp",
 "name": "http://k8s-capz-sp",
 "password": "",
 "tenant": ""
}

capzSPAppId="<appId>"
capzSPPassword="<password>"

# Create Network and Role assignment

# Virtual Network
az network vnet create -n $capzVnetName -g $capzResourceGroup --address-prefixes $capzVnetPrefix
capzVnetId=$(az network vnet show -n $capzVnetName -g $capzResourceGroup --query="id" -o tsv)
echo $capzVnetId

# Subnet for Master Nodes
az network vnet subnet create -n $capzMasterSubnetName --vnet-name $capzVnetName -g $capzResourceGroup --address-prefixes $capzMasterSubnetPrefix
capzMasterSubnetId=$(az network vnet subnet show -n $capzMasterSubnetName --vnet-name $capzVnetName -g $capzResourceGroup --query="id" -o tsv)
echo $capzMasterSubnetId

# Subnet for Worker Nodes
az network vnet subnet create -n $capzWorkerSubnetName --vnet-name $capzVnetName -g $capzResourceGroup --address-prefixes $capzWorkerSubnetPrefix
capzWorkerSubnetId=$(az network vnet subnet show -n $capzWorkerSubnetName --vnet-name $capzVnetName -g $capzResourceGroup --query="id" -o tsv)
echo $capzWorkerSubnetId

# Subnet for Ingress Controller
az network vnet subnet create -n $capzIngressSubnetName --vnet-name $capzVnetName -g $capzResourceGroup --address-prefixes $capzIngressSubnetPrefix
capzIngressSubnetId=$(az network vnet subnet show -n $capzIngressSubnetName --vnet-name $capzVnetName -g $capzResourceGroup --query="id" -o tsv)
echo $capzIngressSubnetId

# Subnet for Application Gateway
az network vnet subnet create -n $capzAppgwSubnetName --vnet-name $capzVnetName -g $capzResourceGroup --address-prefixes $capzAppgwSubnetPrefix
capzAppgwSubnetId=$(az network vnet subnet show -n $capzAppgwSubnetName --vnet-name $capzVnetName -g $capzResourceGroup --query="id" -o tsv)
echo $capzAppgwSubnetId

# Role Assignments
az role assignment create --assignee $capzSPAppId --role "Network Contributor" --scope $capzVnetId
az role assignment create --assignee $capzSPAppId --role "Contributor" --scope "/subscriptions/$subscriptionId"

# Vnet peerings

# Management Cluster VNET to CAPZ Clsuter VNET
az network vnet peering create -g $capzResourceGroup --remote-vnet $aksVnetId --vnet-name $capzVnetName -n $capzAksPeering --allow-vnet-access

# CAPZ Clsuter VNET to Management Cluster VNET
az network vnet peering create -g $aksResourceGroup --remote-vnet $capzVnetId --vnet-name $aksVnetName -n $aksCapzPeering --allow-vnet-access

# NSG for controlPlane VNET (Needed for Custom VNet options)
az network nsg create -n $capzMasterNSGName -g $capzResourceGroup
az network nsg rule create -n "allow_ssh" --nsg-name $capzMasterNSGName -g $capzResourceGroup --priority 100 --access "Allow" --direction "InBound" --source-address-prefixes "*" --source-port-ranges "*" --destination-address-prefixes "*" --destination-port-ranges "22" --description "Allow SSH"
az network nsg rule create -n "allow_apiserver" --nsg-name $capzMasterNSGName -g $capzResourceGroup --priority 101 --access "Allow" --direction "InBound" --source-address-prefixes "*" --source-port-ranges "*" --destination-address-prefixes "*" --destination-port-ranges "6443" --description "Allow K8s API Server"
az network nsg rule create -n "allow_coredns"  --nsg-name $capzMasterNSGName -g $capzResourceGroup --access "Allow" --direction "Inbound" --priority 102 --destination-port-ranges 8181 --description "Allow CoreDNS"
az network vnet subnet update -g $capzResourceGroup -n $capzMasterSubnetName --vnet-name $capzVnetName --network-security-group $capzMasterNSGName

az network nsg create -n $capzWorkerNSGName -g $capzResourceGroup
az network vnet subnet update -g $capzResourceGroup -n $capzWorkerSubnetName --vnet-name $capzVnetName --network-security-group $capzWorkerNSGName

 

Deploy Azure Container Registry (ACR)

# Create ACR and Role assignment

az acr create -n $capzACRName -g $capzResourceGroup --sku Standard --admin-enabled false
acrId=$(az acr show -n $capzACRName -g $capzResourceGroup --query="id" -o tsv)
az role assignment create --role=AcrPull --assignee=$capzSPAppId --scope=$acrId

# Import Test images into ACR
az acr import -n $capzACRName --source docker.io/library/nginx:alpine -t nginx:alpine

 

Deploy Azure KeyVault

# This is not used by the example here in this article; but it is good to have it as a Best practice
# All Secrets would be stored in KeyVault

# Create KeyVault and Access Policy

az keyvault create -n $capzKeyVaultName -g $capzResourceGroup --sku Standard
objectId=$(az ad user show --id modatta@microsoft.com --query="objectId" -o tsv)

az keyvault set-policy -n $capzKeyVaultName -g $capzResourceGroup --key-permissions get list update create delete \
--secret-permissions get list set delete --certificate-permissions get list update create delete \
--object-id $objectId

keyvaultId=$(az keyvault show -n $capzKeyVaultName -g $capzResourceGroup --query="id" -o tsv)

 

 

Deploy CAPZ Cluster

# ENV variables needed by CAPZ installation

export AZURE_SUBSCRIPTION_ID=$subscriptionId
export AZURE_TENANT_ID=$tenantId
export AZURE_CLIENT_ID=$capzSPAppId
export AZURE_CLIENT_SECRET=$capzSPPassword
export AZURE_ENVIRONMENT="AzurePublicCloud"
export AZURE_CONTROL_PLANE_MACHINE_TYPE="Standard_D2s_v3"
export AZURE_NODE_MACHINE_TYPE="Standard_D4s_v3"
export AZURE_LOCATION="eastus"

export AZURE_SUBSCRIPTION_ID_B64="$(echo -n "$AZURE_SUBSCRIPTION_ID" | base64 | tr -d '\n')"
export AZURE_TENANT_ID_B64="$(echo -n "$AZURE_TENANT_ID" | base64 | tr -d '\n')"
export AZURE_CLIENT_ID_B64="$(echo -n "$AZURE_CLIENT_ID" | base64 | tr -d '\n')"
export AZURE_CLIENT_SECRET_B64="$(echo -n "$AZURE_CLIENT_SECRET" | base64 | tr -d '\n')"

export AZURE_CLUSTER_IDENTITY_SECRET_NAME="cluster-identity-secret"
export CLUSTER_IDENTITY_NAME="cluster-identity"
export AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE="default"

# Cluster Identity Secret
kubectl create secret generic "${AZURE_CLUSTER_IDENTITY_SECRET_NAME}" --from-literal=clientSecret="${AZURE_CLIENT_SECRET}"

# Role Assignment
az role assignment create --role=Contributor --assignee=$capzSPAppId
--scope=/subscriptions/$AZURE_SUBSCRIPTION_ID

# Initialize the Azure Provider
clusterctl init --infrastructure azure

# Workload cluster config
# Change valeus as necessary
clusterctl generate cluster $capzClusterName --kubernetes-version $capzVersion --control-plane-machine-count=1 --worker-machine-count=2 > capz-k8s-cluster-public.yaml

# Deploy the CAPZ clsuter
kubectl apply -f ./capz-k8s-cluster-public.yaml

# Check status of Workload cluster creation
kubectl get cluster --all-namespaces
clusterctl describe cluster capz-k8s-cluster

# Wait for this command to return all success
kubectl get azuremachines

apiServer=$(kubectl get azurecluster capz-k8s-cluster -o jsonpath='{.spec.controlPlaneEndpoint.host}')
echo $apiServer

 

capz-deploy-success.png

 

Post Configuration

# Get kubeconfig for CAPZ installation
clusterctl get kubeconfig $capzClusterName > capz-k8s-cluster.kubeconfig
alias k-capz="k --kubeconfig=$baseFolderPath/Setup/capz-k8s-cluster.kubeconfig"
alias helm-capz="helm --kubeconfig=$baseFolderPath/Setup/capz-k8s-cluster.kubeconfig"

# Install Calico n/w plugin
k-capz apply -f https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/master/templates/addons/calico.yaml

# Add cluster Admin User, Context and make it the Current one
k-capz config set-context $capzClusterName-admin@$capzClusterName --user $capzClusterName-admin \
--cluster $capzClusterName
k-capz config use-context $capzClusterName-admin@$capzClusterName

 

Connect to the Cluster

k-capz config get-contexts
k-capz get no
k-capz get po

# Label Nodes
k-capz label node/<node-name> agentpool=capzsyspool --overwrite
k-capz label node/<node-name> agentpool=capzsyspool --overwrite

# Create Namespaces
k-capz create ns db
k-capz create ns capz-workshop-dev
k-capz create ns $capzIngControllerNSName
k-capz create ns smoke

 

Configure CAPZ Cluster

# Create Other Users - 1 Cluster Admin, 1 Architect/Manager, 1 Developer
k-capz create sa capz-ca-sa
k-capz create sa capz-manager-sa
k-capz create sa capz-developer-sa
k-capz config get-contexts

k-capz get secrets

# Set Cluster Admin Context
k-capz get secrets/<capz-ca-sa-secret_name> -o yaml
token=$(echo <val> | base64 --decode)
k-capz config set-credentials capz-ca-sa --token=$token
k-capz config set-context capz-ca-sa-context --user capz-ca-sa --cluster $capzClusterName

# Switch to Cluster Admin context
k-capz config use-context capz-ca-sa-context

# Set Manager Context
k-capz get secrets/<capz-manager-sa-secret_name> -o yaml
token2=$(echo <val> | base64 --decode)
k-capz config set-credentials capz-manager-sa --token=$token2
k-capz config set-context capz-manager-sa-context --user capz-manager-sa --cluster $capzClusterName

# Switch to Manager context
k-capz config use-context capz-manager-sa-context

# Set Developer Context
k-capz get secrets/<capz-developer-sa-secret_name> -o yaml
token3=$(echo <val> | base64 --decode)
k-capz config set-credentials capz-developer-sa --token=$token3
k-capz config set-context capz-developer-sa-context --user capz-developer-sa --cluster $capzClusterName

# Switch to Developer context
k-capz config use-context capz-developer-sa-context

 

Deploy Tools & Services

Storage Class
# Deploy Storage class
helm create sc-chart
helm-capz install sc-chart -n default $baseFolderPath/Helms/sc-chart/ -f $baseFolderPath/Helms/sc-chart/values.yaml

# Deploy RBAC - DEV
helm-capz install rbac-chart -n capz-workshop-dev $baseFolderPath/Helms/rbac-chart/ -f $baseFolderPath/Helms/rbac-chart/values-dev.yaml

# Deploy RBAC - Smoke
helm-capz install rbac-chart -n smoke $baseFolderPath/Helms/rbac-chart/ -f $baseFolderPath/Helms/rbac-chart/values-smoke.yaml

 

Ingress Controller

# Deploy Ingress - DEV
k-capz create secret tls capz-workshop-tls-secret -n capz-workshop-dev --cert="$baseFolderPath/Certs/<cert-file-name>.pem" --key="$baseFolderPath/Certs/<cert-file-name>.key"

helm-capz install ingress-chart -n capz-workshop-dev $baseFolderPath/Helms/ingress-chart/ -f $baseFolderPath/Helms/ingress-chart/values-dev-tls.yaml

# Deploy Ingress - Smoke
k-capz create secret tls capz-workshop-tls-secret -n smoke --cert="$baseFolderPath/Certs/<cert-file-name>.pem" --key="$baseFolderPath/Certs/<cert-file-name>.key"
helm-capz install ingress-chart -n smoke $baseFolderPath/Helms/ingress-chart/ -f $baseFolderPath/Helms/ingress-chart/values-smoke.yaml

 

 

Deploy & Configure Application Gateway

capz-appgw-bkpool.png

 

Deploy Microservices

Smoke
# Create Secrets for ACR - Smoke
k-capz create secret docker-registry capz-acr-secret -n smoke --docker-server=$capzACRName.azurecr.io --docker-username=$capzSPAppId --docker-password=$capzSPPassword

# Install Smoke chart - Smoke Namespace
helm-capz install smoke-chart -n smoke $testFolderPath/Helms/smoke-chart/ -f $testFolderPath/Helms/smoke-chart/values-smoke.yaml
Ratings
Ratings API
# Clone Source code on local environment
git clone https://github.com/monojit18/mslearn-aks-workshop-ratings-api.git

# Bulid and Push dokcer image to ACR
az acr build -t $capzACRName.azurecr.io/ratings-api:v1.0.0 -r $capzACRName .

# Deploy MongoDB container
helm-capz repo add bitnami https://charts.bitnami.com/bitnami

helm-capz install ratingsdb bitnami/mongodb -n db \
--set auth.username=ratingsuser,auth.password=ratingspwd,auth.database=ratingsdb \
--set controller.nodeSelector.agentpool=capzsyspool \
--set controller.defaultBackend.nodeSelector.agentpool=capzsyspool \
--set persistence.storageClass=managed-premium

# Deploy Ratings Api
k-capz create secret generic capz-workshop-mongo-secret -n capz-workshop-dev \
--from-literal=MONGOCONNECTION="mongodb://ratingsuser:ratingspwd@ratingsdb-mongodb.db:27017/ratingsdb"

helm-capz install ratingsapi-chart -n capz-workshop-dev ./ratingsapi-chart/ -f ./ratingsapi-chart/CAPZ/values-dev.yaml
Ratings Web
# Clone Source code on local environment
git clone https://github.com/monojit18/mslearn-aks-workshop-ratings-web.git

# Bulid and Push dokcer image to ACR
az acr build -t $capzACRName.azurecr.io/ratings-web:v1.0.0 -r $capzACRName .

helm-capz install ratingsweb-chart -n capz-workshop-dev ./ratingsweb-chart/ -f ./ratingsweb-chart/CAPZ/values-dev.yaml

 

Test

In Browser: http(s)://<application-gateway-public-ip-domain-name>/

 

Cleanup

kubectl delete cluster $capzClusterName

 

References

%3CLINGO-SUB%20id%3D%22lingo-sub-3122730%22%20slang%3D%22en-US%22%3ESelf-managed%20Kubernetes%20on%20Azure%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3122730%22%20slang%3D%22en-US%22%3E%3CH2%20class%3D%22md-end-block%20md-heading%20md-focus%22%20id%3D%22toc-hId-360454422%22%20id%3D%22toc-hId-415986772%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EIntroduction%3C%2FSPAN%3E%3C%2FH2%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3ECluster%20API%20is%20a%20Kubernetes%20community%20project%20started%20by%20the%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-meta-i-c%20%20md-link%22%3E%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2Fkubernetes%2Fcommunity%2Ftree%2Fmaster%2Fsig-cluster-lifecycle%23readme%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20class%3D%22md-plain%22%3EKubernetes%20Special%20Interest%20Group%20(SIG)%3C%2FSPAN%3E%3C%2FA%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-plain%22%3E%20which%20brings%20declarative%2C%20Kubernetes-style%20APIs%20to%20cluster%20creation%2C%20configuration%20and%20management.%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20class%3D%22md-end-block%20md-p%20md-focus%22%3E%3CSPAN%20class%3D%22md-plain%22%3EThe%20supporting%20infrastructure%20on%20Azure%20for%20K8s%20cluster%20-%20like%20Virtual%20Machines%2C%20Virtual%20Networks%2C%20Load%20Balancers%20etc.%20as%20well%20as%20the%20Kubernetes%20cluster%20configuration%20are%20all%20defined%20through%20an%20YAML%20configuration%20file%20-%20thus%20making%20the%20K8s%20management%20seamless%20and%20easy%20for%20Infrastructure%20Architects%20across%20various%20environments.%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20class%3D%22md-end-block%20md-p%20md-focus%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH2%20class%3D%22md-end-block%20md-heading%20md-focus%22%20id%3D%22toc-hId--1447000041%22%20id%3D%22toc-hId--1391467691%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EHigh%20Level%20Architecture%3C%2FSPAN%3E%3C%2FH2%3E%0A%3CP%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22capz-hla.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F354883i0D84F4A22808B53D%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22capz-hla.png%22%20alt%3D%22capz-hla.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH3%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--756438567%22%20id%3D%22toc-hId--700906217%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EComponents%3C%2FSPAN%3E%3C%2FH3%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--65877093%22%20id%3D%22toc-hId--10344743%22%3E%3CSPAN%20class%3D%22md-plain%22%3EManagement%20Cluster%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CUL%20class%3D%22ul-list%22%20data-mark%3D%22-%22%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EWorks%20as%20the%20deployment%20plane%20for%20the%20CAPZ%20cluster%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EThis%20can%20be%20any%20K8s%20cluster%20and%20can%20be%20a%20simple%2C%20light-weight%20one%20-%20e.g.%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-pair-s%20%22%3E%3CEM%3E%3CSPAN%20class%3D%22md-plain%22%3EKind%3C%2FSPAN%3E%3C%2FEM%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-plain%22%3E%2C%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-pair-s%20%22%3E%3CEM%3E%3CSPAN%20class%3D%22md-plain%22%3EMicroK8s%3C%2FSPAN%3E%3C%2FEM%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-plain%22%3E%20etc.%20This%20article%20uses%20a%203%20Nodes%20AKS%20cluster%2C%20just%20as%20an%20example%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3ECAPZ%20cluster%20configuration%20templates%20are%20applied%20on%20this%20cluster%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-pair-s%20%22%3E%3CEM%3E%3CSPAN%20class%3D%22md-plain%22%3EKubectl%3C%2FSPAN%3E%3C%2FEM%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-plain%22%3E%20is%20used%20to%20deploy%20CAPZ%20templates%20which%20in%20turn%20deploys%20the%20underlying%20Azure%20Infrastructure%20and%20the%20K8s%20cluster%20on%20Azure%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EPost%20creation%20of%20CAPZ%20cluster%2C%20this%20management%20cluster%20becomes%20irrelevant%20except%20for%20the%20Deletion%20of%20the%20CAPZ%20cluster%3C%2FSPAN%3E%3C%2FP%3E%0A%3CUL%20class%3D%22ul-list%22%20data-mark%3D%22-%22%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EDeletion%20of%20CAPZ%20cluster%20can%20also%20be%20done%20with%20a%20shell%20script%20as%20well%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--1873331556%22%20id%3D%22toc-hId--1817799206%22%3E%3CSPAN%20class%3D%22md-plain%22%3EVirtual%20Networks%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CUL%20class%3D%22ul-list%22%20data-mark%3D%22-%22%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3ECAPZ%20templates%20would%20come%20up%20with%20its%20own%20VNET%20config%20to%20be%20used%20Or%20one%20can%20have%20BYOVNET%20-%20where%20a%20custom%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-pair-s%20%22%3E%3CEM%3E%3CSPAN%20class%3D%22md-plain%22%3EVirtual%20Network%3C%2FSPAN%3E%3C%2FEM%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-plain%22%3E%20configuration%20can%20be%20specified%20as%20well%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EOne%20Subnet%20each%20for%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-pair-s%20%22%3E%3CEM%3E%3CSPAN%20class%3D%22md-plain%22%3EMaster%20Nodes%3C%2FSPAN%3E%3C%2FEM%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-plain%22%3E%20and%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-pair-s%20%22%3E%3CEM%3E%3CSPAN%20class%3D%22md-plain%22%3EWorker%20Nodes%3C%2FSPAN%3E%3C%2FEM%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3ESubnet%20size%20for%20Master%20Plane%20depends%20on%20the%20number%20of%20Master%20Nodes%20and%20%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EWorker%20Nodes%2C%20Number%20of%20Pods%20and%20Pod%20sizes%20as%20well.%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EThis%20article%20uses%20a%20%2F24%20Subnet%20for%20Master%20Nodes%20and%20a%20%2F24%20Subnet%20for%20Worker%20Nodes%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-614181277%22%20id%3D%22toc-hId-669713627%22%3E%3CSPAN%20class%3D%22md-plain%22%3EMaster%20Plane%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CUL%20class%3D%22ul-list%22%20data-mark%3D%22-%22%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EConsists%20of%20Master%20Nodes%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EThis%20article%20uses%201%20Node%20Master%20Plane%20-%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-pair-s%20%22%3E%3CSTRONG%3E%3CSPAN%20class%3D%22md-plain%22%3EStandard_DS2_V2%3C%2FSPAN%3E%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--1193273186%22%20id%3D%22toc-hId--1137740836%22%3E%3CSPAN%20class%3D%22md-plain%22%3EWorker%20Plane%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CUL%20class%3D%22ul-list%22%20data-mark%3D%22-%22%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EConsists%20of%20Worker%20Nodes%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EThis%20article%20uses%202%20Node%20Worker%20Plane%20-%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-pair-s%20%22%3E%3CSTRONG%3E%3CSPAN%20class%3D%22md-plain%22%3EStandard_DS2_V2%3C%2FSPAN%3E%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3CH2%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-593175069%22%20id%3D%22toc-hId-648707419%22%3E%3CSPAN%20class%3D%22md-plain%22%3EWhat%20are%20we%20going%20to%20build%3C%2FSPAN%3E%3C%2FH2%3E%0A%3CUL%20class%3D%22ul-list%22%20data-mark%3D%22-%22%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EDeploy%20a%20simple%2C%20light-weight%20AKS%20cluster%20as%20the%20Management%20cluster%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3ECreate%20necessary%20infrastructure%20for%20the%20CAPZ%20K8s%20cluster%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EDeploy%20an%20unmanaged%20K8s%20cluster%20on%20Azure%20using%20CAPZ%20templates%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3ESecure%20the%20K8s%20cluster%20with%20Ingress%20Controller%20as%20Internal%20Load%20Balancer%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EDeploy%20one%20Frontend%20application%20(viz.%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-pair-s%20%22%3E%3CEM%3E%3CSPAN%20class%3D%22md-plain%22%3ERatingsWeb%3C%2FSPAN%3E%3C%2FEM%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-plain%22%3E)%2C%20one%20Backend%20application%20(viz.%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-pair-s%20%22%3E%3CEM%3E%3CSPAN%20class%3D%22md-plain%22%3ERatinsgAPI%3C%2FSPAN%3E%3C%2FEM%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-plain%22%3E)%20and%20a%20MongoDB%20instance%20all%20in%20this%20K8s%20cluster%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%20md-focus-container%22%3E%3CP%20class%3D%22md-end-block%20md-p%20md-focus%22%3E%3CSPAN%20class%3D%22md-plain%22%3ETest%20the%20flow%20end%20to%20end%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3CP%3E%3CSPAN%20class%3D%22md-plain%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22capz-deploy-apis.png%22%20style%3D%22width%3A%20756px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F354897i1628ECBACE4C2565%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22capz-deploy-apis.png%22%20alt%3D%22capz-deploy-apis.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH2%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--1214279394%22%20id%3D%22toc-hId--1158747044%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3ELet%20us%20Get%20into%20some%20Action%3C%2FSPAN%3E%3C%2FH2%3E%0A%3CP%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EPlease%20refer%20%3CSPAN%20class%3D%22md-meta-i-c%20md-link%20md-expand%22%3E%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2Fmonojit18%2FK8s-CAPZ.git%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20class%3D%22md-plain%22%3ESource%20Repo%3C%2FSPAN%3E%3C%2FA%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CH3%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--523717920%22%20id%3D%22toc-hId--468185570%22%3E%3CSPAN%20class%3D%22md-plain%22%3ELocal%20variables%3C%2FSPAN%3E%3C%2FH3%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EtenantId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EsubscriptionId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EmasterResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EmasterVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3Elocation%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksClusterName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3Eversion%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3CK8S-VERSION%3E%22%3C%2FK8S-VERSION%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksVnetPrefix%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksVnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksSubnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksSubnetPrefix%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EsysNodeSize%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22Standard_DS2_v2%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EsysNodeCount%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-number%22%3E3%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EmaxSysPods%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-number%22%3E30%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EnetworkPlugin%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Eazure%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EnetworkPolicy%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Eazure%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EsysNodePoolName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EvmSetType%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3EVirtualMachineScaleSets%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH3%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-1268631434%22%20id%3D%22toc-hId-1324163784%22%3E%3CSPAN%20class%3D%22md-plain%22%3EPrepare%20%26amp%3B%20Configure%3C%2FSPAN%3E%3C%2FH3%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Login%20to%20Azure%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20login%20%3CSPAN%20class%3D%22cm-attribute%22%3E--tenant%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24tenantId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Create%20Service%20Principal%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20ad%20sp%20create-for-rbac%20%3CSPAN%20class%3D%22cm-attribute%22%3E--skip-assignment%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20https%3A%2F%2Faks-k8s-sp%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%20%26nbsp%3B%3CSPAN%20class%3D%22cm-string%22%3E%22appId%22%3C%2FSPAN%3E%3A%20%3CSPAN%20class%3D%22cm-string%22%3E%22%3CAPPID%3E%22%3C%2FAPPID%3E%3C%2FSPAN%3E%2C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%20%26nbsp%3B%3CSPAN%20class%3D%22cm-string%22%3E%22displayName%22%3C%2FSPAN%3E%3A%20%3CSPAN%20class%3D%22cm-string%22%3E%22https%3A%2F%2Faks-k8s-sp%22%3C%2FSPAN%3E%2C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%20%26nbsp%3B%3CSPAN%20class%3D%22cm-string%22%3E%22password%22%3C%2FSPAN%3E%3A%20%3CSPAN%20class%3D%22cm-string%22%3E%22%3CPASSWORD%3E%22%3C%2FPASSWORD%3E%3C%2FSPAN%3E%2C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%20%26nbsp%3B%3CSPAN%20class%3D%22cm-string%22%3E%22tenant%22%3C%2FSPAN%3E%3A%20%3CSPAN%20class%3D%22cm-string%22%3E%22%3CTENANTID%3E%22%3C%2FTENANTID%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EspAppId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3CAPPID%3E%22%3C%2FAPPID%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EspPassword%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3CPASSWORD%3E%22%3C%2FPASSWORD%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Virtual%20Network%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetPrefix%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksVnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(az%20network%20vnet%20show%20-n%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20-g%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24aksResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--query%3D%22id%22%20-o%20tsv)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Eecho%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Subnet%20for%20AKS%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20subnet%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksSubnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--vnet-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksSubnetPrefix%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(az%20network%20vnet%20subnet%20show%20-n%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24aksSubnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--vnet-name%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20-g%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24aksResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--query%3D%22id%22%20-o%20tsv)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Eecho%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksSubnetId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Role%20Assignments%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20role%20assignment%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E--assignee%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24spAppId%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--role%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Network%20Contributor%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--scope%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20role%20assignment%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E--assignee%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24spAppId%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--role%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Contributor%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--scope%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22%2Fsubscriptions%2F%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24subscriptionId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH3%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--538823029%22%20id%3D%22toc-hId--483290679%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EDeploy%20Management%20Cluster%3C%2FSPAN%3E%3C%2FH3%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3Eaz%20aks%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E--name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksClusterName%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--resource-group%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksResourceGroup%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--kubernetes-version%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24version%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--location%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24location%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--vnet-subnet-id%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24aksSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--node-vm-size%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24sysNodeSize%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--node-count%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24sysNodeCount%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--max-pods%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24maxSysPods%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--service-principal%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24spAppId%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--client-secret%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24spPassword%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--network-plugin%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24networkPlugin%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--network-policy%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24networkPolicy%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--nodepool-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24sysNodePoolName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--vm-set-type%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24vmSetType%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--generate-ssh-keys%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Connect%20to%20the%20Management%20cluster%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20aks%20get-credentials%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksClusterName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--admin%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--overwrite%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH3%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-1948689804%22%20id%3D%22toc-hId-2004222154%22%3E%3CSPAN%20class%3D%22md-plain%22%3ECAPZ%20-%20Worker%20Cluster%3C%2FSPAN%3E%3C%2FH3%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-270318060%22%20id%3D%22toc-hId-325850410%22%3E%3CSPAN%20class%3D%22md-plain%22%3EDefine%20Variables%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapz-k8s-rg%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzClusterName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapz-k8s-cluster%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzVersion%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%221.22.4%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapz-k8s-cluster-vnet%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzVnetPrefix%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-number%22%3E16%3C%2FSPAN%3E.0.0.0%2F21%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzVnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzMasterSubnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapz-master-subnet%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzMasterSubnetPrefix%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-number%22%3E16%3C%2FSPAN%3E.0.0.0%2F24%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzMasterSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzWorkerSubnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapz-worker-subnet%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzWorkerSubnetPrefix%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-number%22%3E16%3C%2FSPAN%3E.0.1.0%2F24%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzWorkerSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzIngressSubnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapz-ingress-subnet%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzIngressSubnetPrefix%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-number%22%3E16%3C%2FSPAN%3E.0.2.0%2F24%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzIngressSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzAppgwSubnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapz-appgw-subnet%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzAppgwSubnetPrefix%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-number%22%3E16%3C%2FSPAN%3E.0.4.0%2F27%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzAppgwSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzMasterNSGName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22capz-control-plane-nsg%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzworkerNSGName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24clusterName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-node-nsg%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksCapzPeering%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-peering%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzAksPeering%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-peering%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EmasterCapzPeering%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24masterVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-peering%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzMasterPeering%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24masterVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-peering%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EaksCapzPrivateDNSLink%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-capz-dns-link%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EmasterCapzPrivateDNSLink%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24masterVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-capz-dns-link%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzPrivateDNSLink%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E-dns-link%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzIngControllerName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22capz-nginx-ing%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzIngControllerNSName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22capz-nginx-ing-ns%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzIngControllerFileName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22internal-ingress%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzPrivateDNSZoneName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E.capz.io%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EprivateDNSZoneName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22internal.wkshpdev.com%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzACRName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3CACR%20to%3D%22%22%20host%3D%22%22%20docker%3D%22%22%20images%3D%22%22%3E%22%3C%2FACR%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzKeyVaultName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22capz-workshop-kv%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Deployment%20Folder%20path%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EbaseFolderPath%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3CBASEFOLDERNAME%3E%2FK8s-CAPZ%2FDeployments%22%3C%2FBASEFOLDERNAME%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Test%20Folder%20path%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EtestFolderPath%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3CBASEFOLDERNAME%3E%2FK8s-CAPZ%2FTests%22%3C%2FBASEFOLDERNAME%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--1537136403%22%20id%3D%22toc-hId--1481604053%22%3E%3CSPAN%20class%3D%22md-plain%22%3EPrepare%20%26amp%3B%20Configure%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Install%20clusterctl%20-%20CAPZ%20CLI%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3Eversion%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ev0.3.20%20%3CSPAN%20class%3D%22cm-comment%22%3E%23%20latest%20is%201.1.2%20at%20the%20time%20of%20wrriting%20this%20article%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Linux%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Ecurl%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-L%3C%2FSPAN%3E%20https%3A%2F%2Fgithub.com%2Fkubernetes-sigs%2Fcluster-api%2Freleases%2Fdownload%2F%3CSPAN%20class%3D%22cm-def%22%3E%24version%3C%2FSPAN%3E%2Fclusterctl-linux-amd64%20%3CSPAN%20class%3D%22cm-attribute%22%3E-o%3C%2FSPAN%3E%20clusterctl%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20MacOS%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Ecurl%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-L%3C%2FSPAN%3E%20https%3A%2F%2Fgithub.com%2Fkubernetes-sigs%2Fcluster-api%2Freleases%2Fdownload%2F%3CSPAN%20class%3D%22cm-def%22%3E%24version%3C%2FSPAN%3E%2Fclusterctl-darwin-amd64%20%3CSPAN%20class%3D%22cm-attribute%22%3E-o%3C%2FSPAN%3E%20clusterctl%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Echmod%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-operator%22%3E%2B%3C%2FSPAN%3Ex%20.%2Fclusterctl%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Esudo%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-builtin%22%3Emv%3C%2FSPAN%3E%20.%2Fclusterctl%20%2Fusr%2Flocal%2Fbin%2F%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Check%20version%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eclusterctl%20version%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Create%20Service%20Principalfor%20CAPZ%20cluster%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20ad%20sp%20create-for-rbac%20%3CSPAN%20class%3D%22cm-attribute%22%3E--skip-assignment%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--name%3C%2FSPAN%3E%20http%3A%2F%2Fk8s-capz-sp%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%20%26nbsp%3B%3CSPAN%20class%3D%22cm-string%22%3E%22appId%22%3C%2FSPAN%3E%3A%20%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%2C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%20%26nbsp%3B%3CSPAN%20class%3D%22cm-string%22%3E%22displayName%22%3C%2FSPAN%3E%3A%20%3CSPAN%20class%3D%22cm-string%22%3E%22k8s-capz-sp%22%3C%2FSPAN%3E%2C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%20%26nbsp%3B%3CSPAN%20class%3D%22cm-string%22%3E%22name%22%3C%2FSPAN%3E%3A%20%3CSPAN%20class%3D%22cm-string%22%3E%22http%3A%2F%2Fk8s-capz-sp%22%3C%2FSPAN%3E%2C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%20%26nbsp%3B%3CSPAN%20class%3D%22cm-string%22%3E%22password%22%3C%2FSPAN%3E%3A%20%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%2C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%20%26nbsp%3B%3CSPAN%20class%3D%22cm-string%22%3E%22tenant%22%3C%2FSPAN%3E%3A%20%3CSPAN%20class%3D%22cm-string%22%3E%22%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzSPAppId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3CAPPID%3E%22%3C%2FAPPID%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzSPPassword%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3CPASSWORD%3E%22%3C%2FPASSWORD%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Create%20Network%20and%20Role%20assignment%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Virtual%20Network%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetPrefix%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzVnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(az%20network%20vnet%20show%20-n%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20-g%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--query%3D%22id%22%20-o%20tsv)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Eecho%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Subnet%20for%20Master%20Nodes%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20subnet%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzMasterSubnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--vnet-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzMasterSubnetPrefix%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzMasterSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(az%20network%20vnet%20subnet%20show%20-n%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzMasterSubnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--vnet-name%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20-g%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--query%3D%22id%22%20-o%20tsv)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Eecho%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzMasterSubnetId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Subnet%20for%20Worker%20Nodes%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20subnet%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzWorkerSubnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--vnet-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzWorkerSubnetPrefix%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzWorkerSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(az%20network%20vnet%20subnet%20show%20-n%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzWorkerSubnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--vnet-name%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20-g%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--query%3D%22id%22%20-o%20tsv)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Eecho%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzWorkerSubnetId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Subnet%20for%20Ingress%20Controller%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20subnet%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzIngressSubnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--vnet-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzIngressSubnetPrefix%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzIngressSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(az%20network%20vnet%20subnet%20show%20-n%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzIngressSubnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--vnet-name%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20-g%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--query%3D%22id%22%20-o%20tsv)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Eecho%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzIngressSubnetId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Subnet%20for%20Application%20Gateway%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20subnet%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzAppgwSubnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--vnet-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzAppgwSubnetPrefix%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EcapzAppgwSubnetId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(az%20network%20vnet%20subnet%20show%20-n%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzAppgwSubnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--vnet-name%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20-g%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--query%3D%22id%22%20-o%20tsv)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Eecho%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzAppgwSubnetId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Role%20Assignments%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20role%20assignment%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E--assignee%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzSPAppId%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--role%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Network%20Contributor%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--scope%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20role%20assignment%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E--assignee%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzSPAppId%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--role%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Contributor%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--scope%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22%2Fsubscriptions%2F%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24subscriptionId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Vnet%20peerings%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Management%20Cluster%20VNET%20to%20CAPZ%20Clsuter%20VNET%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20peering%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--remote-vnet%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetId%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--vnet-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzAksPeering%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--allow-vnet-access%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20CAPZ%20Clsuter%20VNET%20to%20Management%20Cluster%20VNET%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20peering%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--remote-vnet%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetId%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--vnet-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24aksCapzPeering%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--allow-vnet-access%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20NSG%20for%20controlPlane%20VNET%20(Needed%20for%20Custom%20VNet%20options)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20nsg%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzMasterNSGName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20nsg%20rule%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22allow_ssh%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--nsg-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzMasterNSGName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--priority%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-number%22%3E100%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--access%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Allow%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--direction%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22InBound%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--source-address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22*%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--source-port-ranges%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22*%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--destination-address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22*%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--destination-port-ranges%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%2222%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--description%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Allow%20SSH%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20nsg%20rule%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22allow_apiserver%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--nsg-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzMasterNSGName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--priority%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-number%22%3E101%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--access%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Allow%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--direction%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22InBound%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--source-address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22*%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--source-port-ranges%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22*%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--destination-address-prefixes%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22*%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--destination-port-ranges%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%226443%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--description%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Allow%20K8s%20API%20Server%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20nsg%20rule%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22allow_coredns%22%3C%2FSPAN%3E%20%26nbsp%3B%3CSPAN%20class%3D%22cm-attribute%22%3E--nsg-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzMasterNSGName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--access%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Allow%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--direction%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Inbound%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--priority%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-number%22%3E102%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--destination-port-ranges%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-number%22%3E8181%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--description%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-string%22%3E%22Allow%20CoreDNS%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20subnet%20update%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzMasterSubnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--vnet-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--network-security-group%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzMasterNSGName%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20nsg%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzWorkerNSGName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20network%20vnet%20subnet%20update%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzWorkerSubnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--vnet-name%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVnetName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--network-security-group%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzWorkerNSGName%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-950376430%22%20id%3D%22toc-hId-1005908780%22%3E%3CSPAN%20class%3D%22md-plain%22%3EDeploy%20Azure%20Container%20Registry%20(ACR)%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Create%20ACR%20and%20Role%20assignment%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20acr%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzACRName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--sku%3C%2FSPAN%3E%20Standard%20%3CSPAN%20class%3D%22cm-attribute%22%3E--admin-enabled%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-atom%22%3Efalse%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EacrId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(az%20acr%20show%20-n%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzACRName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20-g%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--query%3D%22id%22%20-o%20tsv)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20role%20assignment%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E--role%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3EAcrPull%20%3CSPAN%20class%3D%22cm-attribute%22%3E--assignee%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzSPAppId%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--scope%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24acrId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Import%20Test%20images%20into%20ACR%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20acr%20import%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzACRName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--source%3C%2FSPAN%3E%20docker.io%2Flibrary%2Fnginx%3Aalpine%20%3CSPAN%20class%3D%22cm-attribute%22%3E-t%3C%2FSPAN%3E%20nginx%3Aalpine%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--857078033%22%20id%3D%22toc-hId--801545683%22%3E%3CSPAN%20class%3D%22md-plain%22%3EDeploy%20Azure%20KeyVault%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20This%20is%20not%20used%20by%20the%20example%20here%20in%20this%20article%3B%20but%20it%20is%20good%20to%20have%20it%20as%20a%20Best%20practice%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20All%20Secrets%20would%20be%20stored%20in%20KeyVault%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Create%20KeyVault%20and%20Access%20Policy%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20keyvault%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzKeyVaultName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--sku%3C%2FSPAN%3E%20Standard%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EobjectId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(az%20ad%20user%20show%20--id%20modatta%40microsoft.com%20--query%3D%22objectId%22%20-o%20tsv)%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20keyvault%20set-policy%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzKeyVaultName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-g%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--key-permissions%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20list%20update%20create%20delete%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--secret-permissions%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20list%20%3CSPAN%20class%3D%22cm-keyword%22%3Eset%3C%2FSPAN%3E%20delete%20%3CSPAN%20class%3D%22cm-attribute%22%3E--certificate-permissions%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20list%20update%20create%20delete%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--object-id%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24objectId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EkeyvaultId%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(az%20keyvault%20show%20-n%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzKeyVaultName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20-g%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzResourceGroup%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%20--query%3D%22id%22%20-o%20tsv)%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-1630434800%22%20id%3D%22toc-hId-1685967150%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EDeploy%20CAPZ%20Cluster%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20ENV%20variables%20needed%20by%20CAPZ%20installation%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_SUBSCRIPTION_ID%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24subscriptionId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_TENANT_ID%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24tenantId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_CLIENT_ID%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzSPAppId%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_CLIENT_SECRET%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzSPPassword%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_ENVIRONMENT%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22AzurePublicCloud%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_CONTROL_PLANE_MACHINE_TYPE%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22Standard_D2s_v3%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_NODE_MACHINE_TYPE%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22Standard_D4s_v3%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_LOCATION%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22eastus%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_SUBSCRIPTION_ID_B64%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(echo%20-n%20%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24AZURE_SUBSCRIPTION_ID%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%22%20%7C%20base64%20%7C%20tr%20-d%20'%5Cn')%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_TENANT_ID_B64%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(echo%20-n%20%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24AZURE_TENANT_ID%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%22%20%7C%20base64%20%7C%20tr%20-d%20'%5Cn')%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_CLIENT_ID_B64%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(echo%20-n%20%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24AZURE_CLIENT_ID%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%22%20%7C%20base64%20%7C%20tr%20-d%20'%5Cn')%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_CLIENT_SECRET_B64%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(echo%20-n%20%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24AZURE_CLIENT_SECRET%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%22%20%7C%20base64%20%7C%20tr%20-d%20'%5Cn')%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_CLUSTER_IDENTITY_SECRET_NAME%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22cluster-identity-secret%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3ECLUSTER_IDENTITY_NAME%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22cluster-identity%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-keyword%22%3Eexport%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3EAZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22default%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Cluster%20Identity%20Secret%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ekubectl%20create%20secret%20generic%20%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24%7BAZURE_CLUSTER_IDENTITY_SECRET_NAME%7D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--from-literal%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EclientSecret%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24%7BAZURE_CLIENT_SECRET%7D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Role%20Assignment%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20role%20assignment%20create%20%3CSPAN%20class%3D%22cm-attribute%22%3E--role%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3EContributor%20%3CSPAN%20class%3D%22cm-attribute%22%3E--assignee%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzSPAppId%3C%2FSPAN%3E%20%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--scope%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%2Fsubscriptions%2F%3CSPAN%20class%3D%22cm-def%22%3E%24AZURE_SUBSCRIPTION_ID%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Initialize%20the%20Azure%20Provider%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eclusterctl%20init%20%3CSPAN%20class%3D%22cm-attribute%22%3E--infrastructure%3C%2FSPAN%3E%20azure%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Workload%20cluster%20config%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Change%20valeus%20as%20necessary%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eclusterctl%20generate%20cluster%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--kubernetes-version%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzVersion%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--control-plane-machine-count%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-number%22%3E1%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--worker-machine-count%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-number%22%3E2%3C%2FSPAN%3E%20%26gt%3B%20capz-k8s-cluster-public.yaml%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Deploy%20the%20CAPZ%20clsuter%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ekubectl%20apply%20%3CSPAN%20class%3D%22cm-attribute%22%3E-f%3C%2FSPAN%3E%20.%2Fcapz-k8s-cluster-public.yaml%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Check%20status%20of%20Workload%20cluster%20creation%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ekubectl%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20cluster%20%3CSPAN%20class%3D%22cm-attribute%22%3E--all-namespaces%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eclusterctl%20describe%20cluster%20capz-k8s-cluster%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Wait%20for%20this%20command%20to%20return%20all%20success%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ekubectl%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20azuremachines%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EapiServer%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(kubectl%20get%20azurecluster%20capz-k8s-cluster%20-o%20jsonpath%3D'%7B.spec.controlPlaneEndpoint.host%7D')%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Eecho%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24apiServer%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22capz-deploy-success.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F354898i0AA9C250E321E90F%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22capz-deploy-success.png%22%20alt%3D%22capz-deploy-success.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--177019663%22%20id%3D%22toc-hId--121487313%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EPost%20Configuration%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Get%20kubeconfig%20for%20CAPZ%20installation%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eclusterctl%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20kubeconfig%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%20%26gt%3B%20capz-k8s-cluster.kubeconfig%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ealias%20%3CSPAN%20class%3D%22cm-def%22%3Ek-capz%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22k%20--kubeconfig%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%2FSetup%2Fcapz-k8s-cluster.kubeconfig%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ealias%20%3CSPAN%20class%3D%22cm-def%22%3Ehelm-capz%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22helm%20--kubeconfig%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%2FSetup%2Fcapz-k8s-cluster.kubeconfig%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Install%20Calico%20n%2Fw%20plugin%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20apply%20%3CSPAN%20class%3D%22cm-attribute%22%3E-f%3C%2FSPAN%3E%20https%3A%2F%2Fraw.githubusercontent.com%2Fkubernetes-sigs%2Fcluster-api-provider-azure%2Fmaster%2Ftemplates%2Faddons%2Fcalico.yaml%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Add%20cluster%20Admin%20User%2C%20Context%20and%20make%20it%20the%20Current%20one%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20set-context%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E-admin%3C%2FSPAN%3E%40%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--user%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E-admin%3C%2FSPAN%3E%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--cluster%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20use-context%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E-admin%3C%2FSPAN%3E%40%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--1984474126%22%20id%3D%22toc-hId--1928941776%22%3E%3CSPAN%20class%3D%22md-plain%22%3EConnect%20to%20the%20Cluster%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3Ek-capz%20config%20get-contexts%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20no%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20po%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Label%20Nodes%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20label%20%3CSPAN%20class%3D%22cm-builtin%22%3Enode%3C%2FSPAN%3E%2F%3CNODE-NAME%3E%20%3CSPAN%20class%3D%22cm-def%22%3Eagentpool%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapzsyspool%20%3CSPAN%20class%3D%22cm-attribute%22%3E--overwrite%3C%2FSPAN%3E%3C%2FNODE-NAME%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20label%20%3CSPAN%20class%3D%22cm-builtin%22%3Enode%3C%2FSPAN%3E%2F%3CNODE-NAME%3E%20%3CSPAN%20class%3D%22cm-def%22%3Eagentpool%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapzsyspool%20%3CSPAN%20class%3D%22cm-attribute%22%3E--overwrite%3C%2FSPAN%3E%3C%2FNODE-NAME%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Create%20Namespaces%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20ns%20db%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20ns%20capz-workshop-dev%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20ns%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzIngControllerNSName%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20ns%20smoke%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-1201200648%22%20id%3D%22toc-hId-1256732998%22%3E%3CSPAN%20class%3D%22md-plain%22%3EConfigure%20CAPZ%20Cluster%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Create%20Other%20Users%20-%201%20Cluster%20Admin%2C%201%20Architect%2FManager%2C%201%20Developer%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20sa%20capz-ca-sa%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20sa%20capz-manager-sa%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20sa%20capz-developer-sa%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20get-contexts%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20secrets%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Set%20Cluster%20Admin%20Context%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20secrets%2F%3CCAPZ-CA-SA-SECRET_NAME%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-o%3C%2FSPAN%3E%20yaml%3C%2FCAPZ-CA-SA-SECRET_NAME%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3Etoken%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(echo%20%3CVAL%3E%20%7C%20base64%20--decode)%3C%2FVAL%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20set-credentials%20capz-ca-sa%20%3CSPAN%20class%3D%22cm-attribute%22%3E--token%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24token%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20set-context%20capz-ca-sa-context%20%3CSPAN%20class%3D%22cm-attribute%22%3E--user%3C%2FSPAN%3E%20capz-ca-sa%20%3CSPAN%20class%3D%22cm-attribute%22%3E--cluster%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Switch%20to%20Cluster%20Admin%20context%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20use-context%20capz-ca-sa-context%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Set%20Manager%20Context%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20secrets%2F%3CCAPZ-MANAGER-SA-SECRET_NAME%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-o%3C%2FSPAN%3E%20yaml%3C%2FCAPZ-MANAGER-SA-SECRET_NAME%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3Etoken2%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(echo%20%3CVAL%3E%20%7C%20base64%20--decode)%3C%2FVAL%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20set-credentials%20capz-manager-sa%20%3CSPAN%20class%3D%22cm-attribute%22%3E--token%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24token2%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20set-context%20capz-manager-sa-context%20%3CSPAN%20class%3D%22cm-attribute%22%3E--user%3C%2FSPAN%3E%20capz-manager-sa%20%3CSPAN%20class%3D%22cm-attribute%22%3E--cluster%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Switch%20to%20Manager%20context%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20use-context%20capz-manager-sa-context%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Set%20Developer%20Context%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20%3CSPAN%20class%3D%22cm-builtin%22%3Eget%3C%2FSPAN%3E%20secrets%2F%3CCAPZ-DEVELOPER-SA-SECRET_NAME%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E-o%3C%2FSPAN%3E%20yaml%3C%2FCAPZ-DEVELOPER-SA-SECRET_NAME%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3Etoken3%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-quote%22%3E%24(echo%20%3CVAL%3E%20%7C%20base64%20--decode)%3C%2FVAL%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20set-credentials%20capz-developer-sa%20%3CSPAN%20class%3D%22cm-attribute%22%3E--token%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24token3%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20set-context%20capz-developer-sa-context%20%3CSPAN%20class%3D%22cm-attribute%22%3E--user%3C%2FSPAN%3E%20capz-developer-sa%20%3CSPAN%20class%3D%22cm-attribute%22%3E--cluster%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Switch%20to%20Developer%20context%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20config%20use-context%20capz-developer-sa-context%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--606253815%22%20id%3D%22toc-hId--550721465%22%3E%3CSPAN%20class%3D%22md-plain%22%3EDeploy%20Tools%20%26amp%3B%20Services%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CH5%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-2010341737%22%20id%3D%22toc-hId-2065874087%22%3E%3CSPAN%20class%3D%22md-plain%22%3EStorage%20Class%3C%2FSPAN%3E%3C%2FH5%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Deploy%20Storage%20class%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm%20create%20sc-chart%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm-capz%20install%20sc-chart%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20default%20%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%2FHelms%2Fsc-chart%2F%20%3CSPAN%20class%3D%22cm-attribute%22%3E-f%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%2FHelms%2Fsc-chart%2Fvalues.yaml%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Deploy%20RBAC%20-%20DEV%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm-capz%20install%20rbac-chart%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20capz-workshop-dev%20%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%2FHelms%2Frbac-chart%2F%20%3CSPAN%20class%3D%22cm-attribute%22%3E-f%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%2FHelms%2Frbac-chart%2Fvalues-dev.yaml%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Deploy%20RBAC%20-%20Smoke%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm-capz%20install%20rbac-chart%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20smoke%20%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%2FHelms%2Frbac-chart%2F%20%3CSPAN%20class%3D%22cm-attribute%22%3E-f%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%2FHelms%2Frbac-chart%2Fvalues-smoke.yaml%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-73804555%22%20id%3D%22toc-hId-129336905%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EIngress%20Controller%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Deploy%20Ingress%20-%20DEV%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20secret%20tls%20capz-workshop-tls-secret%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20capz-workshop-dev%20%3CSPAN%20class%3D%22cm-attribute%22%3E--cert%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%2FCerts%2F%3CCERT-FILE-NAME%3E.pem%22%3C%2FCERT-FILE-NAME%3E%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--key%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%2FCerts%2F%3CCERT-FILE-NAME%3E.key%22%3C%2FCERT-FILE-NAME%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm-capz%20install%20ingress-chart%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20capz-workshop-dev%20%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%2FHelms%2Fingress-chart%2F%20%3CSPAN%20class%3D%22cm-attribute%22%3E-f%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%2FHelms%2Fingress-chart%2Fvalues-dev-tls.yaml%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Deploy%20Ingress%20-%20Smoke%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20secret%20tls%20capz-workshop-tls-secret%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20smoke%20%3CSPAN%20class%3D%22cm-attribute%22%3E--cert%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%2FCerts%2F%3CCERT-FILE-NAME%3E.pem%22%3C%2FCERT-FILE-NAME%3E%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--key%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%2FCerts%2F%3CCERT-FILE-NAME%3E.key%22%3C%2FCERT-FILE-NAME%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm-capz%20install%20ingress-chart%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20smoke%20%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%2FHelms%2Fingress-chart%2F%20%3CSPAN%20class%3D%22cm-attribute%22%3E-f%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24baseFolderPath%3C%2FSPAN%3E%2FHelms%2Fingress-chart%2Fvalues-smoke.yaml%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CDIV%20id%3D%22tinyMceEditormonojit18_0%22%20class%3D%22mceNonEditable%20lia-copypaste-placeholder%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%20md-focus%22%20id%3D%22toc-hId--1733649908%22%20id%3D%22toc-hId--1678117558%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EDeploy%20%26amp%3B%20Configure%20Application%20Gateway%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CUL%20class%3D%22ul-list%22%20data-mark%3D%22-%22%3E%0A%3CLI%20class%3D%22md-list-item%20md-focus-container%22%3E%3CP%20class%3D%22md-end-block%20md-p%20md-focus%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EDeploy%20Application%20Gateway%20either%20from%20Portal%20or%20through%20ARM%2FBicep%20template%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EThis%20article%20does%20not%20provide%20details%20of%20how%20to%20configure%20Application%20Gateway%20to%20work%20with%20K8s%20cluster%20in%20the%20backend%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-plain%22%3EPlease%20refer%20these%20links%20for%20a%20detailed%20discussion%3C%2FSPAN%3E%3C%2FP%3E%0A%3CUL%20class%3D%22ul-list%22%20data-mark%3D%22-%22%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-meta-i-c%20%20md-link%22%3E%3CA%20href%3D%22https%3A%2F%2Fcodemongers.wordpress.com%2F2021%2F08%2F11%2Fsecure-apis-on-azure-with-aks-and-application-gateway%2F%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3E%3CSPAN%20class%3D%22md-plain%22%3ESecure%20APIs%20on%20Azure%20with%20AKS%20and%20Application%20Gateway%3C%2FSPAN%3E%3C%2FA%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-meta-i-c%20%20md-link%22%3E%3CA%20href%3D%22https%3A%2F%2Fcodemongers.wordpress.com%2F2022%2F01%2F28%2Fsecure-microservices-in-aks-with-apim-and-application-gateway%2F%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3E%3CSPAN%20class%3D%22md-plain%22%3ESecure%20Microservices%20in%20AKS%20with%20APIM%20and%20Application%20Gateway%3C%2FSPAN%3E%3C%2FA%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%20md-focus-container%22%3E%3CP%20class%3D%22md-end-block%20md-p%20md-focus%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EBackend%20pool%20points%20to%20Private%20IP%20of%20Ingress%20Controller%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3CP%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22capz-appgw-bkpool.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F354904iCF74555BC0C9FA03%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22capz-appgw-bkpool.png%22%20alt%3D%22capz-appgw-bkpool.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH4%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-753862925%22%20id%3D%22toc-hId-809395275%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EDeploy%20Microservices%3C%2FSPAN%3E%3C%2FH4%3E%0A%3CH5%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--924508819%22%20id%3D%22toc-hId--868976469%22%3E%3CSPAN%20class%3D%22md-plain%22%3ESmoke%3C%2FSPAN%3E%3C%2FH5%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Create%20Secrets%20for%20ACR%20-%20Smoke%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20secret%20docker-registry%20capz-acr-secret%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20smoke%20%3CSPAN%20class%3D%22cm-attribute%22%3E--docker-server%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzACRName%3C%2FSPAN%3E.azurecr.io%20%3CSPAN%20class%3D%22cm-attribute%22%3E--docker-username%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzSPAppId%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-attribute%22%3E--docker-password%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3E%24capzSPPassword%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Install%20Smoke%20chart%20-%20Smoke%20Namespace%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm-capz%20install%20smoke-chart%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20smoke%20%3CSPAN%20class%3D%22cm-def%22%3E%24testFolderPath%3C%2FSPAN%3E%2FHelms%2Fsmoke-chart%2F%20%3CSPAN%20class%3D%22cm-attribute%22%3E-f%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24testFolderPath%3C%2FSPAN%3E%2FHelms%2Fsmoke-chart%2Fvalues-smoke.yaml%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CH5%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-1563004014%22%20id%3D%22toc-hId-1618536364%22%3E%3CSPAN%20class%3D%22md-plain%22%3ERatings%3C%2FSPAN%3E%3C%2FH5%3E%0A%3CH6%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--115367730%22%20id%3D%22toc-hId--59835380%22%3E%3CSPAN%20class%3D%22md-plain%22%3ERatings%20API%3C%2FSPAN%3E%3C%2FH6%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Clone%20Source%20code%20on%20local%20environment%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Egit%3C%2FSPAN%3E%20clone%20https%3A%2F%2Fgithub.com%2Fmonojit18%2Fmslearn-aks-workshop-ratings-api.git%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Bulid%20and%20Push%20dokcer%20image%20to%20ACR%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20acr%20build%20%3CSPAN%20class%3D%22cm-attribute%22%3E-t%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzACRName%3C%2FSPAN%3E.azurecr.io%2Fratings-api%3Av1.0.0%20%3CSPAN%20class%3D%22cm-attribute%22%3E-r%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzACRName%3C%2FSPAN%3E%20.%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Deploy%20MongoDB%20container%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm-capz%20repo%20add%20bitnami%20https%3A%2F%2Fcharts.bitnami.com%2Fbitnami%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm-capz%20install%20ratingsdb%20bitnami%2Fmongodb%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20db%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--set%3C%2FSPAN%3E%20auth%3CSPAN%20class%3D%22cm-def%22%3E.username%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Eratingsuser%2Cauth%3CSPAN%20class%3D%22cm-def%22%3E.password%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Eratingspwd%2Cauth%3CSPAN%20class%3D%22cm-def%22%3E.database%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Eratingsdb%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--set%3C%2FSPAN%3E%20controller.nodeSelector%3CSPAN%20class%3D%22cm-def%22%3E.agentpool%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapzsyspool%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--set%3C%2FSPAN%3E%20controller.defaultBackend.nodeSelector%3CSPAN%20class%3D%22cm-def%22%3E.agentpool%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Ecapzsyspool%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--set%3C%2FSPAN%3E%20persistence%3CSPAN%20class%3D%22cm-def%22%3E.storageClass%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3Emanaged-premium%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Deploy%20Ratings%20Api%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ek-capz%20create%20secret%20generic%20capz-workshop-mongo-secret%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20capz-workshop-dev%20%5C%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-attribute%22%3E--from-literal%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-def%22%3EMONGOCONNECTION%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-operator%22%3E%3D%3C%2FSPAN%3E%3CSPAN%20class%3D%22cm-string%22%3E%22mongodb%3A%2F%2Fratingsuser%3Aratingspwd%40ratingsdb-mongodb.db%3A27017%2Fratingsdb%22%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm-capz%20install%20ratingsapi-chart%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20capz-workshop-dev%20.%2Fratingsapi-chart%2F%20%3CSPAN%20class%3D%22cm-attribute%22%3E-f%3C%2FSPAN%3E%20.%2Fratingsapi-chart%2FCAPZ%2Fvalues-dev.yaml%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CH6%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--1922822193%22%20id%3D%22toc-hId--1867289843%22%3E%3CSPAN%20class%3D%22md-plain%22%3ERatings%20Web%3C%2FSPAN%3E%3C%2FH6%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Clone%20Source%20code%20on%20local%20environment%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-builtin%22%3Egit%3C%2FSPAN%3E%20clone%20https%3A%2F%2Fgithub.com%2Fmonojit18%2Fmslearn-aks-workshop-ratings-web.git%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%3CSPAN%20class%3D%22cm-comment%22%3E%23%20Bulid%20and%20Push%20dokcer%20image%20to%20ACR%3C%2FSPAN%3E%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Eaz%20acr%20build%20%3CSPAN%20class%3D%22cm-attribute%22%3E-t%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzACRName%3C%2FSPAN%3E.azurecr.io%2Fratings-web%3Av1.0.0%20%3CSPAN%20class%3D%22cm-attribute%22%3E-r%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzACRName%3C%2FSPAN%3E%20.%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3Ehelm-capz%20install%20ratingsweb-chart%20%3CSPAN%20class%3D%22cm-attribute%22%3E-n%3C%2FSPAN%3E%20capz-workshop-dev%20.%2Fratingsweb-chart%2F%20%3CSPAN%20class%3D%22cm-attribute%22%3E-f%3C%2FSPAN%3E%20.%2Fratingsweb-chart%2FCAPZ%2Fvalues-dev.yaml%3C%2FSPAN%3E%3CBR%20%2F%3E%3CSPAN%3E%E2%80%8B%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH3%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId-875604424%22%20id%3D%22toc-hId-931136774%22%3E%3CSPAN%20class%3D%22md-plain%22%3ETest%3C%2FSPAN%3E%3C%2FH3%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3EIn%20Browser%3A%20http(s)%3A%2F%2F%3CAPPLICATION-GATEWAY-PUBLIC-IP-DOMAIN-NAME%3E%2F%3C%2FAPPLICATION-GATEWAY-PUBLIC-IP-DOMAIN-NAME%3E%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%20class%3D%22md-end-block%20md-p%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CH3%20class%3D%22md-end-block%20md-heading%22%20id%3D%22toc-hId--931850039%22%20id%3D%22toc-hId--876317689%22%3E%3CSPAN%20class%3D%22md-plain%22%3ECleanup%3C%2FSPAN%3E%3C%2FH3%3E%0A%3CPRE%20class%3D%22md-fences%20md-end-block%20ty-contain-cm%20modeLoaded%22%20lang%3D%22bash%22%20spellcheck%3D%22false%22%3E%3CSPAN%3Ekubectl%20delete%20cluster%20%3CSPAN%20class%3D%22cm-def%22%3E%24capzClusterName%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH2%20class%3D%22md-end-block%20md-heading%20md-focus%22%20id%3D%22toc-hId-1426580075%22%20id%3D%22toc-hId-1482112425%22%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3EReferences%3C%2FSPAN%3E%3C%2FH2%3E%0A%3CUL%20class%3D%22ul-list%22%20data-mark%3D%22-%22%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-meta-i-c%20%20md-link%22%3E%3CA%20href%3D%22https%3A%2F%2Fcluster-api.sigs.k8s.io%2Fintroduction.html%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3E%3CSPAN%20class%3D%22md-plain%22%3ECAPZ%20Introduction%3C%2FSPAN%3E%3C%2FA%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-meta-i-c%20%20md-link%22%3E%3CA%20href%3D%22https%3A%2F%2Fcluster-api.sigs.k8s.io%2Fuser%2Fquick-start.html%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3E%3CSPAN%20class%3D%22md-plain%22%3ECAPZ%20Quick%20Start%3C%2FSPAN%3E%3C%2FA%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-meta-i-c%20%20md-link%22%3E%3CA%20href%3D%22https%3A%2F%2Fkubernetes.io%2Fdocs%2Fhome%2F%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3E%3CSPAN%20class%3D%22md-plain%22%3EK8s%20docs%3C%2FSPAN%3E%3C%2FA%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-meta-i-c%20%20md-link%22%3E%3CA%20href%3D%22https%3A%2F%2Fcodemongers.wordpress.com%2F2021%2F08%2F11%2Fsecure-apis-on-azure-with-aks-and-application-gateway%2F%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3E%3CSPAN%20class%3D%22md-plain%22%3ESecure%20APIs%20on%20Azure%20with%20AKS%20and%20Application%20Gateway%3C%2FSPAN%3E%3C%2FA%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22md-list-item%22%3E%3CP%20class%3D%22md-end-block%20md-p%22%3E%3CSPAN%20class%3D%22md-meta-i-c%20%20md-link%22%3E%3CA%20href%3D%22https%3A%2F%2Fcodemongers.wordpress.com%2F2022%2F01%2F28%2Fsecure-microservices-in-aks-with-apim-and-application-gateway%2F%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3E%3CSPAN%20class%3D%22md-plain%22%3ESecure%20Microservices%20in%20AKS%20with%20APIM%20and%20Application%20Gateway%3C%2FSPAN%3E%3C%2FA%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%3C%2FLINGO-BODY%3E%3CLINGO-TEASER%20id%3D%22lingo-teaser-3122730%22%20slang%3D%22en-US%22%3E%3CP%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3ECluster%20API%20is%20a%20Kubernetes%20community%20project%20started%20by%20the%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-meta-i-c%20%20md-link%22%3E%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2Fkubernetes%2Fcommunity%2Ftree%2Fmaster%2Fsig-cluster-lifecycle%23readme%22%20rel%3D%22noopener%20noreferrer%22%20target%3D%22_blank%22%3E%3CSPAN%20class%3D%22md-plain%22%3EKubernetes%20Special%20Interest%20Group%20(SIG)%3C%2FSPAN%3E%3C%2FA%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22md-plain%20md-expand%22%3E%20which%20brings%20declarative%2C%20Kubernetes-style%20APIs%20to%20cluster%20creation%2C%20configuration%20and%20management.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-TEASER%3E
Co-Authors
Version history
Last update:
‎Mar 10 2022 04:42 PM
Updated by: