Menyebarkan aplikasi cloud-native Anda secara manual ke Azure Kubernetes Service
Sebelum dapat mengotomatiskan penyebaran situs web, Anda perlu menyebarkan aplikasi eShop yang ada secara manual ke Azure Kubernetes Service (AKS). Anda membuat sumber daya Azure dan menyebarkan aplikasi ke AKS menggunakan perintah Azure CLI dan skrip bash. Terakhir, Anda membuat perwakilan layanan Azure Active Directory (Azure AD) untuk memungkinkan GitHub Actions melakukan penyebaran ke AKS dan Azure Container Registry.
Perintah membuat sumber daya berikut untuk menyebarkan versi aplikasi eShop yang diperbarui.
- Provisikan Azure Container Registry (ACR) lalu dorong gambar ke registri.
- Provisikan kluster AKS, lalu sebarkan kontainer ke dalam kluster.
- Uji penyebaran.
- Buat perwakilan layanan untuk memungkinkan GitHub Actions disebarkan ke AKS dan Azure Container Registry.
Penting
Pastikan Anda telah menyelesaikan prasyarat sebelum memulai.
Buka lingkungan pengembangan
Anda dapat memilih untuk menggunakan ruang kode GitHub yang menghosting latihan, atau menyelesaikan latihan secara lokal di Visual Studio Code.
Penyiapan Codespaces GitHub
Fork repositori https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops ke akun GitHub Anda sendiri. Kemudian pada fork baru Anda:
- Pilih Kode.
- Pilih tab Codespace.
- Pilih ikon + untuk membuat codespace Anda.
GitHub membutuhkan waktu beberapa menit untuk membuat dan mengonfigurasi codespace. Setelah proses selesai, Anda akan melihat file kode untuk latihan.
Opsional: Pengaturan Visual Studio Code
Untuk menggunakan Visual Studio Code, fork https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops repositori ke akun GitHub Anda sendiri dan kloning secara lokal. Kemudian:
- Pasang persyaratan sistem apa pun untuk menjalankan Dev Container di Visual Studio Code.
- Pastikan Docker berjalan.
- Di jendela Visual Studio Code baru, buka folder repositori kloning
- Tekan Ctrl+Shift+P untuk membuka palet perintah.
- Pencarian: >Dev Containers: Rekonstruksi dan Buka Kembali di Kontainer
- Visual Studio Code membuat kontainer pengembangan Anda secara lokal.
Membangun kontainer
Di panel terminal, jalankan perintah CLI dotnet ini:
dotnet publish /p:PublishProfile=DefaultContainer
Membuat sumber daya Azure
Di panel terminal, masuk ke Azure dengan perintah Azure CLI ini:
az login --use-device-codeMenampilkan langganan Azure yang dipilih.
az account show -o tableJika langganan yang salah dipilih, gunakan perintah az account set untuk memilih langganan yang benar.
Jalankan perintah Azure CLI berikut untuk mendapatkan daftar wilayah Azure dan Nama yang terkait dengannya:
az account list-locations -o tableTemukan wilayah yang paling dekat dengan Anda dan gunakan di langkah berikutnya dengan mengganti
[Closest Azure region]Jalankan perintah bash ini:
export LOCATION=[Closest Azure region] export RESOURCE_GROUP=rg-eshop export CLUSTER_NAME=aks-eshop export ACR_NAME=acseshop$SRANDOMPerintah sebelumnya membuat variabel lingkungan yang akan Anda gunakan dalam perintah Azure CLI berikutnya. Anda perlu mengubah LOKASI ke wilayah Azure yang dekat dengan Anda seperti eastus. Jika Anda menginginkan nama yang berbeda untuk grup sumber daya, kluster AKS, atau ACR, ubah nilai tersebut. Untuk melihat repositori baru Anda di portal Microsoft Azure, tetapkan diri Anda sebagai Administrator Otomatisasi Kepatuhan Aplikasi di Kontrol akses (IAM) registri kontainer.
Jalankan perintah Azure CLI ini:
az group create --name $RESOURCE_GROUP --location $LOCATION az acr create --resource-group $RESOURCE_GROUP --name $ACR_NAME --sku Basic az acr login --name $ACR_NAMEJika Anda menerima kesalahan autentikasi saat
az acr login --name $ACR_Namedijalankan, Anda perlu mengaktifkan Pengguna admin di daftar kontainer yang baru dibuat di Azure di bawah Pengaturan - Kunci Akses. Azure meminta Anda memasukkan kredensial ini untuk melanjutkan. Anda mungkin juga perlu mengautentikasi lagi denganaz login --use-device-code.Perintah ini membuat grup sumber daya yang akan menampung sumber daya Azure, ACR untuk gambar Anda, lalu masuk ke ACR. Dibutuhkan beberapa menit hingga Anda melihat output ini:
... }, "status": null, "systemData": { "createdAt": "2023-10-19T09:11:51.389157+00:00", "createdBy": "", "createdByType": "User", "lastModifiedAt": "2023-10-19T09:11:51.389157+00:00", "lastModifiedBy": "", "lastModifiedByType": "User" }, "tags": {}, "type": "Microsoft.ContainerRegistry/registries", "zoneRedundancy": "Disabled" } Login SucceededUntuk menandai gambar Anda dan mendorongnya ke ACR yang Anda buat, jalankan perintah ini:
docker tag store $ACR_NAME.azurecr.io/storeimage:v1 docker tag products $ACR_NAME.azurecr.io/productservice:v1 docker push $ACR_NAME.azurecr.io/storeimage:v1 docker push $ACR_NAME.azurecr.io/productservice:v1Anda dapat memeriksa apakah pengunggahan gambar telah berhasil diselesaikan dengan perintah ini:
az acr repository list --name $ACR_NAME --output tableBuat AKS Anda dan sambungkan ke ACR dengan perintah ini:
az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 1 --generate-ssh-keys --node-vm-size Standard_B2s --network-plugin azure --attach-acr $ACR_NAME az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUPPerintah ini membuat kluster AKS dengan satu simpul, menghubungkannya ke ACR, dan kemudian menyambungkan komputer lokal Anda ke kluster AKS. Perintah dapat memakan waktu beberapa menit untuk diselesaikan.
Periksa apakah AKS baru dapat menarik gambar dari ACR dengan perintah ini:
az aks check-acr --acr $ACR_NAME.azurecr.io --name $CLUSTER_NAME --resource-group $RESOURCE_GROUPAnda akan melihat output serupa dengan pesan berikut:
[2023-10-19T13:33:09Z] Loading azure.json file from /etc/kubernetes/azure.json [2023-10-19T13:33:09Z] Checking managed identity... [2023-10-19T13:33:09Z] Cluster cloud name: AzurePublicCloud [2023-10-19T13:33:09Z] Kubelet managed identity client ID: 00001111-aaaa-2222-bbbb-3333cccc4444 [2023-10-19T13:33:09Z] Validating managed identity existance: SUCCEEDED [2023-10-19T13:33:09Z] Validating image pull permission: SUCCEEDED [2023-10-19T13:33:09Z] Your cluster can pull images from acseshop1251599299.azurecr.io!Anda sekarang dapat menjalankan perintah kubectl terhadap kluster AKS baru Anda. Salin URL ACR lengkap dari output; misalnya, di atas URL adalah acseshop1251599299.
Periksa status kluster AKS Anda:
kubectl get nodes -AAnda akan melihat output serupa dengan pesan berikut:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37200563-vmss000000 Ready agent 3h44m v1.26.6
Mengonfigurasi manifes penyebaran Kubernetes
Sekarang gambar eShop berada di ACR, Anda dapat memperbarui manifes penyebaran AKS untuk menggunakan gambar baru ini.
Di Visual Studio Code atau Codespaces, dari panel EXPLORER, pilih file deployment.yml di akar proyek.
Ganti pada baris 17:
- image: [replace with your ACR name].azurecr.io/storeimage:v1Tempelkan nama ACR yang disalin dari langkah sebelumnya - baris akan terlihat mirip dengan yaml berikut:
- image: acseshop1251599299.azurecr.io/storeimage:v1Ulangi langkah-langkah ini untuk baris 65:
- image: [replace with your ACR name].azurecr.io/productservice:v1Simpan file dengan CTRL+S.
Di panel terminal, sebarkan pengontrol ingress NGINX dengan perintah kubernetes berikut:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.3/deploy/static/provider/cloud/deploy.yamlPerintah
kubectlmenambahkan layanan dan komponen untuk memungkinkan akses ke kluster AKS Anda. Periksa apakah ingress siap dijalankan menggunakan perintah kubernetes berikut:kubectl get services --namespace ingress-nginxAnda akan melihat output serupa dengan pesan berikut:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.0.135.51 20.26.154.64 80:32115/TCP,443:32254/TCP 58s ingress-nginx-controller-admission ClusterIP 10.0.137.137 <none> 443/TCP 58sSebarkan aplikasi eShop dengan perintah ini:
kubectl apply -f deployment.ymlPerintah
kubectlmengimplementasikan perintah apply untuk menerapkan aplikasi eShop: sebuah aplikasi web Blazor front-end dan layanan produk REST API back-end, serta aturan ingress untuk merutekan lalu lintas ke layanan yang benar di dalam kluster AKS Anda. Jalankan kembali perintah ini jika Anda mengalami kesalahan saat penyebaran.Anda akan melihat output serupa dengan pesan berikut:
deployment.apps/storeimage created service/eshop-website created deployment.apps/productservice created service/eshop-backend created ingress.networking.k8s.io/eshop-ingress createdPeriksa apakah dua layanan mikro disebarkan dengan perintah ini:
kubectl get pods -AAnda akan melihat output serupa dengan pesan berikut:
NAMESPACE NAME READY STATUS RESTARTS AGE default productservice-7569b8c64-vfbfz 1/1 Running 0 3m56s default storeimage-6c7c999d7c-zsnxd 1/1 Running 0 3m56s ingress-nginx ingress-nginx-admission-create-szb8l 0/1 Completed 0 4m4s ingress-nginx ingress-nginx-admission-patch-czdbv 0/1 Completed 0 4m4s ingress-nginx ingress-nginx-controller-58bf5bf7dc-nwtsr 1/1 Running 0 4m4sLihat eShop yang dipublikasikan dengan perintah ini:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"Perintah mengembalikan alamat IP eksternal untuk aplikasi web. Tahan CTRL dan klik tautan untuk membuka aplikasi di tab baru.
Membuat entitas layanan untuk mengaktifkan dari GitHub
GitHub Actions dapat menerbitkan gambar kontainer ke Azure Container Registry. Oleh karena itu, GitHub runner harus memiliki izin untuk terhubung ke Azure. Langkah-langkah berikut membuat prinsipal layanan Azure Active Directory untuk berfungsi sebagai identitas GitHub Actions di Azure.
Untuk menyimpan ID Langganan Anda dalam variabel lingkungan, jalankan perintah berikut di terminal:
export SUBS=$(az account show --query 'id' --output tsv)Untuk membuat entitas layanan Azure AD untuk mengizinkan akses dari GitHub, jalankan perintah berikut:
az ad sp create-for-rbac --name "eShop" --role contributor --scopes /subscriptions/$SUBS/resourceGroups/$RESOURCE_GROUP --json-authVariasi output berikut muncul:
Creating 'Contributor' role assignment under scope '/subscriptions/ffffffff-aaaa-bbbb-6666-777777777777' The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444", "clientSecret": "abc1A~abc123ABC123abc123ABC123abc123ABC1", "subscriptionId": "00000000-0000-0000-0000-000000000000", "tenantId": "00000000-0000-0000-0000-000000000000", "activeDirectoryEndpointUrl": "https://login.microsoftonline.com", "resourceManagerEndpointUrl": "https://management.azure.com/", "activeDirectoryGraphResourceId": "https://graph.windows.net/", "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/", "galleryEndpointUrl": "https://gallery.azure.com/", "managementEndpointUrl": "https://management.core.windows.net/" }Salin output dan tanda kurung JSON untuk digunakan di langkah berikutnya.
Membuat rahasia GitHub
Runner GitHub Actions menggunakan kredensial untuk berinteraksi dengan Container Registry dan AKS. Perwakilan layanan dan kredensial untuk registri kontainer adalah informasi sensitif. Yang terbaik adalah menyimpan informasi sensitif sebagai rahasia terenkripsi di lokasi yang aman. GitHub menyediakan lokasi bawaan untuk menyimpan rahasia dan variabel lainnya.
Selesaikan langkah-langkah berikut untuk menyimpan informasi sensitif dengan aman sebagai variabel lingkungan di repositori Anda. Administrator repositori harus mengelola rahasia yang dapat diakses oleh runner GitHub Actions.
Di repositori GitHub fork Anda, buka Settings>Secrets and variables>Actions.
Pada halaman Actions secrets and variables, pilih New repository secret.
New secret Pada halaman, di bawah Name, masukkan AZURE_CREDENTIALS, dan di bawah Secret, masukkan output JSON yang Anda salin dari terminal.
Pengaturan akan terlihat mirip dengan cuplikan layar berikut:
Pilih Add secret.
Anda akan menggunakan rahasia GitHub ini di bagian berikutnya untuk membuat tindakan GitHub untuk membangun gambar kontainer.