An Azure Kubernetes Service (AKS) with a static public IP address for egress traffic.
╔══════════════════════════════════════════════════════════════╗ ╔══════════════╗
║ Azure ║ ║ https://... ║
║ ┌────────────────────┐ ┌────────────┐ ║ ║ ║
║ │░ Kuebernetes(AKS) ░│ ┌─<─┤ Inbound IP ├<─────────────────╟<─────https───────╢ web-browser ║
║ │░░░░░░░░░░░░░░░░░░░░│ │ └────────────┘ ║ ╚═════╤══╤═════╝
║ │░░░ Ingress Nginx <─┼<──┘ ║ ═╧══╧═
║ │░░░░░░░░░░░░░░░░░░░░│ ┌────────────┐ ┌────────────┐ ║
║ │░░░░░░░░░░ secrets ░│ │LogAnalytics│ │ StorageAcc │ ║
║ │░░░░░░░░░░░░░░░░░░░░│ └────────────┘ └────────────┘ ║
║ │░░░░░░░░░░░░░░░░░░░░│ ┌─────────────╢
║ │░░░░░░░░░░░░░░░░░░░░┼>───────────────────>────┤ Outbound IP ║
║ │░░░░░░░░░░░░░░░░░░░░│ └─────────────╢
║ └────────────────────┘ ║
╚══════════════════════════════════════════════════════════════╝
- Hardcoded Kubernetes version: 1.20.5
- Hardcoded VM size for nodes: Standard_B2s (2 vCPU, 4GiB memory)
These values can be chenged in deploy.sh script.
Access to code repository in GitHub https://github.com/mchudinov/K8sAzureAzCli.git
This instruction assumes that you use Azure Cloud Shell
In order to use this instruction from a local environment, the following tools are required:
- Azure CLI version >= 2.8
- git
- kubectl - Kubernetes command line tool
- Bash shell
Open Azure Cloud Shell https://shell.azure.com in a web-browser and login.
git clone https://github.com/mchudinov/K8sAzureAzCli.git
cd K8sAzureAzCli
./deploy.sh -c mytestk8s -n 3 -r westeurope
The keys are:
- c) Cluster name
- n) Number of nodes (default 3)
- r) Azure region (default WestEurope)
After a couple of minutes a new Kubernetes cluster will be ready.
Deployment script places all the created resource in a resource groups rg-<cluster_name>.
az aks get-credentials --name <AKS_NAME> --resource-group <RESOURCE_GROUP>
This command will run a tiny Alpine linux on a pode inside the cluster:
kubectl run -it --rm checkip --image alpine
Then from inside the Alpine linux install a curl program.
apk --no-cache add curl
And finally check the outging IP on the public service checkip.dyndns.org.
curl checkip.dyndns.org
<html><head><title>Current IP Check</title></head><body>Current IP Address: 40.121.183.52</body></html>
The IP address must be the same as created by the template.
Then exit the Alpine:
exit
Alpine pod will be immidiately automatically destroed after exit.
kubectl apply -f interactive.yaml
kubectl get csidrivers
kubectl describe csidriver secrets-store.csi.k8s.io
kubectl get pods -l app=secrets-store-csi-driver
Use destroy.sh script with cluster name as parameter
For example:
./destroy.sh -c mytestk8s
If destroy.sh script fails everything that was created can be easily erased manyally. Just delete the resource group created by deployment script:
az group delete --resource-group rg-<cluster_name>
git reset --hard
rm -rf K8sAzureAzCli