Bagikan melalui


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

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

  1. 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
    
  2. 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>
    
  3. 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"
      }
    }
    
  4. 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

  1. Jalankan perintah terbitkan dotnet untuk membuat aplikasi dalam mode rilis dan membuat aset di direktori yang diterbitkan.

    dotnet publish -c Release -o published
    
  2. 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"]
    
  3. Buat gambar kontainer bernama aspnetapp dengan menjalankan perintah berikut.

    docker build --tag aspnetapp .
    

Mendorong gambar ke Azure Container Registry

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

  2. 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 dan myregistry.azurecr.io/aspnetapp.

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

  1. Buat direktori Penyebaran di direktori akar proyek Anda.

  2. 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
    
  3. 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
    
  4. Jalankan perintah berikut untuk menyebarkan aplikasi ke kluster AKS.

    kubectl create namespace appconfig-demo
    kubectl apply -f ./Deployment -n appconfig-demo
    
  5. Jalankan perintah berikut dan dapatkan alamat IP Eksternal yang diekspos oleh layanan LoadBalancer.

    kubectl get service aspnetapp-demo-service -n appconfig-demo
    
  6. Buka jendela browser, dan navigasikan ke alamat IP yang diperoleh di langkah sebelumnya. Halaman web terlihat seperti ini:

    Cuplikan layar memperlihatkan Penyedia Kubernetes sebelum menggunakan configMap.

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

  1. Jalankan perintah berikut untuk mendapatkan kredensial akses untuk kluster AKS Anda. Ganti nilai name parameter dan resource-group dengan instans AKS Anda:

    az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
    
  2. 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.

  3. 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 bagian auth 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.
  4. 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 .

  5. Perbarui file deployment.yaml di direktori Penyebaran untuk menggunakan ConfigMap configmap-created-by-appconfig-provider sebagai volume data yang dipasang. Penting untuk memastikan bahwa volumeMounts.mountPath cocok dengan WORKDIR 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
    
  6. Jalankan perintah berikut untuk menyebarkan perubahan. Ganti namespace jika Anda menggunakan aplikasi AKS yang ada.

    kubectl apply -f ./Deployment -n appconfig-demo
    
  7. Refresh browser. Halaman ini memperlihatkan konten yang diperbarui.

    Cuplikan layar memperlihatkan Penyedia Kubernetes setelah menggunakan configMap.

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.

  1. Masuk ke portal Azure, lalu pilih Grup sumber daya.
  2. Dalam kotak Filter menurut nama, masukkan nama grup sumber daya Anda.
  3. Dalam daftar hasil, pilih nama grup sumber daya untuk melihat gambaran umum.
  4. Pilih Hapus grup sumber daya.
  5. 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.