Tutorial: Menyebarkan aplikasi web ASP.NET dengan menggunakan Azure Cosmos DB untuk NoSQL, identitas terkelola, dan AKS melalui Bicep
BERLAKU UNTUK: NoSQL
Dalam tutorial ini, Anda akan menyebarkan referensi ASP.NET aplikasi web pada kluster Azure Kubernetes Service (AKS) yang terhubung ke Azure Cosmos DB untuk NoSQL.
Azure Cosmos DB adalah platform database terdistribusi yang dikelola sepenuhnya untuk pengembangan aplikasi modern dengan NoSQL atau database relasional.
AKS adalah layanan Kubernetes terkelola yang membantu Anda menyebarkan dan mengelola kluster dengan cepat.
Penting
- Artikel ini memerlukan versi terbaru Azure CLI. Untuk informasi selengkapnya, lihat Menginstal Azure CLI. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terpasang.
- Artikel ini juga memerlukan versi terbaru Bicep CLI dalam Azure CLI. Untuk informasi selengkapnya, lihat Instal Alat Bicep.
- Jika Anda menjalankan perintah dalam tutorial ini secara lokal alih-alih di Azure Cloud Shell, pastikan Anda menggunakan akun administrator.
Prasyarat
Alat berikut diperlukan untuk mengkompilasi aplikasi web ASP.NET dan membuat gambar kontainernya:
- Desktop Docker
- Visual Studio Code
- Ekstensi C# untuk Visual Studio Code
- Ekstensi docker untuk Visual Studio Code
- Ekstensi Akun Azure untuk Visual Studio Code
Gambaran Umum
Tutorial ini menggunakan pendekatan infrastruktur sebagai kode (IaC) untuk menyebarkan sumber daya ke Azure. Anda akan menggunakan Bicep, yang merupakan bahasa deklaratif baru yang menawarkan kemampuan yang sama dengan templat Azure Resource Manager. Namun, Bicep menyertakan sintaksis yang lebih ringkas dan lebih mudah digunakan.
Modul Bicep akan menyebarkan sumber daya Azure berikut dalam cakupan langganan yang ditargetkan:
- Grup sumber daya untuk menata sumber daya
- Identitas terkelola untuk autentikasi
- Registri kontainer untuk menyimpan gambar kontainer
- Kluster AKS
- Jaringan virtual untuk mengonfigurasi AKS
- Akun Azure Cosmos DB for NoSQL, bersama dengan database, kontainer, dan peran SQL
- Brankas kunci untuk menyimpan kunci aman
- (Opsional) Ruang kerja Analitik Log
Tutorial ini menggunakan praktik terbaik keamanan berikut dengan Azure Cosmos DB:
- Terapkan kontrol akses dengan menggunakan kontrol akses berbasis peran (RBAC) dan identitas terkelola. Fitur-fitur ini menghilangkan kebutuhan pengembang untuk mengelola rahasia, kredensial, sertifikat, dan kunci untuk komunikasi yang aman antar layanan.
- Batasi akses Azure Cosmos DB ke subnet AKS dengan mengonfigurasi titik akhir layanan jaringan virtual.
- Atur
disableLocalAuth = true
databaseAccount
dalam sumber daya untuk memberlakukan RBAC sebagai satu-satunya metode autentikasi.
Tip
Langkah-langkah dalam tutorial ini menggunakan Azure Cosmos DB untuk NoSQL. Namun, Anda dapat menerapkan konsep yang sama ke Azure Cosmos DB untuk MongoDB.
Mengunduh modul Bicep
Unduh atau kloning modul Bicep dari folder Bicep repositori GitHub azure-samples/cosmos-aks-samples:
git clone https://github.com/Azure-Samples/cosmos-aks-samples.git
cd Bicep/
Menyambungkan ke langganan Azure Anda
Gunakan az login untuk menyambungkan ke langganan Azure default Anda:
az login
Secara opsional, gunakan az account set dengan nama atau ID langganan tertentu untuk mengatur langganan aktif jika Anda memiliki beberapa langganan:
az account set \
--subscription <subscription-id>
Menginisialisasi parameter penyebaran
Buat file param.json dengan menggunakan JSON dalam contoh berikut. {resource group name}
Ganti tempat penampung , {Azure Cosmos DB account name}
, dan {Azure Container Registry instance name}
dengan nilai Anda sendiri.
Penting
Semua nama sumber daya yang Anda gunakan dalam kode berikut harus mematuhi aturan penamaan dan pembatasan untuk sumber daya Azure. Pastikan juga bahwa nilai tempat penampung diganti secara konsisten dan cocok dengan nilai dalam 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}"
}
}
}
Membuat penyebaran Bicep
Atur variabel shell dengan menggunakan perintah berikut. {deployment name}
Ganti tempat penampung dan {location}
dengan nilai Anda sendiri.
deploymentName='{deployment name}' # Name of the deployment
location='{location}' # Location for deploying the resources
Dalam folder Bicep, gunakan sub buat penyebaran az untuk menyebarkan templat ke cakupan langganan saat ini:
az deployment sub create \
--name $deploymentName \
--location $location \
--template-file main.bicep \
--parameters @param.json
Selama penyebaran, konsol akan menghasilkan pesan yang menunjukkan bahwa penyebaran masih berjalan:
/ Running ..
Penyebaran bisa memakan waktu 20 hingga 30 menit. Setelah provisi selesai, konsol akan menghasilkan JSON sebagai Succeeded
status provisi:
}
],
"provisioningState": "Succeeded",
"templateHash": "0000000000000000",
"templateLink": null,
"timestamp": "2022-01-01T00:00:00.000000+00:00",
"validatedResources": null
},
"tags": null,
"type": "Microsoft.Resources/deployments"
}
Anda juga dapat melihat status penyebaran di grup sumber daya:
Catatan
Saat Anda membuat kluster AKS, grup sumber daya kedua secara otomatis dibuat untuk menyimpan sumber daya AKS. Untuk informasi selengkapnya, lihat Mengapa dua grup sumber daya dibuat dengan AKS?.
Menautkan Azure Container Registry dengan AKS
Gunakan perintah berikut untuk menautkan instans Azure Container Registry Anda dengan AKS. {Azure Container Registry instance name}
Ganti tempat penampung dan {resource group name}
dengan nilai Anda sendiri.
acrName='{Azure Container Registry instance name}'
rgName='{resource group name}'
aksName=$rgName'aks'
Jalankan pembaruan az aks untuk melampirkan sumber daya Azure Container Registry yang ada dengan kluster AKS:
az aks update \
--resource-group $rgName \
--name $aksName \
--attach-acr $acrName
Menyambungkan ke kluster AKS
Untuk mengelola kluster Kubernetes, Anda menggunakan kubectl, klien baris perintah Kubernetes. Jika Anda menggunakan Azure Cloud Shell, kubectl
sudah terpasang. Untuk menginstal kubectl
secara lokal, gunakan az aks install-cli:
az aks install-cli
Untuk mengonfigurasi kubectl
agar terhubung ke kluster Kubernetes, gunakan az aks get-credentials. Perintah ini mengunduh informasi masuk dan mengonfigurasi CLI Kube untuk menggunakannya.
az aks get-credentials \
--resource-group $rgName \
--name $aksName
Menyambungkan pod AKS ke Azure Key Vault
Identitas yang dikelola pod Microsoft Entra menggunakan primitif AKS untuk mengaitkan identitas terkelola untuk sumber daya dan identitas Azure di ID Microsoft Entra dengan pod. Anda akan menggunakan identitas ini untuk memberikan akses ke Penyedia Azure Key Vault untuk Driver CSI Secrets Store.
Gunakan perintah berikut untuk menemukan nilai ID penyewa (homeTenantId
):
az account show
Gunakan templat YAML berikut untuk membuat file secretproviderclass.yml . {Tenant Id}
Ganti tempat penampung dan {resource group name}
dengan nilai Anda sendiri. Pastikan juga bahwa nilai untuk {resource group name}
cocok dengan nilai dalam 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.
Menerapkan SecretProviderClass ke kluster AKS
Gunakan kubectl apply untuk menginstal Secrets Store CSI Driver dengan menggunakan YAML:
kubectl apply \
--filename secretproviderclass.yml
Membangun aplikasi web ASP.NET
Unduh atau klon kode sumber aplikasi web dari folder Aplikasi repositori GitHub azure-samples/cosmos-aks-samples:
git clone https://github.com/Azure-Samples/cosmos-aks-samples.git
cd Application/
Buka folder Aplikasi di Visual Studio Code. Jalankan aplikasi dengan menggunakan kunci F5 atau perintah Debug: Mulai Debugging .
Mendorong gambar kontainer Docker ke Azure Container Registry
Untuk membuat gambar kontainer dari tab Explorer di Visual Studio Code, klik kanan Dockerfile, lalu pilih Bangun Gambar.
Dalam perintah yang meminta nama dan versi untuk menandai gambar, masukkan nama todo:latest.
Gunakan panel Docker untuk mendorong gambar bawaan ke Azure Container Registry. Anda akan menemukan gambar bawaan di bawah simpul Gambar . Buka simpul todo , klik kanan terbaru, lalu pilih Dorong.
Dalam perintah, pilih langganan Azure Anda, sumber daya Azure Container Registry, dan tag gambar. Format tag gambar harus
{acrname}.azurecr.io/todo:latest
.Tunggu Hingga Visual Studio Code mendorong gambar kontainer ke Azure Container Registry.
Menyiapkan YAML penyebaran
Gunakan templat YAML berikut untuk membuat file akstododeploy.yml . {ACR name}
Ganti tempat penampung , {Image name}
, {Version}
, dan {resource group name}
dengan nilai Anda sendiri.
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
Menerapkan YAML penyebaran
Gunakan kubectl apply
lagi untuk menyebarkan pod aplikasi dan mengekspos pod melalui load balancer:
kubectl apply \
--filename akstododeploy.yml \
--namespace 'my-app'
Uji aplikasi
Ketika aplikasi berjalan, layanan Kubernetes mengekspos ujung depan aplikasi ke internet. Diperlukan beberapa menit untuk menyelesaikan proses ini.
Gunakan kubectl get untuk melihat IP eksternal yang diekspos load balancer:
kubectl get services \
--namespace "my-app"
Untuk mengakses aplikasi, buka alamat IP yang Anda terima sebagai output di browser.
Membersihkan sumber daya
Untuk menghindari biaya Azure, bersihkan sumber daya yang tidak diperlukan saat Anda tidak lagi memerlukan kluster. Gunakan az group delete dan az deployment sub delete untuk menghapus grup sumber daya dan penyebaran langganan, masing-masing:
az group delete \
--resource-group $rgName
--yes
az deployment sub delete \
--name $deploymentName
Langkah berikutnya
- Pelajari cara mengembangkan aplikasi web dengan Azure Cosmos DB.
- Pelajari cara mengkueri Azure Cosmos DB untuk NoSQL.
- Pelajari cara meningkatkan kluster Anda.
- Pelajari cara menskalakan kluster Anda.
- Pelajari cara mengaktifkan penyebaran berkelanjutan.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk