Sdílet prostřednictvím


Kurz: Nasazení webové aplikace ASP.NET pomocí služby Azure Cosmos DB for NoSQL, spravované identity a AKS přes Bicep

PLATÍ PRO: NoSQL

V tomto kurzu nasadíte referenční ASP.NET webovou aplikaci do clusteru Azure Kubernetes Service (AKS), který se připojuje ke službě Azure Cosmos DB for NoSQL.

Azure Cosmos DB je plně spravovaná distribuovaná databázová platforma pro moderní vývoj aplikací s NoSQL nebo relačními databázemi.

AKS je spravovaná služba Kubernetes, která pomáhá rychle nasazovat a spravovat clustery.

Důležité

  • Tento článek vyžaduje nejnovější verzi Azure CLI. Další informace najdete v tématu Instalace Azure CLI. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.
  • Tento článek také vyžaduje nejnovější verzi rozhraní příkazového řádku Bicep v rámci Azure CLI. Další informace najdete v tématu Instalace nástrojů Bicep.
  • Pokud příkazy v tomto kurzu spouštíte místně místo v Azure Cloud Shellu, ujistěte se, že používáte účet správce.

Požadavky

Ke kompilaci webové aplikace ASP.NET a vytvoření image kontejneru jsou potřeba následující nástroje:

Přehled

Tento kurz používá přístup infrastruktury jako kódu (IaC) k nasazení prostředků do Azure. Použijete Bicep, což je nový deklarativní jazyk, který nabízí stejné možnosti jako šablony Azure Resource Manageru. Bicep ale obsahuje syntaxi, která je stručnější a snadněji se používá.

Moduly Bicep nasadí následující prostředky Azure v rámci oboru cílového předplatného:

  • Skupina prostředků pro uspořádání prostředků
  • Spravovaná identita pro ověřování
  • Registr kontejneru pro ukládání imagí kontejnerů
  • Cluster AKS
  • Virtuální síť pro konfiguraci AKS
  • Účet Služby Azure Cosmos DB for NoSQL spolu s databází, kontejnerem a rolí SQL
  • Trezor klíčů pro ukládání zabezpečených klíčů
  • (Volitelné) Pracovní prostor služby Log Analytics

V tomto kurzu se ve službě Azure Cosmos DB používají následující osvědčené postupy zabezpečení:

  • Implementujte řízení přístupu pomocí řízení přístupu na základě role (RBAC) a spravované identity. Tyto funkce eliminují potřebu vývojářů spravovat tajné kódy, přihlašovací údaje, certifikáty a klíče pro zabezpečenou komunikaci mezi službami.
  • Omezte přístup ke službě Azure Cosmos DB k podsíti AKS konfigurací koncového bodu služby virtuální sítě.
  • Nastavte disableLocalAuth = true v databaseAccount prostředku, aby se RBAC vynucuje jako jediná metoda ověřování.

Tip

Kroky v tomto kurzu používají službu Azure Cosmos DB for NoSQL. Stejné koncepty ale můžete použít ve službě Azure Cosmos DB pro MongoDB.

Stažení modulů Bicep

Stáhněte nebo naklonujte moduly Bicep ze složky Bicep úložiště Azure-samples/cosmos-aks-samples na GitHubu:

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

cd Bicep/

Připojení k předplatnému Azure

Pomocí příkazu az login se připojte k výchozímu předplatnému Azure:

az login

Volitelně můžete k nastavení aktivního předplatného použít az account set s názvem nebo ID konkrétního předplatného, pokud máte více předplatných:

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

Inicializace parametrů nasazení

V následujícím příkladu vytvořte soubor param.json pomocí kódu JSON. {resource group name}Nahraďte symboly , {Azure Cosmos DB account name}a {Azure Container Registry instance name} zástupné symboly vlastními hodnotami.

Důležité

Všechny názvy prostředků, které používáte v následujícím kódu, by měly odpovídat pravidlům a omezením pojmenování prostředků Azure. Zajistěte také, aby zástupné hodnoty byly konzistentně nahrazeny a odpovídaly hodnotám v 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}"
    }
  }
}

Vytvoření nasazení Bicep

Nastavte proměnné prostředí pomocí následujících příkazů. {deployment name} Nahraďte zástupné {location} symboly vlastními hodnotami.

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

Ve složce Bicep pomocí příkazu az deployment sub create nasaďte šablonu do aktuálního oboru předplatného:

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

Během nasazení konzola vypíše zprávu, že nasazení je stále spuštěné:

 / Running ..

Nasazení může trvat 20 až 30 minut. Po dokončení zřizování bude konzola výstupem JSON se stavem Succeeded zřizování:

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

Můžete se také podívat na stav nasazení ve skupině prostředků:

Snímek obrazovky se stavem nasazení pro skupinu prostředků na webu Azure Portal

Poznámka:

Při vytváření clusteru AKS se automaticky vytvoří druhá skupina prostředků pro uložení prostředků AKS. Další informace najdete v tématu Proč jsou dvě skupiny prostředků vytvořené pomocí AKS?.

Pomocí následujících příkazů propojte instanci služby Azure Container Registry s AKS. {Azure Container Registry instance name} Nahraďte zástupné {resource group name} symboly vlastními hodnotami.

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

Spuštěním příkazu az aks update připojte existující prostředek služby Azure Container Registry s clusterem AKS:

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

Připojení ke clusteru AKS

Ke správě clusteru Kubernetes použijete klienta příkazového řádku Kubernetes kubectl. Pokud používáte Azure Cloud Shell, kubectl je už nainstalovaný. Pokud chcete nainstalovat kubectl místně, použijte příkaz az aks install-cli:

az aks install-cli

Pokud chcete nakonfigurovat kubectl pro připojení k vašemu clusteru Kubernetes, použijte příkaz az aks get-credentials. Tento příkaz stáhne přihlašovací údaje a nakonfiguruje rozhraní příkazového řádku Kubernetes tak, aby je používalo.

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

Připojení podů AKS ke službě Azure Key Vault

Spravované identity Microsoft Entra používají primitivy AKS k přidružení spravovaných identit pro prostředky Azure a identity v Microsoft Entra ID k podům. Tyto identity použijete k udělení přístupu k poskytovateli služby Azure Key Vault pro ovladač CSI úložiště tajných kódů.

Pomocí následujícího příkazu vyhledejte hodnoty ID tenanta (homeTenantId):

az account show

Pomocí následující šablony YAML vytvořte soubor secretproviderclass.yml . {Tenant Id} Nahraďte zástupné {resource group name} symboly vlastními hodnotami. Také se ujistěte, že hodnota odpovídá {resource group name} hodnotě v 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.

Použití třídy SecretProviderClass v clusteru AKS

Použijte kubectl k instalaci ovladače CSI úložiště tajných kódů pomocí YAML:

kubectl apply \
  --filename secretproviderclass.yml

Sestavení webové aplikace ASP.NET

Stáhněte nebo naklonujte zdrojový kód webové aplikace ze složky Aplikace úložiště Azure-samples/cosmos-aks-samples na GitHubu:

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

cd Application/

Otevřete složku Aplikace v editoru Visual Studio Code. Spusťte aplikaci pomocí klávesy F5 nebo příkazu Debug: Spustit ladění .

Nasdílení image kontejneru Dockeru do služby Azure Container Registry

  1. Pokud chcete vytvořit image kontejneru z karty Průzkumník v editoru Visual Studio Code, klikněte pravým tlačítkem na Soubor Dockerfile a pak vyberte Sestavit image.

    Snímek obrazovky s místní nabídkou v editoru Visual Studio Code s vybranou možností Sestavit obrázek

  2. Do výzvy, která žádá o označení image názvem a verzí, zadejte název todo:latest.

  3. Pomocí podokna Dockeru odešlete sestavenou image do služby Azure Container Registry. Vytvořenou image najdete pod uzlem Image . Otevřete uzel todo, klikněte pravým tlačítkem myši na nejnovější a pak vyberte Nasdílení změn.

    Snímek obrazovky s místní nabídkou v editoru Visual Studio Code s vybranou možností Push

  4. Na příkazovém řádku vyberte své předplatné Azure, prostředek služby Azure Container Registry a značky imagí. Formát značky obrázku by měl být {acrname}.azurecr.io/todo:latest.

  5. Počkejte, až Visual Studio Code odešle image kontejneru do služby Azure Container Registry.

Příprava YAML nasazení

K vytvoření souboru akstododeploy.yml použijte následující šablonu YAML. {ACR name}Nahraďte symboly , {Image name}{Version}a {resource group name} zástupné symboly vlastními hodnotami.

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

Použití YAML nasazení

Znovu použijte kubectl apply k nasazení podů aplikace a zveřejnění podů prostřednictvím nástroje pro vyrovnávání zatížení:

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

Testování aplikace

Když se aplikace spustí, služba Kubernetes zveřejní front-end aplikace na internetu. Dokončení tohoto procesu může trvat několik minut.

Pomocí kubectl get zobrazte externí IP adresu, kterou nástroj pro vyrovnávání zatížení zveřejňuje:

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

Pokud chcete získat přístup k aplikaci, otevřete IP adresu, kterou jste dostali jako výstup v prohlížeči.

Vyčištění prostředků

Pokud se chcete vyhnout poplatkům za Azure, vyčistěte nepotřebné prostředky, když už cluster nepotřebujete. Pomocí příkazu az group delete a az deployment sub delete odstraňte nasazení skupiny prostředků a předplatného:

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

az deployment sub delete \
  --name $deploymentName

Další kroky