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 nasazují následující prostředky Azure v rámci cílového oboru 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
Tento kurz používá následující osvědčené postupy pro zabezpečení služby Azure Cosmos DB:
- 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
vdatabaseAccount
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 sign in 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ů:
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?.
Propojení služby Azure Container Registry s 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'
Spusťte az aks update
připojení existujícího prostředku služby Azure Container Registry ke clusteru 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 az aks install-cli
:
az aks install-cli
Pokud chcete nakonfigurovat kubectl
připojení ke clusteru Kubernetes, použijte 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č rozhraní CSI (Secrets Store Container Storage Interface).
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
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.
Do výzvy, která žádá o označení image názvem a verzí, zadejte název todo:latest.
Pomocí podokna Dockeru odešlete sestavenou image do služby Azure Container Registry. Sestavenou 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.
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
.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