Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
VAN TOEPASSING OP: NoSQL
In deze zelfstudie implementeert u een referentie ASP.NET-webtoepassing op een AKS-cluster (Azure Kubernetes Service) die verbinding maakt met Azure Cosmos DB voor 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:
- Docker Desktop
-
Visual Studio Code
- C#-extensie voor Visual Studio Code
- Docker-extensie voor Visual Studio Code
- Azure-accountextensie voor Visual Studio Code
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:
- Een resourcegroep om de resources te organiseren
- Een beheerde identiteit voor verificatie
- Een containerregister voor het opslaan van container afbeeldingen.
- Een AKS-cluster
- Een virtueel netwerk voor het configureren van AKS
- Een Azure Cosmos DB for NoSQL-account, samen met een database, een container en de SQL-rol
- Een sleutelkluis voor het opslaan van beveiligde sleutels
- (Optioneel) Een Log Analytics-werkruimte
In deze zelfstudie worden de volgende aanbevolen procedures voor Azure Cosmos DB-beveiliging gebruikt:
- Implementeer toegangsbeheer met behulp van op rollen gebaseerd toegangsbeheer (RBAC) en een beheerde identiteit. Met deze functies hoeven ontwikkelaars geen geheimen, referenties, certificaten en sleutels te beheren voor veilige communicatie tussen services.
- Beperk Azure Cosmos DB-toegang tot het AKS-subnet door een service-eindpunt voor een virtueel netwerk te configureren.
- Stel
disableLocalAuth = true
in dedatabaseAccount
resource in om RBAC af te dwingen als de enige verificatiemethode.
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-repository 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 sign in 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}
, {Azure Cosmos DB account name}
, en {Azure Container Registry instance name}
placeholders 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:
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.
Azure Container Registry koppelen aan AKS
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 deze opdracht uit az aks update
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 wilt configureren kubectl
dat er verbinding wordt gemaakt met uw Kubernetes-cluster, gebruikt u az aks get-credentials
. Bij deze opdracht worden inloggegevens gedownload en wordt de Kubernetes CLI geconfigureerd om deze te gebruiken.
az aks get-credentials \
--resource-group $rgName \
--name $aksName
De AKS-pods verbinden met Azure Key Vault
Microsoft Entra beheerde identiteiten gebruiken AKS-primitieven om beheerde identiteiten voor Azure-resources en identiteiten in Microsoft Entra ID aan pods te koppelen. U gebruikt deze identiteiten om toegang te verlenen tot het CSI-stuurprogramma (Azure Key Vault Provider for Secrets Store Container Storage Interface).
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}
en {resource group name}
tijdelijke aanduidingen met uw eigen waarden. Zorg er ook voor dat de waarde van {resource group name}
overeenkomt 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 apply om het Secrets Store CSI stuurprogramma te installeren met 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 Application 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
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.
Voer in de prompt die vraagt om de naam en versie om de installatiekopieën te taggen, de naam todo:latest in.
Gebruik het Deelvenster Docker om de ingebouwde installatiekopie naar Azure Container Registry te pushen. U vindt de gebouwde afbeelding onder de Afbeeldingen knoop. Open de todo node, klik met de rechtermuisknop op latest en selecteer Push.
Selecteer in de prompts uw Azure-abonnement, Azure Container Registry-resource en installatiekopieëntags. Het formaat van de afbeeldingstag moet zijn
{acrname}.azurecr.io/todo:latest
.Wacht tot Visual Studio Code de containerafbeelding naar Azure Container Registry uploadt.
De YAML-implementatie voorbereiden
Gebruik de volgende YAML-sjabloon om een akstododeploy.yml-bestand te maken. Vervang de {ACR name}
, {Image name}
, {Version}
, en {resource group name}
plaatsaanduidingen 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.
Ruim de bronnen op
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