Megosztás a következőn keresztül:


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:

Á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:

Ez az oktatóanyag az alábbi ajánlott biztonsági eljárásokat használja az Azure Cosmos DB-vel:

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ó:

Képernyőkép az erőforráscsoport üzembe helyezési állapotáról az Azure Portalon.

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 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

  1. 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.

    Képernyőkép a Visual Studio Code helyi menüjéről, amelyen a Kép összeállítása lehetőség van kiválasztva.

  2. A rendszerkép címkézését kérő üzenetben adja meg a todo:latest nevet.

  3. 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.

    Képernyőkép a Visual Studio Code helyi menüjéről, amelyen a Leküldés lehetőség van kiválasztva.

  4. 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: .

  5. 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