Post

Private AKS plus userDefinedRouting létrehozása AzureCLI-al

Azure Kubernetes Services-el (AKS) gyorsan és egyszerűen hozzájuthatunk egy managelt kubernetes szolgáltatáshoz. Pár kattintás után már csak a produktummal kell foglalkoznunk, nem kell foglalkozni semmi mással. Teszt környezetben persze mindent szabad, de vállalati környezetben azért nem mindenki szereti, ha olyan AKS-re rakják ki az emeberek az alkalmazásokat, aminek a hálózati oldala nem kontrollált.
Erre a problémára a userDefinedRouting paraméter lehet az egyik megoldás, így meg tudjuk adni, hogy melyik már létező Vnet subnet-jét akarjuk használni, mint kommunikációs csatorna és minden komunikációnk megejelenhet a központi tűzfalunkon. Haználata esetén nem szükséges a Publikus Ip cím sem a cluster-nek. Extra feltétel, hogy olyan subnet-re van szükség, amin van route tábla is, mivel abba fogja betenni a szükséges route bejegyzéseket a mi központi, általában 0.0.0.0/0 mellé.

Előfeltételek

A környezet létrehozásához a következőkre van szükség:

  • Service Principal (SP)
  • Azure DevOps regisztráció
  • Azure előfizetés amibe van pár $

Cél

Olyan AKS létrehozása, mely nem igényel saját publikus erőforrást. Minden egyes kommunikáció, amely elhagyja a Vnet-et, az megjelenjen a központi tűzfalon is. Ezen felül IP-cím spórolás céljából a cluster kubernet-et használjon.

Előkészületek

Ebben a példában a Vnet már adott, a központi management biztosít egy használható subnet-et, mely internet irányban valamilyen tűzfalba vezet, de ez engedi a control plane kommunikációját is kifelé az anyahajó felé ;).

Ezen felül még szükségünk lesz, de mi hozzuk létre:

  • resource group
  • user assigned managed identity-re (MI) is, mely nevében cluster tud futni.(lehet service principal is, de így nem kell cserélgetni a secret-et)
  • majd ennek az MI-nek contributor jogosultság adunk
1
2
3
4
5
6
7
8
9
10
11
12
$subscriptionID = "11111111-1111-1111-1111-111111111111"
$location = "westeurope"
$rgName = "aks"
$miName = "mi-aks"
$aksName = "ottok8spriv"
$vNetID = "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/Vnet/providers/Microsoft.Network/virtualNetworks/xyproject/subnets/default"

$group = az group create --name $rgName --location $location | ConvertFrom-Json

$id = az identity create -g $group.name -n $miName | ConvertFrom-Json

az role assignment create  --assignee-object-id $id.principalId  --role 'Contributor' --scope /subscriptions/$subscriptionID

Igaz a felhőt villámgyorsnak és korlátlannak hisszük, de végső soron ott is csak timer job-ok lehetnek, ezért itt terheltség függvényében lehet kell várni 10-20mmásodpercet, hogy propagálódjon a felhasználó és a jogosultsága.

Ezután már létre is hozhatjuk a cluster-ünket.

1
az aks create -n $aksName -g $rgName --load-balancer-sku standard --node-osdisk-type Ephemeral --node-osdisk-size 48 --enable-private-cluster --vnet-subnet-id $vNetID --generate-ssh-keys --enable-managed-identity --assign-identity $id.id --disable-public-fqdn --outbound-type userDefinedRouting --node-count 1

Ha mindnent jól csináltunk és a tűzfal is átengedi azt, amit át kell neki, akkor pár perc múlva már akár használatba is vehetjük úk cluster-ünket.

Reméljük, hogy a vnet integrálás gyorsan kijön GA-be, és egyszerűbben lehet majd private cluster-eket létrehozni ;)

This post is licensed under CC BY 4.0 by the author.