Bagikan melalui


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:

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:

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:

Cuplikan layar status penyebaran untuk grup sumber daya di portal Azure.

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

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

  1. Untuk membuat gambar kontainer dari tab Explorer di Visual Studio Code, klik kanan Dockerfile, lalu pilih Bangun Gambar.

    Cuplikan layar menu konteks di Visual Studio Code dengan opsi Gambar Build dipilih.

  2. Dalam perintah yang meminta nama dan versi untuk menandai gambar, masukkan nama todo:latest.

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

    Cuplikan layar menu konteks di Visual Studio Code dengan opsi Push dipilih.

  4. Dalam perintah, pilih langganan Azure Anda, sumber daya Azure Container Registry, dan tag gambar. Format tag gambar harus {acrname}.azurecr.io/todo:latest.

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