Izolált hálózatú Azure Kubernetes Service-fürt létrehozása

A szervezetek általában szigorú biztonsági és megfelelőségi követelményekkel rendelkeznek a kimenő (kimenő) hálózati forgalom fürtből való szabályozásához az adatkiszivárgás kockázatának kiküszöbölése érdekében. Alapértelmezés szerint a standard SKU Azure Kubernetes Service (AKS) fürtök korlátlan kimenő internet-hozzáférést biztosítanak. A hálózati hozzáférés ezen szintje lehetővé teszi, hogy a futtatott csomópontok és szolgáltatások szükség szerint hozzáférjenek a külső erőforrásokhoz. Ha korlátozni szeretné a kimenő forgalmat, korlátozott számú portnak és címnek kell elérhetőnek lennie a fürt kifogástalan karbantartási feladatainak fenntartásához. Az AKS-fürtök kimenő hálózati és teljes tartománynévre vonatkozó szabályait tárgyaló fogalmi dokumentum tartalmazza az AKS-fürt számára szükséges végpontok listáját, valamint az opcionális bővítményeket és funkciókat.

A fürtből kimenő forgalom korlátozásának egyik gyakori megoldása egy tűzfaleszköz használata a forgalom tűzfalszabályok alapján történő korlátozására. A tűzfal akkor alkalmazható, ha az alkalmazás kimenő hozzáférést igényel, de ha a kimenő kéréseket ellenőrizni és védeni kell. A tűzfal kézi konfigurálása a kimenő forgalomhoz szükséges szabályokkal és teljes tartománynevekkel nehézkes folyamat, különösen akkor, ha az egyetlen követelmény egy izolált AKS klaszter létrehozása, amelynek nincsenek kimenő függőségei a klaszter rendszerindításához.

Az adatkiszivárgás kockázatának csökkentése érdekében a hálózati izolált fürt lehetővé teszi az AKS-fürt kimenő hálózati függőségek nélküli rendszerindítását, még akkor is, ha fürtösszetevőket/lemezképeket kér le a Microsoft Artifact Registryből (MAR). A fürt operátora fokozatosan állíthatja be az engedélyezett kimenő forgalmat minden olyan szcenárióhoz, amelyet szeretne engedélyezni. Ez a cikk végigvezeti a hálózati izolált fürt létrehozásának lépésein.

Mielőtt hozzákezdene

Megjegyzés:

A kimenő típus none általánosan elérhető. A kimenő típus block előzetes verzióban érhető el.

Fontos

Az AKS előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az AKS előzetes verzióihoz részleges támogatást nyújt az ügyfélszolgálat a tőle telhető legjobb módon. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:

  • Ez a cikk az Azure CLI 2.73.0-s vagy újabb verzióját igényli. Az Azure Cloud Shell használata esetén a legújabb verzió már telepítve van.
  • Ha kimenő típust aks-preview (előzetes verziót) használ, telepítse az Azure block vagy újabb verzióját.
    • Ha még nem rendelkezik a aks-preview bővítményrel, telepítse a az extension add parancs használatával.
      az extension add --name aks-preview
      
    • Ha már rendelkezik a aks-preview bővítményrel, frissítse, hogy biztosan a legújabb verzióval rendelkezzen a az extension update parancs használatával.
      az extension update --name aks-preview
      

Környezeti változók beállítása

Állítsa be a cikkben használt környezeti változókat. Az ACR-névnek globálisan egyedinek kell lennie, és csak kisbetűs alfanumerikus karaktereket kell tartalmaznia.

RESOURCE_GROUP="myResourceGroup"
LOCATION="eastus"
AKS_NAME="myAKSCluster"
VNET_NAME="myVNet"
AKS_SUBNET_NAME="aksSubnet"
ACR_SUBNET_NAME="acrSubnet"
APISERVER_SUBNET_NAME="apiServerSubnet"
REGISTRY_NAME="myregistry${RANDOM}"
CLUSTER_IDENTITY_NAME="clusterIdentity"
KUBELET_IDENTITY_NAME="kubeletIdentity"

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
  • Egy Azure-fiók, aktív előfizetéssel. Ha még nincs, hozz létre egy ingyenes fiókot, mielőtt elkezdenéd.
  • A Terraform telepítése és konfigurálása.
  • Az Azure CLI telepítve van, és be van jelentkezve a(z) az login használatával; ez az üzembe helyezés ellenőrzéséhez és a fürthöz való csatlakozáshoz használható. Telepítse Azure CLI, ha még nem rendelkezik vele.
  • kubectl telepítve a klaszterhez való csatlakozáshoz. Ha az Azure Cloud Shellt használja, kubectl már telepítve van. A helyi telepítéshez használja a az aks install-cli parancsot.
  • jq telepítve van, és a Terraform állapotának elemzésére szolgál az üzembe helyezés ellenőrzésekor. Az Azure Cloud Shellben a(z) jq már telepítve van.

Elkülönített hálózati fürt üzembe helyezése az AKS által felügyelt ACR használatával

Az AKS ebben a beállításban létrehoz, kezel és egyeztet egy ACR-erőforrást. Nem kell engedélyeket hozzárendelnie vagy kezelnie az ACR-t. Az AKS kezeli a hálózatilag elkülönített fürtben használt gyorsítótárszabályokat, a privát kapcsolatot és a privát végpontot.

Hozz létre egy elkülönített hálózati fürtöt

Hálózati elkülönített AKS-fürt létrehozásakor válasszon a következő privát fürtmódok közül: privát kapcsolatalapú vagy API Server VNet-integráció.

Állítsa be az összetevő forrását és kimenő típusát a hálózatelkülönítési követelmények alapján.

Paraméter Elfogadott értékek/effektus
--bootstrap-artifact-source Direct közvetlenül a Microsoft Artifact Registryből (MAR) tölti le a lemezképeket, és nem hálózatilag elkülönített. Cache rendszerképeket kér le egy privát ACR-ből, és el van különítve a hálózattól.
--outbound-type none nem konfigurálja a fürt kimenő kapcsolatait, így ezeket Ön konfigurálhatja. block (előzetes verzió) letiltja az összes kimenő kapcsolatot.

Hozzon létre egy privát, kapcsolaton alapuló, hálózattól elkülönített klasztert az az aks create parancs futtatásával, --bootstrap-artifact-source, --enable-private-cluster és --outbound-type paraméterekkel.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --outbound-type none --network-plugin azure --enable-private-cluster

API Server VNet-integráció

Hozzon létre egy, az API Server VNet-integrációval konfigurált hálózati izolált fürtöt az az aks create parancs futtatásával --bootstrap-artifact-source, --enable-private-clusterés --enable-apiserver-vnet-integration--outbound-type paraméterekkel.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --outbound-type none --network-plugin azure --enable-private-cluster --enable-apiserver-vnet-integration

A meglévő AKS-fürt frissítése a hálózattól izolált típusra

Ha inkább egy meglévő AKS-fürtön szeretné engedélyezni a hálózatelkülönítést egy új fürt létrehozása helyett, használja az az aks update parancsot.

Ha egy meglévő AKS-fürtön engedélyezni szeretné a hálózati elkülönítési funkciót, először futtassa a következő parancsot a frissítéshez bootstrap-artifact-source:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache

Ezután manuálisan újra kell létrehoznia az összes meglévő csomópontkészletet:

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Megjegyzés:

Az első újraimázs befejezéséig meg kell győződnie arról, hogy a kimenő forgalom létezik. Annak ellenőrzéséhez, hogy a reimage befejeződött-e, futtassa a következőt:

NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done

Várjon, és győződjön meg arról, hogy az újraimázs befejeződik, majd futtassa a következő parancsot a frissítéshez outbound-type:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none

Fontos

Ne felejtse el azonnal újraimázni a fürt csomópontkészleteit, miután az összetevő forrását gyorsítótárba frissítette. Ellenkező esetben a funkció nem lép érvénybe a fürtre.

Elkülönített hálózati fürt üzembe helyezése saját ACR használatával

Az AKS támogatja a saját ACR (Bring Your Own - BYO) használatát. A BYO ACR-forgatókönyv támogatásához az AKS-fürt létrehozása előtt konfigurálnia kell egy privát ACR-végpontot és egy privát DNS-zónát.

Az alábbi lépések bemutatják, hogyan készítse elő ezeket az erőforrásokat:

  • Egyéni virtuális hálózat és alhálózatok az AKS-hez és az ACR-hez.
  • ACR, ACR-gyorsítótárszabály, privát végpont és privát DNS-zóna.
  • Speciális vezérlősík-identitás és kubelet-identitás.

1. lépés: A virtuális hálózat és alhálózatok létrehozása

az network vnet create  --resource-group ${RESOURCE_GROUP} --name ${VNET_NAME} --address-prefixes 192.168.0.0/16

az network vnet subnet create --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.1.0/24

SUBNET_ID=$(az network vnet subnet show --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' --output tsv)

az network vnet subnet create --name ${ACR_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.2.0/24 --private-endpoint-network-policies Disabled

2. lépés: A virtuális hálózat kimenő kapcsolatának letiltása (nem kötelező)

Tegye például priváttá az AKS-alhálózatot úgy, hogy az alapértelmezett kimenő hozzáférését false értékre állítja be.

az network vnet subnet update --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${AKS_SUBNET_NAME} --default-outbound false

Egyéb támogatott módszerekről és áttűnési szempontokról a virtuális hálózat kimenő kapcsolatának letiltása című témakörben olvashat.

3. lépés: Az ACR létrehozása és az összetevő-gyorsítótár engedélyezése

  1. Hozza létre az ACR-t, ha a nyilvános hálózati hozzáférés le van tiltva.

    az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false
    
    REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP}  --query 'id' --output tsv)
    
  2. Hozzon létre egy ACR-gyorsítótárszabályt az alábbi paranccsal, amellyel a felhasználók gyorsítótárazhatják a MAR tárolólemezképeket és bináris fájlokat az új ACR-ben. A gyorsítótárszabály nevének és az adattár nevének a következő szakaszban található útmutatást kell követnie.

    az acr cache create -n aks-managed-mcr -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "aks-managed-repository/*"
    

Megjegyzés:

A BYO ACR-ben az Ön felelőssége, hogy az ACR-gyorsítótárszabályt a fentieknek megfelelően hozza létre és karbantartsa. Ez a lépés létfontosságú a klaszterek létrehozása, működtetése és frissítése szempontjából. Ezt a gyorsítótárszabályt NEM szabad módosítani.

4. lépés: Privát végpont létrehozása az ACR-hez

az network private-endpoint create --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --subnet ${ACR_SUBNET_NAME} --private-connection-resource-id ${REGISTRY_ID} --group-id registry --connection-name myConnection

NETWORK_INTERFACE_ID=$(az network private-endpoint show --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --query 'networkInterfaces[0].id' --output tsv)

REGISTRY_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIPAddress" --output tsv)

DATA_ENDPOINT_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$LOCATION'].privateIPAddress" --output tsv)

5. lépés: Privát DNS-zóna létrehozása és rekordok hozzáadása

Hozzon létre egy privát DNS-zónát .privatelink.azurecr.io Adja hozzá a beállításjegyzék REST-végpontjának {REGISTRY_NAME}.azurecr.ioés a beállításjegyzék-adatvégpontnak {REGISTRY_NAME}.{LOCATION}.data.azurecr.ioa rekordjait.

az network private-dns zone create --resource-group ${RESOURCE_GROUP} --name "privatelink.azurecr.io"

az network private-dns link vnet create --resource-group ${RESOURCE_GROUP} --zone-name "privatelink.azurecr.io" --name MyDNSLink --virtual-network ${VNET_NAME} --registration-enabled false

az network private-dns record-set a create --name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${REGISTRY_PRIVATE_IP}

az network private-dns record-set a create --name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${DATA_ENDPOINT_PRIVATE_IP}

6. lépés: Vezérlősík és kubelet identitások létrehozása

Irányítósík identitása

az identity create --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

CLUSTER_IDENTITY_RESOURCE_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

CLUSTER_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Kubelet-identitás

az identity create --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

KUBELET_IDENTITY_RESOURCE_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

KUBELET_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Ha egy meglévő AKS-fürtöt frissít, hagyja ki az előző identitáslétrehozási parancsokat, és kérje le a meglévő kubelet-identitásobjektum-azonosítót:

KUBELET_IDENTITY_PRINCIPAL_ID=$(az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --query identityProfile.kubeletidentity.objectId -o tsv)

ACR-lekérési jogosultságok megadása a kubelet identitás számára

Ellenőrizze a beállításjegyzék szerepkör-hozzárendelési engedélyeinek módját, és válassza ki a megfelelő lekérési szerepkört. Az ABAC-kompatibilis regisztrációs adatbázisok használják a szerepkört Container Registry Repository Reader . A nem ABAC-kompatibilis regisztrációs adatbázisok használják a szerepkört AcrPull .

ROLE_ASSIGNMENT_MODE=$(az acr show --name ${REGISTRY_NAME} --resource-group ${RESOURCE_GROUP} --query roleAssignmentMode -o tsv)

if [[ "${ROLE_ASSIGNMENT_MODE}" == "rbac-abac" ]]; then
  ACR_PULL_ROLE="Container Registry Repository Reader"
else
  ACR_PULL_ROLE="AcrPull"
fi

az role assignment create --role "${ACR_PULL_ROLE}" --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Miután konfigurálta ezeket az erőforrásokat, a BYO ACR-rel létrehozhatja a hálózatilag elszigetelt AKS-fürtöt.

7. lépés: Hálózati izolált fürt létrehozása BYO ACR használatával

Hálózati elkülönített fürt létrehozásakor válasszon a következő privát fürtmódok közül: privát kapcsolatalapú vagy API Server VNet-integráció.

Állítsa be az összetevő forrását és kimenő típusát a hálózatelkülönítési követelmények alapján.

Paraméter Elfogadott értékek/effektus
--bootstrap-artifact-source Direct közvetlenül a Microsoft Artifact Registryből (MAR) tölti le a lemezképeket, és nem hálózatilag elkülönített. Cache rendszerképeket kér le egy privát ACR-ből, és el van különítve a hálózattól.
--outbound-type none nem konfigurálja a fürt kimenő kapcsolatait, így ezeket Ön konfigurálhatja. block (előzetes verzió) letiltja az összes kimenő kapcsolatot.

Hozzon létre egy privát linkkapcsolat alapú, hálózatilag izolált fürtöt, amely az ACR-hez a szükséges paraméterekkel az az aks create parancs futtatásával fér hozzá.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-private-cluster

API Server VNet-integráció

Az API Server VNet-integrációval konfigurált hálózati izolált fürt esetében először hozzon létre egy alhálózatot, és rendelje hozzá a megfelelő szerepkört a következő parancsokkal:

az network vnet subnet create --name ${APISERVER_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.3.0/24 --delegations Microsoft.ContainerService/managedClusters

export APISERVER_SUBNET_ID=$(az network vnet subnet show --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${APISERVER_SUBNET_NAME} --query id -o tsv)
az role assignment create --scope ${APISERVER_SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

az role assignment create --scope ${SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Hozzon létre egy privát hálózati izolált fürtöt, amely az API Server VNet-integrációval van konfigurálva, és az az aks create parancs futtatásával fér hozzá az ACR-hez a szükséges paraméterekkel.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-private-cluster --enable-apiserver-vnet-integration --apiserver-subnet-id ${APISERVER_SUBNET_ID}

Meglévő AKS-fürt frissítése

Ha inkább egy meglévő AKS-fürtön szeretné engedélyezni a hálózatelkülönítést egy új fürt létrehozása helyett, használja az az aks update parancsot.

A BYO ACR privát végpontjának és privát DNS-zónájának létrehozásakor használja a meglévő AKS-fürt meglévő virtuális hálózatát és alhálózatait. Amikor hozzárendeli a megfelelő ACR pull szerepkört a kubelet identitásához, a meglévő AKS-fürt meglévő kubelet-identitását használja.

Ha egy meglévő AKS-fürtön engedélyezni szeretné a hálózati elkülönítési funkciót, először futtassa a következő parancsot a frissítéshez bootstrap-artifact-source:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID}

Ezután manuálisan újra kell létrehoznia az összes meglévő csomópontkészletet:

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Megjegyzés:

Az első újraimázs befejezéséig meg kell győződnie arról, hogy a kimenő forgalom létezik. Annak ellenőrzéséhez, hogy a reimage befejeződött-e, futtassa a következőt:

NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done

Várjon, és győződjön meg arról, hogy az újraimázs befejeződik, majd futtassa a következő parancsot a frissítéshez outbound-type:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none

Fontos

Ne felejtse el azonnal újraimázni a fürt csomópontkészleteit, miután az összetevő forrását gyorsítótárba frissítette. Ellenkező esetben a funkció nem lép érvénybe a fürtre.

Az ACR-azonosító frissítése

A hálózati elkülönített fürthöz használt privát ACR-t frissítheti. Az ACR-erőforrásazonosító azonosításához használja a az aks show parancsot.

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

Az ACR-azonosító frissítéséhez futtassa a az aks update parancsot a --bootstrap-artifact-source és --bootstrap-container-registry-resource-id paraméterekkel.

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id <new-byo-acr-resource-id>

Ha egy meglévő fürt ACR-azonosítóját frissíti, manuálisan újra kell konfigurálnia az összes meglévő csomópontot.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Fontos

Ne felejtse el újraimázni a fürt csomópontkészleteit, miután engedélyezte a hálózati izolált fürtfunkciót. Ellenkező esetben a funkció nem lép érvénybe a fürtre.

Hálózatilag izolált fürt üzembe helyezése a Terraform használatával

Ez a Terraform-minta egy hálózatilag elkülönített fürtöt helyez üzembe a cikk korábbi részében ismertetett AKS által felügyelt ACR lehetőség használatával. Az AzureRM-szolgáltató még nem teszi elérhetővé az összes, a minta által használt, hálózatilag izolált rendszerindítási beállítást, így a minta az AzAPI-szolgáltatót használja a felügyelt fürterőforrás üzembe helyezéséhez a szükséges API-verzión. A saját ACR használatát lehetővé tevő (BYO) beállításhoz jelenleg nem érhető el Terraform-minta. A BYO ACR használatához kövesse a cikk korábbi Azure CLI útmutatását.

A minta a következő erőforrásokat helyezi üzembe:

  • Erőforráscsoport (Microsoft.Resources/resourceGroups).
  • A hálózattól elkülönített AKS-fürt (Microsoft.ContainerService/managedClusters), amely a következőket használja:
    • Rendszer által hozzárendelt felügyelt identitás.
    • Egyetlen rendszercsomópont-készlet egy Standard_D2s_v3 csomóponttal, és az automatikus skálázás le van tiltva.
    • A azure hálózati beépülő modulnál a outboundType beállítása none értékre történik, így a fürtnek a rendszerindításhoz nincs szüksége kimenő hálózati függőségekre.
    • apiServerAccessProfile.enablePrivateCluster beállítva erre: true, ami egy Private Link-alapú privát fürtöt hoz létre.
    • bootstrapProfile.artifactSourcebeállításra van Cacheállítva, így az AKS létrehozza, kezeli és egyezteti a saját ACR-gyorsítótárát a fürt elindításához ahelyett, hogy közvetlenül Microsoft Artifact Registryből (MAR) kér le. Ahogy a cikk korábbi részében már szerepelt, ezt az ACR-t nem kell saját kezűleg létrehoznia vagy kezelnie, és a hálózattól elkülönített fürt által használt gyorsítótárszabályokat, Private Linket és privát végpontot az AKS kezeli.

A fürt a telepítési régióban támogatott alapértelmezett Kubernetes-verzióval jön létre. Egy adott verzió rögzítéséhez adja hozzá a kubernetesVersion elemet a main.tf fájlban található fürt properties blokkjához, és a az aks get-versions parancs használatával győződjön meg arról, hogy a verzió elérhető az adott régióban.

  1. Hozzon létre egy könyvtárat a Terraform-mintakód teszteléséhez és az aktuális könyvtárvá alakításához.

  2. Hozzon létre egy elnevezett main.tf fájlt, és másolja bele a következő tesztelt mintakonfigurációt.

    terraform {
      required_version = ">= 1.6.0"
    
      required_providers {
        azapi = {
          source  = "Azure/azapi"
          version = "~> 2.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~> 3.6"
        }
      }
    }
    
    provider "azapi" {}
    
    resource "random_string" "suffix" {
      length  = 6
      upper   = false
      special = false
    }
    
    locals {
      location            = "westus2"
      resource_group_name = "rg-aks-network-isolated-${random_string.suffix.result}"
      aks_name            = "aks-netisolated-${random_string.suffix.result}"
      dns_prefix          = "aksnetiso${random_string.suffix.result}"
    }
    
    resource "azapi_resource" "resource_group" {
      type     = "Microsoft.Resources/resourceGroups@2024-03-01"
      name     = local.resource_group_name
      location = local.location
    }
    
    resource "azapi_resource" "aks_cluster" {
      type      = "Microsoft.ContainerService/managedClusters@2025-08-01"
      name      = local.aks_name
      parent_id = azapi_resource.resource_group.id
      location  = local.location
    
      identity {
        type = "SystemAssigned"
      }
    
      body = {
        properties = {
          dnsPrefix = local.dns_prefix
          agentPoolProfiles = [
            {
              name              = "systempool"
              count             = 1
              vmSize            = "Standard_D2s_v3"
              mode              = "System"
              osType            = "Linux"
              type              = "VirtualMachineScaleSets"
              enableAutoScaling = false
            }
          ]
          networkProfile = {
            networkPlugin = "azure"
            outboundType  = "none"
          }
          apiServerAccessProfile = {
            enablePrivateCluster = true
          }
          bootstrapProfile = {
            artifactSource = "Cache"
          }
        }
      }
    }
    

Terraform inicializálása

Az üzembe helyezés inicializálásához futtassa a Terraform parancsot terraform init. Ez a parancs letölti azokat a azapi szolgáltatókat és random szolgáltatókat, amelyek a mintában szereplő erőforrások kezeléséhez szükségesek.

terraform init -upgrade

A konfiguráció formázása és ellenőrzése

Futtassa a terraform fmt parancsot a konfigurációs fájl formázásához, és a terraform validate parancsot annak megerősítéséhez, hogy a konfiguráció szintaktikailag érvényes.

terraform fmt
terraform validate

Terraform végrehajtási terv létrehozása

Futtassa a(z) terraform plan elemet egy végrehajtási terv létrehozásához.

terraform plan -out main.tfplan

A Terraform végrehajtási terv alkalmazása

Futtassa a terraform apply parancsot, hogy alkalmazza a végrehajtási tervet az Azure-előfizetésére.

terraform apply main.tfplan

Az erőforráscsoport és a privát, hálózat által elkülönített AKS-fürt létrehozása több percet vesz igénybe.

Az alkalmazás telepítésének ellenőrzése

Ez a minta nem definiál Terraform-kimeneteket, ezért a jq és a terraform show -json használatával kérheti le a létrehozott erőforráscsoport és a fürt nevét az erőforrás állapotából, miután a terraform apply befejeződik. Mindkét erőforrást a azapi szolgáltatónál kezelheti, és az attribútumuk name tartalmazza a feloldott erőforrásnevet.

RESOURCE_GROUP=$(terraform show -json | jq -r '.values.root_module.resources[] | select(.address=="azapi_resource.resource_group") | .values.name')
AKS_NAME=$(terraform show -json | jq -r '.values.root_module.resources[] | select(.address=="azapi_resource.aks_cluster") | .values.name')

Győződjön meg arról, hogy a fürt a várt hálózati elkülönítési beállításokkal jött létre a(z) az aks show paranccsal.

az aks show --resource-group $RESOURCE_GROUP --name $AKS_NAME --query "{outboundType:networkProfile.outboundType, artifactSource:bootstrapProfile.artifactSource, privateCluster:apiServerAccessProfile.enablePrivateCluster}"

A kimenet azt mutatja, hogy a(z) true értéke artifactSource, a(z) Cache értéke outboundType, és a(z) none értéke privateCluster, ami megerősíti, hogy a fürt hálózatilag el van különítve, és az AKS által felügyelt ACR-gyorsítótárból inicializálódik.

Csatlakozzon a klaszterhez

Mivel ez egy privát fürt, olyan ügyfélről csatlakozzon, amely hálózati eléréssel rendelkezik a fürt privát végpontjához, például egy azonos vagy társviszonyban lévő virtuális hálózatban futó virtuális gépről, vagy az Azure Cloud Shellből, ha az a fürt virtuális hálózatához csatlakozik. Kérje le a fürt hitelesítő adatait a az aks get-credentials parancs használatával, majd ellenőrizze a kapcsolatot a kubectl get nodes parancs használatával.

az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
kubectl get nodes

Erőforrások tisztítása

Ha már nincs szüksége a cikkben létrehozott erőforrásokra, távolítsa el őket a további költségek elkerülése érdekében.

Warning

A(z) terraform destroy futtatása eltávolít minden, ehhez a konfigurációhoz tartozó Terraform állapotfájlban nyomon követett erőforrást, beleértve az erőforráscsoportot és az AKS-fürtöt is. Mielőtt megsemmisítené, alaposan tekintse át a tervet, és kerülje a megosztott vagy éles infrastruktúrán való futtatást.

Futtassa a terraform plan parancsot a -destroy kapcsolóval, hogy megtekinthesse, mit fog eltávolítani a Terraform.

terraform plan -destroy -out main.destroy.tfplan

Futtassa a(z) terraform apply parancsot a megsemmisítési terv alkalmazásához, és távolítsa el az ezen minta által létrehozott összes erőforrást.

terraform apply main.destroy.tfplan

Annak ellenőrzése, hogy a hálózati izolált fürt engedélyezve van-e az AKS-ben

Annak ellenőrzéséhez, hogy a hálózattól elkülönített fürt funkció engedélyezve van-e, használja a az aks show parancsot.

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

Az alábbi kimenet egy none kimenő típussal konfigurált, hálózatilag elkülönített fürtöt mutat be. Győződjön meg arról, hogy a(z) outboundType értéke none vagy block értékre van állítva, és hogy a(z) artifactSource értéke Cache értékre van állítva. A containerRegistryId mező azonosítja a rendszerindításhoz használt ACR-t.

{
  "kubernetesVersion": "<major>.<minor>.<patch>",
  "name": "myAKSCluster",
  "type": "Microsoft.ContainerService/ManagedClusters",
  "properties": {
    "networkProfile": {
      "outboundType": "none"
    },
    "bootstrapProfile": {
      "artifactSource": "Cache",
      "containerRegistryId": "/subscriptions/my-subscription-id/resourceGroups/my-node-resource-group-name/providers/Microsoft.ContainerRegistry/registries/my-registry-name"
    }
  }
}

Hálózati izolált fürt letiltása az AKS-en

Tiltsa le a hálózati izolált fürt funkciót a az aks update parancs futtatásával a --bootstrap-artifact-source és --outbound-type paraméterekkel.

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Direct --outbound-type LoadBalancer

Ha letiltja a funkciót egy meglévő fürtben, manuálisan újra kell létrehoznia az összes meglévő csomópontot.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Fontos

Ne felejtse el újraimázni a fürt csomópontkészleteit, miután letiltotta a hálózati elkülönített fürtszolgáltatást. Ellenkező esetben a funkció nem lép érvénybe a fürtre.

Hibaelhárítás

Ha problémákat tapasztal, például a rendszerkép lekérése meghiúsul, tekintse meg a hálózat által elkülönített Azure Kubernetes Service-fürtökkel kapcsolatos problémák hibaelhárítását.

Következő lépések

Ha az Azure Firewall használatával szeretné beállítani a kimenő korlátozás konfigurációját, látogasson el a Kimenő forgalom szabályozása az Azure Firewall használatával az AKS-ben című témakörben.

Ha korlátozni szeretné, hogy a podok hogyan kommunikáljanak egymás között, és East-West a fürtön belüli forgalomkorlátozásokat, tekintse meg a podok közötti adatforgalom biztonságossá tételét az AKS hálózati házirendjeinek használatával.