Share via


Zelfstudie: Een ASP.NET-webtoepassing implementeren met behulp van Azure Cosmos DB for NoSQL, beheerde identiteit en AKS via Bicep

VAN TOEPASSING OP: NoSQL

In deze zelfstudie implementeert u een verwijzing ASP.NET webtoepassing op een AKS-cluster (Azure Kubernetes Service) dat verbinding maakt met Azure Cosmos DB for NoSQL.

Azure Cosmos DB is een volledig beheerd gedistribueerd databaseplatform voor moderne toepassingsontwikkeling met NoSQL of relationele databases.

AKS is een beheerde Kubernetes-service waarmee u snel clusters kunt implementeren en beheren.

Belangrijk

  • Voor dit artikel is de nieuwste versie van de Azure CLI vereist. Zie De Azure CLI installeren voor meer informatie. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.
  • Voor dit artikel is ook de nieuwste versie van de Bicep CLI in de Azure CLI vereist. Zie Bicep-hulpprogramma's installeren voor meer informatie.
  • Als u de opdrachten in deze zelfstudie lokaal uitvoert in plaats van in Azure Cloud Shell, moet u ervoor zorgen dat u een beheerdersaccount gebruikt.

Vereisten

De volgende hulpprogramma's zijn vereist voor het compileren van de ASP.NET webtoepassing en het maken van de containerinstallatiekopieën:

Overzicht

In deze zelfstudie wordt gebruikgemaakt van een IaC-benadering (Infrastructure as Code) voor het implementeren van de resources in Azure. U gebruikt Bicep, een nieuwe declaratieve taal die dezelfde mogelijkheden biedt als Azure Resource Manager-sjablonen. Bicep bevat echter een syntaxis die beknopter en gemakkelijker te gebruiken is.

De Bicep-modules implementeren de volgende Azure-resources binnen het beoogde abonnementsbereik:

In deze zelfstudie worden de volgende aanbevolen beveiligingsprocedures gebruikt met Azure Cosmos DB:

Tip

In de stappen in deze zelfstudie wordt Gebruikgemaakt van Azure Cosmos DB for NoSQL. U kunt echter dezelfde concepten toepassen op Azure Cosmos DB voor MongoDB.

De Bicep-modules downloaden

Download of kloon de Bicep-modules uit de map Bicep van de GitHub-opslagplaats azure-samples/cosmos-aks-samples :

git clone https://github.com/Azure-Samples/cosmos-aks-samples.git

cd Bicep/

Verbinding maken met uw Azure-abonnement

Gebruik az login om verbinding te maken met uw standaard Azure-abonnement:

az login

Gebruik desgewenst az account set met de naam of id van een specifiek abonnement om het actieve abonnement in te stellen als u meerdere abonnementen hebt:

az account set \
  --subscription <subscription-id>

De implementatieparameters initialiseren

Maak een param.json-bestand met behulp van de JSON in het volgende voorbeeld. Vervang de {resource group name}tijdelijke {Azure Cosmos DB account name}aanduidingen en {Azure Container Registry instance name} tijdelijke aanduidingen door uw eigen waarden.

Belangrijk

Alle resourcenamen die u in de volgende code gebruikt, moeten voldoen aan de naamgevingsregels en -beperkingen voor Azure-resources. Zorg er ook voor dat de waarden van de tijdelijke aanduiding consistent worden vervangen en overeenkomen met de waarden in param.json.

{
  "$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}"
    }
  }
}

Een Bicep-implementatie maken

Stel shell-variabelen in met behulp van de volgende opdrachten. Vervang de {deployment name} tijdelijke aanduidingen door {location} uw eigen waarden.

deploymentName='{deployment name}'  # Name of the deployment
location='{location}' # Location for deploying the resources

Gebruik az deployment sub create in de bicep-map om de sjabloon te implementeren in het huidige abonnementsbereik:

az deployment sub create \
  --name $deploymentName \
  --location $location \
  --template-file main.bicep \
  --parameters @param.json

Tijdens de implementatie voert de console een bericht uit waarin wordt aangegeven dat de implementatie nog steeds wordt uitgevoerd:

 / Running ..

De implementatie kan 20 tot 30 minuten duren. Nadat het inrichten is voltooid, voert de console JSON uit als Succeeded de inrichtingsstatus:

      }
    ],
    "provisioningState": "Succeeded",
    "templateHash": "0000000000000000",
    "templateLink": null,
    "timestamp": "2022-01-01T00:00:00.000000+00:00",
    "validatedResources": null
  },
  "tags": null,
  "type": "Microsoft.Resources/deployments"
}

U kunt ook de implementatiestatus in de resourcegroep zien:

Schermopname van de implementatiestatus voor de resourcegroep in Azure Portal.

Notitie

Wanneer u een AKS-cluster maakt, wordt automatisch een tweede resourcegroep gemaakt om de AKS-resources op te slaan. Zie Waarom zijn er twee resourcegroepen gemaakt met AKS? voor meer informatie.

Gebruik de volgende opdrachten om uw Azure Container Registry-exemplaar te koppelen aan AKS. Vervang de {Azure Container Registry instance name} tijdelijke aanduidingen door {resource group name} uw eigen waarden.

acrName='{Azure Container Registry instance name}'
rgName='{resource group name}'
aksName=$rgName'aks'

Voer az aks update uit om de bestaande Azure Container Registry-resource te koppelen aan het AKS-cluster:

az aks update \
  --resource-group $rgName \
  --name $aksName \
  --attach-acr $acrName

Verbinding maken met het AKS-cluster

Als u een Kubernetes-cluster wilt beheren, gebruikt u kubectl, de Kubernetes-opdrachtregelclient. Als u Azure Cloud Shell gebruikt, is kubectl al geïnstalleerd. Als u lokaal wilt installeren kubectl , gebruikt u az aks install-cli:

az aks install-cli

Als u kubectl zo wilt configureren dat deze verbinding maakt met uw Kubernetes-cluster, gebruikt u az aks get-credentials. Bij deze opdracht worden referenties gedownload en wordt Kubernetes CLI geconfigureerd voor het gebruik van deze referenties.

az aks get-credentials \
  --resource-group $rgName \
  --name $aksName

De AKS-pods verbinden met Azure Key Vault

Door Microsoft Entra beheerde identiteiten maken gebruik van AKS-primitieven om beheerde identiteiten te koppelen aan Azure-resources en -identiteiten in Microsoft Entra-id met pods. U gebruikt deze identiteiten om toegang te verlenen tot de Azure Key Vault-provider voor het CSI-stuurprogramma geheimenarchief.

Gebruik de volgende opdracht om de waarden van de tenant-id (homeTenantId) te vinden:

az account show

Gebruik de volgende YAML-sjabloon om een secretproviderclass.yml-bestand te maken. Vervang de {Tenant Id} tijdelijke aanduidingen door {resource group name} uw eigen waarden. Zorg er ook voor dat de waarde overeenkomt {resource group name} met de waarde in param.json.

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

De SecretProviderClass toepassen op het AKS-cluster

Gebruik kubectl om het Stuurprogramma Secrets Store CSI te installeren met behulp van de YAML:

kubectl apply \
  --filename secretproviderclass.yml

De ASP.NET-webtoepassing bouwen

Download of kloon de broncode van de webtoepassing uit de toepassingsmap van de GitHub-opslagplaats azure-samples/cosmos-aks-samples :

git clone https://github.com/Azure-Samples/cosmos-aks-samples.git

cd Application/

Open de map Toepassing in Visual Studio Code. Voer de toepassing uit met behulp van de F5-toets of de foutopsporingsopdracht: Start de foutopsporing .

De Docker-containerinstallatiekopieën pushen naar Azure Container Registry

  1. Als u een containerinstallatiekopieën wilt maken op het tabblad Explorer in Visual Studio Code, klikt u met de rechtermuisknop op Dockerfile en selecteert u Build Image.

    Schermopname van het contextmenu in Visual Studio Code met de optie Build Image geselecteerd.

  2. Voer in de prompt die vraagt om de naam en versie om de installatiekopieën te taggen, de naam todo:latest in.

  3. Gebruik het Deelvenster Docker om de ingebouwde installatiekopie naar Azure Container Registry te pushen. U vindt de ingebouwde installatiekopie onder het knooppunt Afbeeldingen . Open het takenknooppunt, klik met de rechtermuisknop op de meest recente en selecteer Push.

    Schermopname van het contextmenu in Visual Studio Code met de optie Push geselecteerd.

  4. Selecteer in de prompts uw Azure-abonnement, Azure Container Registry-resource en installatiekopieëntags. De indeling van de afbeeldingstag moet zijn {acrname}.azurecr.io/todo:latest.

  5. Wacht tot Visual Studio Code de containerinstallatiekopieën naar Azure Container Registry pusht.

De YAML-implementatie voorbereiden

Gebruik de volgende YAML-sjabloon om een akstododeploy.yml-bestand te maken. Vervang de {ACR name}tijdelijke aanduidingen en {resource group name} {Image name}{Version}tijdelijke aanduidingen door uw eigen waarden.

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

De YAML-implementatie toepassen

Gebruik kubectl apply opnieuw om de toepassingspods te implementeren en de pods beschikbaar te maken via een load balancer:

kubectl apply \
  --filename akstododeploy.yml \
  --namespace 'my-app'

De toepassing testen

Wanneer de toepassing wordt uitgevoerd, maakt een Kubernetes-service de front-end van de toepassing beschikbaar op internet. Dit proces kan enkele minuten duren.

Gebruik kubectl om het externe IP-adres weer te geven dat door de load balancer wordt weergegeven:

kubectl get services \
  --namespace "my-app"

Als u toegang wilt krijgen tot de toepassing, opent u het IP-adres dat u hebt ontvangen als uitvoer in een browser.

De resources opschonen

Als u azure-kosten wilt voorkomen, moet u overbodige resources opschonen wanneer u het cluster niet meer nodig hebt. Gebruik az group delete en az deployment sub delete om respectievelijk de resourcegroep en abonnementsimplementatie te verwijderen:

az group delete \
  --resource-group $rgName 
  --yes

az deployment sub delete \
  --name $deploymentName

Volgende stappen