Mulai cepat: Menggunakan Azure App Configuration di Azure Kubernetes Service
Di Kubernetes, Anda menyiapkan pod untuk mengonsumsi konfigurasi dari ConfigMaps. Ini memungkinkan Anda memisahkan konfigurasi dari gambar kontainer Anda, membuat aplikasi Anda mudah portabel. Penyedia Kubernetes Azure App Configuration dapat membuat ConfigMaps dan Secrets dari nilai kunci dan referensi Key Vault Anda di Azure App Configuration. Ini memungkinkan Anda memanfaatkan Azure App Configuration untuk penyimpanan terpusat dan manajemen konfigurasi Anda tanpa perubahan apa pun pada kode aplikasi Anda.
ConfigMap dapat digunakan sebagai variabel lingkungan atau file yang dipasang. Dalam mulai cepat ini, Anda menggabungkan Penyedia Kubernetes Azure App Configuration dalam beban kerja Azure Kubernetes Service tempat Anda menjalankan konfigurasi penggunaan aplikasi ASP.NET Core sederhana dari file JSON.
Tip
Lihat opsi untuk beban kerja yang dihosting di Kubernetes untuk mengakses Azure App Configuration.
Catatan
Mulai cepat ini akan memancang Anda menyiapkan Penyedia Kubernetes Azure App Configuration. Secara opsional, Anda dapat menggunakan perintah Azure Developer CLI berikut dengan azure-appconfig-aks
templat untuk memprovisikan sumber daya Azure dan menyebarkan aplikasi sampel yang digunakan oleh mulai cepat ini. Untuk informasi selengkapnya tentang templat ini, kunjungi repositori azure-appconfig-aks di GitHub.
azd init -t azure-appconfig-aks
azd up
Prasyarat
- Penyimpanan App Configuration. Buat toko.
- An Azure Container Registry. Buat registri.
- Kluster Azure Kubernetes Service (AKS) yang diberikan izin untuk menarik gambar dari Azure Container Registry Anda. Buat kluster AKS.
- .NET SDK 6.0 atau yang lebih baru
- Azure CLI
- Desktop Docker
- helm
- kubectl
Membuat aplikasi yang berjalan di AKS
Di bagian ini, Anda akan membuat aplikasi web ASP.NET Core sederhana yang berjalan di Azure Kubernetes Service (AKS). Aplikasi membaca konfigurasi dari file JSON lokal. Di bagian berikutnya, Anda akan mengaktifkannya untuk menggunakan konfigurasi dari Azure App Configuration tanpa mengubah kode aplikasi. Jika Anda sudah memiliki aplikasi AKS yang membaca konfigurasi dari file, lewati bagian ini dan buka Gunakan Penyedia Kubernetes App Configuration. Anda hanya perlu memastikan file konfigurasi yang dihasilkan oleh penyedia cocok dengan jalur file yang digunakan oleh aplikasi Anda.
Membuat aplikasi
Gunakan antarmuka baris perintah (CLI) .NET dan jalankan perintah berikut untuk membuat proyek aplikasi web ASP.NET Core baru di direktori MyWebApp baru:
dotnet new webapp --output MyWebApp --framework net6.0
Buka Index.cshtml di direktori Pages, dan perbarui konten dengan kode berikut.
@page @model IndexModel @using Microsoft.Extensions.Configuration @inject IConfiguration Configuration @{ ViewData["Title"] = "Home page"; } <style> h1 { color: @Configuration["Settings:FontColor"]; } </style> <div class="text-center"> <h1>@Configuration["Settings:Message"]</h1> </div>
Buat direktori konfigurasi di akar proyek Anda dan tambahkan file mysettings.json ke dalamnya dengan konten berikut.
{ "Settings": { "FontColor": "Black", "Message": "Message from the local configuration" } }
Buka program.cs dan tambahkan file JSON ke sumber konfigurasi dengan memanggil
AddJsonFile
metode .// Existing code in Program.cs // ... ... // Add a JSON configuration source builder.Configuration.AddJsonFile("config/mysettings.json", reloadOnChange: true, optional: false); var app = builder.Build(); // The rest of existing code in program.cs // ... ...
Meng-kontainer aplikasi
Jalankan perintah terbitkan dotnet untuk membuat aplikasi dalam mode rilis dan membuat aset di direktori yang diterbitkan.
dotnet publish -c Release -o published
Buat file bernama Dockerfile di akar direktori proyek Anda, buka di editor teks, dan masukkan konten berikut. Dockerfile adalah file teks yang tidak memiliki ekstensi dan yang digunakan untuk membuat gambar kontainer.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime WORKDIR /app COPY published/ ./ ENTRYPOINT ["dotnet", "MyWebApp.dll"]
Buat gambar kontainer bernama aspnetapp dengan menjalankan perintah berikut.
docker build --tag aspnetapp .
Mendorong gambar ke Azure Container Registry
Jalankan perintah az acr login untuk masuk ke registri kontainer Anda. Contoh berikut masuk ke registri bernama myregistry. Ganti nama registri dengan nama Anda.
az acr login --name myregistry
Perintah mengembalikan
Login Succeeded
setelah masuk berhasil.Gunakan tag docker untuk membuat tag myregistry.azurecr.io/aspnetapp:v1 untuk aspnetapp gambar.
docker tag aspnetapp myregistry.azurecr.io/aspnetapp:v1
Tip
Untuk meninjau daftar gambar dan tag docker yang ada, jalankan
docker image ls
. Dalam skenario ini, Anda akan melihat setidaknya dua gambar:aspnetapp
danmyregistry.azurecr.io/aspnetapp
.Gunakan docker push untuk mengunggah gambar ke registri kontainer. Misalnya, perintah berikut mendorong gambar ke repositori bernama aspnetapp dengan tag v1 di bawah registri myregistry.
docker push myregistry.azurecr.io/aspnetapp:v1
Menyebarkan aplikasi
Buat direktori Penyebaran di direktori akar proyek Anda.
Tambahkan file deployment.yaml ke direktori Penyebaran dengan konten berikut untuk membuat penyebaran. Ganti nilai
template.spec.containers.image
dengan gambar yang Anda buat di langkah sebelumnya.apiVersion: apps/v1 kind: Deployment metadata: name: aspnetapp-demo labels: app: aspnetapp-demo spec: replicas: 1 selector: matchLabels: app: aspnetapp-demo template: metadata: labels: app: aspnetapp-demo spec: containers: - name: aspnetapp image: myregistry.azurecr.io/aspnetapp:v1 ports: - containerPort: 80
Tambahkan file service.yaml ke direktori Penyebaran dengan konten berikut untuk membuat layanan LoadBalancer.
apiVersion: v1 kind: Service metadata: name: aspnetapp-demo-service spec: type: LoadBalancer ports: - port: 80 selector: app: aspnetapp-demo
Jalankan perintah berikut untuk menyebarkan aplikasi ke kluster AKS.
kubectl create namespace appconfig-demo kubectl apply -f ./Deployment -n appconfig-demo
Jalankan perintah berikut dan dapatkan alamat IP Eksternal yang diekspos oleh layanan LoadBalancer.
kubectl get service aspnetapp-demo-service -n appconfig-demo
Buka jendela browser, dan navigasikan ke alamat IP yang diperoleh di langkah sebelumnya. Halaman web terlihat seperti ini:
Menggunakan Penyedia Kubernetes App Configuration
Setelah aplikasi berjalan di AKS, Anda akan menyebarkan Penyedia Kubernetes App Configuration ke kluster AKS yang berjalan sebagai pengontrol Kubernetes. Penyedia mengambil data dari penyimpanan App Configuration Anda dan membuat ConfigMap, yang dapat dikonsumsi sebagai file JSON yang dipasang dalam volume data.
Menyiapkan penyimpanan Azure App Configuration
Tambahkan nilai kunci berikut ke penyimpanan App Configuration dan biarkan Label dan Tipe Konten dengan nilai defaultnya. Untuk informasi selengkapnya tentang cara menambahkan nilai kunci ke penyimpanan menggunakan portal Azure atau CLI, buka Membuat nilai kunci.
Kunci | Nilai |
---|---|
Pengaturan:FontColor | Hijau |
Pengaturan:Pesan | Halo dari Azure App Configuration |
Menyiapkan Penyedia Kubernetes App Configuration
Jalankan perintah berikut untuk mendapatkan kredensial akses untuk kluster AKS Anda. Ganti nilai
name
parameter danresource-group
dengan instans AKS Anda:az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
Instal Penyedia Kubernetes Azure App Configuration ke kluster AKS Anda menggunakan
helm
:helm install azureappconfiguration.kubernetesprovider \ oci://mcr.microsoft.com/azure-app-configuration/helmchart/kubernetes-provider \ --namespace azappconfig-system \ --create-namespace
Tip
Penyedia Kubernetes App Configuration juga tersedia sebagai ekstensi AKS. Integrasi ini memungkinkan penginstalan dan manajemen yang mulus melalui Templat Azure CLI, ARM, atau Bicep. Menggunakan ekstensi AKS memfasilitasi pembaruan versi minor/patch otomatis, memastikan sistem Anda selalu diperbarui. Untuk petunjuk penginstalan terperinci, lihat ekstensi Azure App Configuration untuk Azure Kubernetes Service.
Tambahkan file appConfigurationProvider.yaml ke direktori Penyebaran dengan konten berikut untuk membuat
AzureAppConfigurationProvider
sumber daya.AzureAppConfigurationProvider
adalah sumber daya kustom yang menentukan data apa yang akan diunduh dari penyimpanan Azure App Configuration dan membuat ConfigMap.apiVersion: azconfig.io/v1 kind: AzureAppConfigurationProvider metadata: name: appconfigurationprovider-sample spec: endpoint: <your-app-configuration-store-endpoint> target: configMapName: configmap-created-by-appconfig-provider configMapData: type: json key: mysettings.json auth: workloadIdentity: serviceAccountName: <your-service-account-name>
Ganti nilai
endpoint
bidang dengan titik akhir penyimpanan Azure App Configuration Anda. Lanjutkan ke langkah berikutnya untuk memperbarui bagianauth
dengan informasi autentikasi Anda.Catatan
AzureAppConfigurationProvider
adalah objek API deklaratif. Ini menentukan status yang diinginkan dari ConfigMap yang dibuat dari data di penyimpanan App Configuration Anda dengan perilaku berikut:- ConfigMap akan gagal dibuat jika ConfigMap dengan nama yang sama sudah ada di namespace yang sama.
- ConfigMap akan direset berdasarkan data yang ada di penyimpanan App Configuration Anda jika dihapus atau dimodifikasi dengan cara lain.
- ConfigMap akan dihapus jika Penyedia Kubernetes App Configuration dihapus instalasinya.
Ikuti instruksi untuk menggunakan identitas beban kerja untuk mengautentikasi dengan penyimpanan App Configuration Anda. Perbarui file appConfigurationProvider.yaml dengan mengganti
serviceAccountName
bidang dengan nama akun layanan yang Anda buat. Untuk informasi selengkapnya tentang metode autentikasi lainnya, lihat contoh di bagian Autentikasi .Perbarui file deployment.yaml di direktori Penyebaran untuk menggunakan ConfigMap
configmap-created-by-appconfig-provider
sebagai volume data yang dipasang. Penting untuk memastikan bahwavolumeMounts.mountPath
cocok denganWORKDIR
yang ditentukan di Dockerfile Anda dan direktori konfigurasi yang dibuat sebelumnya.apiVersion: apps/v1 kind: Deployment metadata: name: aspnetapp-demo labels: app: aspnetapp-demo spec: replicas: 1 selector: matchLabels: app: aspnetapp-demo template: metadata: labels: app: aspnetapp-demo spec: containers: - name: aspnetapp image: myregistry.azurecr.io/aspnetapp:v1 ports: - containerPort: 80 volumeMounts: - name: config-volume mountPath: /app/config volumes: - name: config-volume configMap: name: configmap-created-by-appconfig-provider
Jalankan perintah berikut untuk menyebarkan perubahan. Ganti namespace jika Anda menggunakan aplikasi AKS yang ada.
kubectl apply -f ./Deployment -n appconfig-demo
Refresh browser. Halaman ini memperlihatkan konten yang diperbarui.
Pemecahan Masalah
Jika Anda tidak melihat aplikasi mengambil data dari penyimpanan App Configuration, jalankan perintah berikut untuk memvalidasi bahwa ConfigMap dibuat dengan benar.
kubectl get configmap configmap-created-by-appconfig-provider -n appconfig-demo
Jika ConfigMap tidak dibuat, jalankan perintah berikut untuk mendapatkan status pengambilan data.
kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml
Jika Penyedia Kubernetes Azure App Configuration berhasil mengambil data dari penyimpanan App Configuration Anda, phase
properti di bawah bagian status output harus COMPLETE
, seperti yang ditunjukkan dalam contoh berikut.
$ kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml
apiVersion: azconfig.io/v1
kind: AzureAppConfigurationProvider
... ... ...
status:
lastReconcileTime: "2023-04-06T06:17:06Z"
lastSyncTime: "2023-04-06T06:17:06Z"
message: Complete sync settings to ConfigMap or Secret
phase: COMPLETE
Jika fasenya bukan COMPLETE
, data tidak diunduh dari penyimpanan App Configuration Anda dengan benar. Jalankan perintah berikut untuk menampilkan log Penyedia Kubernetes Azure App Configuration.
kubectl logs deployment/az-appconfig-k8s-provider -n azappconfig-system
Gunakan log untuk pemecahan masalah lebih lanjut. Lihat bagian FAQ untuk masalah umum.
FAQ
Mengapa ConfigMap atau Secret tidak dibuat?
Anda dapat mengikuti langkah-langkah dalam panduan Pemecahan Masalah untuk mengumpulkan log untuk informasi kesalahan terperinci. Berikut adalah beberapa penyebab umum.
- RESPONSE 403: 403 Forbidden: Identitas yang dikonfigurasi tidak memiliki izin yang diperlukan untuk mengakses penyimpanan App Configuration. Lihat bagian Autentikasi untuk contoh yang cocok dengan identitas yang Anda gunakan.
- Referensi Key Vault ditemukan di App Configuration, tetapi 'spec.secret' tidak dikonfigurasi: Satu atau beberapa referensi Key Vault disertakan dalam nilai kunci yang dipilih, tetapi informasi autentikasi untuk Key Vault tidak disediakan. Untuk mempertahankan integritas konfigurasi, seluruh konfigurasi gagal dimuat. Konfigurasikan bagian
spec.secret
untuk memberikan informasi autentikasi yang diperlukan. Untuk contoh dan informasi selengkapnya, lihat Referensi Key Vault .
Mengapa ConfigMap yang dihasilkan tidak berisi data yang diharapkan?
Pastikan Anda menentukan pemilih nilai kunci yang benar agar sesuai dengan data yang diharapkan. Jika tidak ada pemilih yang ditentukan, semua nilai kunci tanpa label akan diunduh dari penyimpanan App Configuration Anda. Saat menggunakan filter kunci, verifikasi bahwa filter tersebut cocok dengan awalan nilai kunci yang diharapkan. Jika nilai kunci Anda memiliki label, pastikan untuk menentukan filter label di pemilih. Untuk contoh lainnya, lihat dokumentasi pemilihan nilai kunci.
Bagaimana cara menyesuaikan penginstalan Penyedia Kubernetes Azure App Configuration?
Anda dapat menyesuaikan penginstalan dengan menyediakan nilai Helm tambahan saat menginstal Penyedia Kubernetes Azure App Configuration. Misalnya, Anda dapat mengatur tingkat log, mengonfigurasi penyedia untuk berjalan pada simpul tertentu, atau menonaktifkan identitas beban kerja. Lihat panduan penginstalan untuk informasi selengkapnya.
Mengapa saya tidak dapat mengautentikasi dengan Azure App Configuration menggunakan identitas beban kerja setelah meningkatkan penyedia ke versi 2.0.0?
Dimulai dengan versi 2.0.0, akun layanan yang disediakan pengguna diperlukan untuk mengautentikasi dengan Azure App Configuration menggunakan identitas beban kerja. Perubahan ini meningkatkan keamanan melalui isolasi namespace layanan. Sebelumnya, akun layanan penyedia Kubernetes digunakan untuk semua namespace layanan. Untuk instruksi yang diperbarui, lihat dokumentasi tentang menggunakan identitas beban kerja. Jika Anda memerlukan waktu untuk bermigrasi saat meningkatkan ke versi 2.0.0, Anda dapat mengatur workloadIdentity.globalServiceAccountEnabled=true
sementara selama penginstalan penyedia. Harap dicatat bahwa dukungan untuk menggunakan akun layanan penyedia akan ditolak dalam rilis mendatang.
Membersihkan sumber daya
Hapus instalan Penyedia Kubernetes App Configuration dari kluster AKS jika Anda ingin menyimpan kluster AKS.
helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system
Jika Anda tidak ingin terus menggunakan sumber daya yang dibuat dalam artikel ini, hapus grup sumber daya yang Anda buat di sini untuk menghindari biaya.
Penting
Penghapusan grup sumber daya tidak bisa dipulihkan. Grup sumber daya dan semua sumber daya yang ada di dalamnya akan dihapus secara permanen. Pastikan Anda tidak menghapus grup atau sumber daya yang salah secara tidak sengaja. Jika Anda membuat sumber daya untuk artikel ini dalam grup sumber daya yang ada yang berisi sumber daya lain yang ingin disimpan, hapus setiap sumber daya satu per satu dari panelnya masing-masing, bukan menghapus grup sumber daya.
- Masuk ke portal Azure, lalu pilih Grup sumber daya.
- Dalam kotak Filter menurut nama, masukkan nama grup sumber daya Anda.
- Dalam daftar hasil, pilih nama grup sumber daya untuk melihat gambaran umum.
- Pilih Hapus grup sumber daya.
- Anda akan diminta untuk mengonfirmasi penghapusan grup sumber daya. Masukkan nama grup sumber daya Anda untuk mengonfirmasi, dan pilih Hapus.
Setelah beberapa saat, grup sumber daya dan semua sumber dayanya akan dihapus.
Catatan
Jika Anda menggunakan Azure Developer CLI untuk menyiapkan sumber daya, Anda dapat menjalankan azd down
perintah untuk menghapus semua sumber daya yang azure-appconfig-aks
dibuat oleh templat.
Langkah berikutnya
Dalam mulai cepat ini, Anda akan:
- Membuat aplikasi yang berjalan di Azure Kubernetes Service (AKS).
- Menghubungkan kluster AKS ke penyimpanan App Configuration menggunakan Penyedia Kubernetes App Configuration.
- Membuat ConfigMap dengan data dari penyimpanan App Configuration Anda.
- Menjalankan aplikasi dengan konfigurasi dari penyimpanan App Configuration Anda tanpa mengubah kode aplikasi Anda.
Untuk mempelajari cara memperbarui beban kerja AKS Anda untuk menyegarkan konfigurasi secara dinamis, lanjutkan ke tutorial berikutnya.
Untuk mempelajari selengkapnya tentang Penyedia Kubernetes Azure App Configuration, lihat Referensi Penyedia Kubernetes Azure App Configuration.