<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>6. Azure Workshop on Terraform Basics on Azure Training</title><link>/docs/06_azure/</link><description>Recent content in 6. Azure Workshop on Terraform Basics on Azure Training</description><generator>Hugo</generator><language>en</language><atom:link href="/docs/06_azure/index.xml" rel="self" type="application/rss+xml"/><item><title>6.1. Kubernetes / AKS</title><link>/docs/06_azure/1-kubernetes-aks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/06_azure/1-kubernetes-aks/</guid><description>&lt;h2 id="step-611-provision-the-first-resource"&gt;Step 6.1.1: Provision the first resource&lt;/h2&gt;
&lt;p&gt;Create a new file named &lt;code&gt;main.tf&lt;/code&gt; and add the following content:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-terraform" data-lang="terraform"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;provider&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;azurerm&amp;#34;&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;subscription_id&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#204a87"&gt;var&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;subscription_id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;features&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;resource_group&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;prevent_deletion_if_contains_resources&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;resource&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;azurerm_resource_group&amp;#34;&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;default&amp;#34;&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;name&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;rg-&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;local&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;infix&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;location&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#204a87"&gt;var&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;location&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;data&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;azurerm_subscription&amp;#34;&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;current&amp;#34;&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Create a new file named &lt;code&gt;variables.tf&lt;/code&gt; and add the following content:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-terraform" data-lang="terraform"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;locals&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;infix&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#204a87"&gt;var&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;purpose&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;-&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#204a87"&gt;var&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;environment&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;variable&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;subscription_id&amp;#34;&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;variable&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;purpose&amp;#34;&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;variable&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;environment&amp;#34;&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;variable&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;location&amp;#34;&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Create a new configuration file file named &lt;code&gt;config/dev.tfvars&lt;/code&gt; and add the following content:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-terraform" data-lang="terraform"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;subscription_id&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;c1b34118-6a8f-4348-88c2-b0b1f7350f04&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;purpose&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;YOUR_USERNAME&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;environment&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;dev&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;location&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;westeurope&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Please replace &lt;code&gt;YOUR_USERNAME&lt;/code&gt; with the username assigned to you for this workshop.&lt;/p&gt;</description></item><item><title>6.2. Remote State</title><link>/docs/06_azure/2-remote-state/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/06_azure/2-remote-state/</guid><description>&lt;h2 id="step-621-create-a-storage"&gt;Step 6.2.1: Create a storage&lt;/h2&gt;
&lt;p&gt;The Azure storage account and storage container to store the Terraform state are not managed by Terraform; it is a
chicken and egg problem we resolve by using the &lt;code&gt;az&lt;/code&gt; CLI as followed:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export NAME=YOUR_USERNAME
export ACCOUNT=tfstate$RANDOM
&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;az group create --location westeurope --name rg-terraform-&lt;span style="color:#000"&gt;$NAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;az storage account create --name &lt;span style="color:#000"&gt;$ACCOUNT&lt;/span&gt; --resource-group rg-terraform-&lt;span style="color:#000"&gt;$NAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;az storage container create --resource-group rg-terraform-&lt;span style="color:#000"&gt;$NAME&lt;/span&gt; --account-name &lt;span style="color:#000"&gt;$ACCOUNT&lt;/span&gt; --name terraform-state --public-access off --auth-mode login
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87"&gt;echo&lt;/span&gt; &lt;span style="color:#000"&gt;$ACCOUNT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Please replace &lt;code&gt;YOUR_USERNAME&lt;/code&gt; with the username assigned to you for this workshop.&lt;/p&gt;</description></item><item><title>6.3. Load Balancer</title><link>/docs/06_azure/3-load-balancer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/06_azure/3-load-balancer/</guid><description>&lt;h2 id="step-631-create-a-kubernetes-namespace"&gt;Step 6.3.1: Create a kubernetes namespace&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 classDef red fill:#f96;
 aad(AD Group) --&amp;gt; |permission|aAks
 aNode --&amp;gt; |use|dSub
 subgraph rg: aks
 aAks(aks) --&amp;gt; |logs|aLaw(law)
 aAks --&amp;gt; aNode(nodes)
 aAcr(acr) --&amp;gt; |images|aNode
 end
 subgraph rg: net
 dNet(vnet) --&amp;gt; dSub(subnet)
 end
 aAks --&amp;gt; aks
 subgraph aks
 cIngress(ns: nginx-ingress):::red
 end&lt;/pre&gt;
&lt;p&gt;Add the following content below the existing &lt;code&gt;provider&lt;/code&gt; block of &lt;code&gt;main.tf&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-terraform" data-lang="terraform"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;provider&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;kubernetes&amp;#34;&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;host&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#000"&gt;azurerm_kubernetes_cluster&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;aks&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;kube_admin_config&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;host&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;client_certificate&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#204a87"&gt; base64decode&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;azurerm_kubernetes_cluster&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;aks&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;kube_admin_config&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;client_certificate&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;client_key&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#204a87"&gt; base64decode&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;azurerm_kubernetes_cluster&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;aks&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;kube_admin_config&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;client_key&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;cluster_ca_certificate&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#204a87"&gt; base64decode&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;azurerm_kubernetes_cluster&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;aks&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;kube_admin_config&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;cluster_ca_certificate&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Create a new file named &lt;code&gt;nginx_ingress.tf&lt;/code&gt; and add the following content:&lt;/p&gt;</description></item><item><title>6.4. SSL Certificates</title><link>/docs/06_azure/4-ssl-certificates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/06_azure/4-ssl-certificates/</guid><description>&lt;h2 id="step-641-cert-manager-installation"&gt;Step 6.4.1: Cert Manager installation&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 classDef red fill:#f96
 subgraph rg: aks
 aAks(aks)
 aIp(public ip)
 end
 dDns --&amp;gt; aIp
 subgraph rg: dns
 dDns(dns)
 end
 aAks --&amp;gt; aks
 subgraph aks
 aIp --&amp;gt; sNg
 subgraph ns: nginx-ingress
 sNg(service) --&amp;gt; pNg(pod)
 end
 subgraph ns: tests
 sTst(service) --&amp;gt; pTst(pod)
 pNg --&amp;gt; iTst(ingress) --&amp;gt; sTst
 end
 subgraph ns: cert-manager
 sCm(service):::red --&amp;gt; pCm(pod):::red
 end
 end&lt;/pre&gt;
&lt;p&gt;Create a new file named &lt;code&gt;cert_manager.tf&lt;/code&gt; and add the following content:&lt;/p&gt;</description></item><item><title>6.5. MySQL</title><link>/docs/06_azure/5-mysql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/06_azure/5-mysql/</guid><description>&lt;h2 id="step-651-configure-aks-egress-ip"&gt;Step 6.5.1: Configure AKS egress IP&lt;/h2&gt;
&lt;p&gt;By default, AKS routes traffic to the internet via a (randomly assigned) Azure public IP. For some scenarios like
our MySQL instance, we want to whitelist the source IP to restrict access to the services.&lt;/p&gt;
&lt;p&gt;Add the following content below the resource &lt;code&gt;azurerm_public_ip.aks_lb_ingress&lt;/code&gt; in &lt;code&gt;aks.tf&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-terraform" data-lang="terraform"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;// optional: only needed to control AKS egress IP(s)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;&lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;resource&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;azurerm_public_ip&amp;#34;&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;aks_lb_egress&amp;#34;&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;name&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;pip-&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;local&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;infix&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;-aks-lb-egress&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;location&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#204a87"&gt;var&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;location&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;resource_group_name&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#000"&gt;azurerm_resource_group&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;aks&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;allocation_method&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;Static&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000"&gt;sku&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;Standard&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To configure AKS to use a static egress IP, modify the &lt;code&gt;azurerm_kubernetes_cluster.aks&lt;/code&gt; resource in &lt;code&gt;aks.tf&lt;/code&gt;
and replace the &lt;code&gt;network_profile&lt;/code&gt; block with the following content:&lt;/p&gt;</description></item><item><title>6.6. Demo App</title><link>/docs/06_azure/6-demo-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/06_azure/6-demo-app/</guid><description>&lt;h2 id="step-661-deploy-a-workload-container"&gt;Step 6.6.1: Deploy a workload container&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 classDef red fill:#f96
 subgraph rg: aks
 aAks(aks)
 aIp(public ip)
 end
 dDns --&amp;gt; aIp
 subgraph rg: dns
 dDns(dns)
 end
 aAks --&amp;gt; aks
 subgraph aks
 aIp --&amp;gt; sNg
 subgraph ns: nginx-ingress
 sNg(service) --&amp;gt; pNg(pod)
 end
 subgraph ns: workload
 iAc --&amp;gt; sAc(service):::red --&amp;gt; pAc(pod):::red
 pNg --&amp;gt; iAc(ingress):::red
 end
 end
 pAc --&amp;gt; mFire
 subgraph rg: db
 mServer(mysql) --&amp;gt; mDb(database)
 mFire(firewall) --&amp;gt; mDb
 end&lt;/pre&gt;
&lt;p&gt;To test the setup end-to-end, we deploy an example application on Kubernetes. The app exposes a web service on port
5000 and writes sample records to the MySQL.&lt;/p&gt;</description></item><item><title>6.7. Container Instances (optional)</title><link>/docs/06_azure/7-container-instances/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/06_azure/7-container-instances/</guid><description>&lt;p&gt;Sometimes, you need to run a containerized application outside of your AKS cluster—for example, a monitoring dashboard,
health checker, or any lightweight utility.&lt;br&gt;
Or, you might just want to run a single container without the complexity and overhead of managing AKS.&lt;/p&gt;
&lt;p&gt;For these scenarios, Azure provides Azure Container Instances (ACI)—a serverless container runtime that allows you to
run containers in an isolated, standalone environment with minimal setup.&lt;/p&gt;
&lt;p&gt;This lab provides a simple example to demonstrate how to achieve this.&lt;/p&gt;</description></item></channel></rss>