Oktatóanyag: ASP.NET webalkalmazás üzembe helyezése az Azure Cosmos DB for NoSQL, a felügyelt identitás és az AKS használatával a Bicepen keresztül
A KÖVETKEZŐRE VONATKOZIK: NoSQL
Ebben az oktatóanyagban egy referencia-ASP.NET webalkalmazást fog üzembe helyezni egy Azure Kubernetes Service-fürtön (AKS), amely az Azure Cosmos DB for NoSQL-hez csatlakozik.
Az Azure Cosmos DB egy teljes körűen felügyelt elosztott adatbázisplatform a modern alkalmazásfejlesztéshez NoSQL- vagy relációs adatbázisokkal.
Az AKS egy felügyelt Kubernetes-szolgáltatás, amely segít a fürtök gyors üzembe helyezésében és kezelésében.
Fontos
- Ez a cikk az Azure CLI legújabb verzióját igényli. További információ: Az Azure CLI telepítése. Ha Az Azure Cloud Shellt használja, a legújabb verzió már telepítve van.
- Ez a cikk a Bicep CLI legújabb verzióját is igényli az Azure CLI-ben. További információ: Bicep-eszközök telepítése.
- Ha ebben az oktatóanyagban a parancsokat helyileg futtatja az Azure Cloud Shell helyett, győződjön meg arról, hogy rendszergazdai fiókot használ.
Előfeltételek
A ASP.NET webalkalmazás fordításához és tárolólemezképének létrehozásához a következő eszközök szükségesek:
- Docker Desktop
- Visual Studio Code
- C#-bővítmény a Visual Studio Code-hoz
- Docker-bővítmény a Visual Studio Code-hoz
- Azure-fiókbővítmény a Visual Studio Code-hoz
Áttekintés
Ez az oktatóanyag egy infrastruktúra kódként (IaC) történő megközelítését használja az erőforrások Azure-ban való üzembe helyezéséhez. A Bicepet fogja használni, amely egy új deklaratív nyelv, amely ugyanazokat a képességeket kínálja, mint az Azure Resource Manager-sablonok. A Bicep azonban tömörebb és könnyebben használható szintaxist tartalmaz.
A Bicep-modulok a következő Azure-erőforrásokat helyezik üzembe a célzott előfizetés hatókörében:
- Erőforráscsoport az erőforrások rendszerezéséhez
- Felügyelt identitás hitelesítéshez
- Tárolóregisztrációs adatbázis tárolólemezképek tárolásához
- AKS-fürt
- Virtuális hálózat az AKS konfigurálásához
- Egy Azure Cosmos DB for NoSQL-fiók, valamint egy adatbázis, egy tároló és az SQL-szerepkör
- Kulcstartó a biztonságos kulcsok tárolásához
- (Nem kötelező) Log Analytics-munkaterület
Ez az oktatóanyag az alábbi ajánlott biztonsági eljárásokat használja az Azure Cosmos DB-vel:
- Hozzáférés-vezérlés megvalósítása szerepköralapú hozzáférés-vezérléssel (RBAC) és felügyelt identitással. Ezek a funkciók nem igénylik, hogy a fejlesztők titkos kulcsokat, hitelesítő adatokat, tanúsítványokat és kulcsokat kezeljenek a szolgáltatások közötti biztonságos kommunikációhoz.
- Virtuális hálózati szolgáltatásvégpont konfigurálásával korlátozza az Azure Cosmos DB hozzáférését az AKS-alhálózathoz.
- Állítsa be
disableLocalAuth = true
az erőforrásban,databaseAccount
hogy az RBAC-t kényszerítse ki egyetlen hitelesítési módszerként.
Tipp.
Az oktatóanyag lépései az Azure Cosmos DB for NoSQL-t használják. Ugyanezeket a fogalmakat azonban alkalmazhatja a MongoDB-hez készült Azure Cosmos DB-hez.
A Bicep-modulok letöltése
Töltse le vagy klónozza a Bicep-modulokat az azure-samples/cosmos-aks-samples GitHub-adattár Bicep mappájából:
git clone https://github.com/Azure-Samples/cosmos-aks-samples.git
cd Bicep/
Csatlakozás az Azure-előfizetéshez
Az az login használatával csatlakozzon az alapértelmezett Azure-előfizetéshez:
az login
Ha több előfizetéssel rendelkezik, az az fiókkészletet használhatja egy adott előfizetés nevével vagy azonosítójával az aktív előfizetés beállításához:
az account set \
--subscription <subscription-id>
Az üzembehelyezési paraméterek inicializálása
Hozzon létre egy param.json fájlt a következő példában látható JSON használatával. Cserélje le a {resource group name}
, {Azure Cosmos DB account name}
és {Azure Container Registry instance name}
a helyőrzőket a saját értékeire.
Fontos
Az alábbi kódban használt összes erőforrásnévnek meg kell felelnie az Azure-erőforrások elnevezési szabályainak és korlátozásainak. Győződjön meg arról is, hogy a helyőrző értékek következetesen cserélődnek, és megfelelnek a param.json értékeinek.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgName": {
"value": "{resource group name}"
},
"cosmosName" :{
"value": "{Azure Cosmos DB account name}"
},
"acrName" :{
"value": "{Azure Container Registry instance name}"
}
}
}
Bicep-telepítés létrehozása
A rendszerhéjváltozókat az alábbi parancsokkal állíthatja be. Cserélje le a {deployment name}
helyőrzőket {location}
a saját értékeire.
deploymentName='{deployment name}' # Name of the deployment
location='{location}' # Location for deploying the resources
A Bicep mappában az az deployment sub create használatával helyezze üzembe a sablont az aktuális előfizetési hatókörben:
az deployment sub create \
--name $deploymentName \
--location $location \
--template-file main.bicep \
--parameters @param.json
Az üzembe helyezés során a konzol egy üzenetet küld, amely jelzi, hogy az üzembe helyezés még fut:
/ Running ..
Az üzembe helyezés 20–30 percet is igénybe vehet. A kiépítés befejezése után a konzol JSON-t Succeeded
ad kiépítési állapotként:
}
],
"provisioningState": "Succeeded",
"templateHash": "0000000000000000",
"templateLink": null,
"timestamp": "2022-01-01T00:00:00.000000+00:00",
"validatedResources": null
},
"tags": null,
"type": "Microsoft.Resources/deployments"
}
Az üzembe helyezés állapota az erőforráscsoportban is látható:
Feljegyzés
AKS-fürt létrehozásakor a rendszer automatikusan létrehoz egy második erőforráscsoportot az AKS-erőforrások tárolásához. További információ: Miért jön létre két erőforráscsoport az AKS-sel?
Az Azure Container Registry összekapcsolása az AKS-szel
Az alábbi parancsokkal kapcsolhatja össze az Azure Container Registry-példányt az AKS-szel. Cserélje le a {Azure Container Registry instance name}
helyőrzőket {resource group name}
a saját értékeire.
acrName='{Azure Container Registry instance name}'
rgName='{resource group name}'
aksName=$rgName'aks'
Futtassa az az aks-frissítést a meglévő Azure Container Registry-erőforrás AKS-fürthöz való csatolásához:
az aks update \
--resource-group $rgName \
--name $aksName \
--attach-acr $acrName
Csatlakozás az AKS-fürthöz
Kubernetes-fürt kezeléséhez a Kubectl, a Kubernetes parancssori ügyfelet kell használnia. Ha az Azure Cloud Shellt használja, kubectl
már telepítve van. A helyi telepítéshez kubectl
használja az az aks install-cli parancsot:
az aks install-cli
A kubectl
az az aks get-credentials paranccsal konfigurálható a Kubernetes-fürthöz való csatlakozásra. Ez a parancs letölti a hitelesítő adatokat, és konfigurálja a Kubernetes parancssori felületét a használatukhoz.
az aks get-credentials \
--resource-group $rgName \
--name $aksName
Az AKS-podok csatlakoztatása az Azure Key Vaulthoz
A Microsoft Entra pod által felügyelt identitások AKS-primitívekkel társítják az Azure-erőforrások és -identitások felügyelt identitásait a Microsoft Entra ID-ban podokkal. Ezekkel az identitásokkal biztosít hozzáférést az Azure Key Vault-szolgáltatónak a Titkos kulcstár CSI-illesztőprogramhoz.
A bérlőazonosító (homeTenantId
) értékeinek megkereséséhez használja a következő parancsot:
az account show
A következő YAML-sablonnal hozhat létre secretproviderclass.yml fájlt. Cserélje le a {Tenant Id}
helyőrzőket {resource group name}
a saját értékeire. Győződjön meg arról is, hogy az érték {resource group name}
megegyezik a param.json értékével.
# This is a SecretProviderClass example that uses aad-pod-identity to access the key vault
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: azure-kvname-podid
spec:
provider: azure
parameters:
usePodIdentity: "true"
keyvaultName: "{resource group name}kv" # Replace resource group name. Bicep generates the key vault name.
tenantId: "{Tenant Id}" # The tenant ID of your account. Use the 'homeTenantId' attribute value from the 'az account show' command output.
A SecretProviderClass alkalmazása az AKS-fürtre
A Kubectl-alkalmazás használatával telepítse a Titkos kulcstár CSI-illesztőprogramot a YAML használatával:
kubectl apply \
--filename secretproviderclass.yml
A ASP.NET webalkalmazás létrehozása
Töltse le vagy klónozza a webalkalmazás forráskódját az azure-samples/cosmos-aks-samples GitHub-adattár Alkalmazásmappájából:
git clone https://github.com/Azure-Samples/cosmos-aks-samples.git
cd Application/
Nyissa meg az Alkalmazás mappát a Visual Studio Code-ban. Futtassa az alkalmazást az F5 billentyűvel vagy a Hibakeresés paranccsal .
A Docker-tároló lemezképének leküldése az Azure Container Registrybe
Ha tárolólemezképet szeretne létrehozni a Visual Studio Code Explorer lapján, kattintson a jobb gombbal a Dockerfile elemre, majd válassza a Rendszerkép létrehozása parancsot.
A rendszerkép címkézését kérő üzenetben adja meg a todo:latest nevet.
A Docker panelen leküldi a beépített rendszerképet az Azure Container Registrybe. A rendszerkép a Képek csomópont alatt található. Nyissa meg a teendőcsomópontot , kattintson a jobb gombbal a legújabb elemre, majd válassza a Leküldés lehetőséget.
Az üzenetben válassza ki az Azure-előfizetést, az Azure Container Registry-erőforrást és a rendszerképcímkéket. A képcímke formátumának a következőnek kell lennie
{acrname}.azurecr.io/todo:latest
: .Várja meg, amíg a Visual Studio Code leküldi a tárolórendszerképet az Azure Container Registrybe.
Az üzembehelyezési YAML előkészítése
A következő YAML-sablonnal hozhat létre akstododeploy.yml fájlt. Cserélje le a {ACR name}
, {Image name}
, {Version}
és {resource group name}
helyőrzőket a saját értékeire.
apiVersion: apps/v1
kind: Deployment
metadata:
name: todo
labels:
aadpodidbinding: "cosmostodo-apppodidentity"
app: todo
spec:
replicas: 2
selector:
matchLabels:
app: todo
template:
metadata:
labels:
app: todo
aadpodidbinding: "cosmostodo-apppodidentity"
spec:
containers:
- name: mycontainer
image: "{ACR name}/{Image name}:{Version}" # Update per your environment; for example, myacrname.azurecr.io/todo:latest. Do not add https:// in ACR Name.
ports:
- containerPort: 80
env:
- name: KeyVaultName
value: "{resource group name}kv" # Replace resource group name. Key Vault name is generated by Bicep.
nodeSelector:
kubernetes.io/os: linux
volumes:
- name: secrets-store01-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "azure-kvname-podid"
---
kind: Service
apiVersion: v1
metadata:
name: todo
spec:
selector:
app: todo
aadpodidbinding: "cosmostodo-apppodidentity"
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
Az üzembehelyezési YAML alkalmazása
Használja kubectl apply
újra az alkalmazás podjait, és tegye elérhetővé a podokat egy terheléselosztón keresztül:
kubectl apply \
--filename akstododeploy.yml \
--namespace 'my-app'
Az alkalmazás tesztelése
Az alkalmazás futtatásakor egy Kubernetes-szolgáltatás elérhetővé teszi az alkalmazás előtérét az interneten. A folyamat eltarthat pár percig.
A kubectl get használatával megtekintheti a terheléselosztó által elérhetővé tott külső IP-címet:
kubectl get services \
--namespace "my-app"
Az alkalmazás eléréséhez nyissa meg a böngészőben kimenetként kapott IP-címet.
Az erőforrások eltávolítása
Az Azure-díjak elkerülése érdekében törölje a szükségtelen erőforrásokat, ha már nincs szüksége a fürtre. Az erőforráscsoport és az előfizetés üzembe helyezésének törléséhez használja az az csoporttörlés és az az deployment sub delete parancsot:
az group delete \
--resource-group $rgName
--yes
az deployment sub delete \
--name $deploymentName
Következő lépések
- Megtudhatja, hogyan fejleszthet webalkalmazást az Azure Cosmos DB-vel.
- Megtudhatja, hogyan kérdezheti le az Azure Cosmos DB for NoSQL-t.
- Megtudhatja, hogyan frissítheti a fürtöt.
- Megtudhatja, hogyan méretezheti a fürtöt.
- Megtudhatja, hogyan engedélyezheti a folyamatos üzembe helyezést.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: