Menyambungkan ke Server Konfigurasi terkelola untuk Spring di Azure Container Apps
Config Server for Spring menyediakan lokasi terpusat untuk membuat data konfigurasi tersedia untuk beberapa aplikasi. Dalam artikel ini, Anda belajar menyambungkan aplikasi yang dihosting di Azure Container Apps ke Java Config Server untuk instans Spring.
Komponen Config Server for Spring Java menggunakan repositori GitHub sebagai sumber untuk pengaturan konfigurasi. Nilai konfigurasi tersedia untuk aplikasi kontainer Anda melalui pengikatan antara komponen dan aplikasi kontainer Anda. Saat nilai berubah di server konfigurasi, nilai tersebut secara otomatis mengalir ke aplikasi Anda, semuanya tanpa mengharuskan Anda untuk mengkombinasi ulang atau menyebarkan ulang aplikasi Anda.
Dalam tutorial ini, Anda mempelajari caranya:
- Membuat Config Server untuk komponen Spring Java
- Mengikat Server Konfigurasi untuk Spring ke aplikasi kontainer Anda
- Amati nilai konfigurasi sebelum dan sesudah menyambungkan server konfigurasi ke aplikasi Anda
- Mengenkripsi dan mendekripsi nilai konfigurasi dengan kunci konten
Penting
Tutorial ini menggunakan layanan yang dapat memengaruhi tagihan Azure Anda. Jika Anda memutuskan untuk mengikuti langkah demi langkah, pastikan Anda menghapus sumber daya yang ditampilkan dalam artikel ini untuk menghindari penagihan yang tidak terduga.
Prasyarat
- Akun Azure dengan langganan aktif. Jika Anda belum memilikinya, Anda dapat membuatnya secara gratis.
- Azure CLI.
Pertimbangan
Saat berjalan di Config Server for Spring di Azure Container Apps, ketahui detail berikut:
Item | Penjelasan |
---|---|
Cakupan | Server Konfigurasi untuk Spring berjalan di lingkungan yang sama dengan aplikasi kontainer yang terhubung. |
Penskalaan | Untuk mempertahankan satu sumber kebenaran, Server Konfigurasi untuk Spring tidak menskalakan. Properti minReplicas penskalakan dan maxReplicas keduanya diatur ke 1 . |
Sumber | Alokasi sumber daya kontainer untuk Config Server for Spring diperbaiki, jumlah inti CPU adalah 0,5, dan ukuran memorinya adalah 1Gi. |
Harga | Config Server untuk penagihan Spring berada di bawah harga berbasis konsumsi. Sumber daya yang digunakan oleh komponen Java terkelola ditagih dengan tarif aktif/diam. Anda dapat menghapus komponen yang tidak lagi digunakan untuk menghentikan penagihan. |
Pengikatan | Aplikasi kontainer terhubung ke Server Konfigurasi untuk Spring melalui pengikatan. Pengikatan menyuntikkan konfigurasi ke dalam variabel lingkungan aplikasi kontainer. Setelah pengikatan dibuat, aplikasi kontainer dapat membaca nilai konfigurasi dari variabel lingkungan. |
Siapkan
Sebelum Anda mulai bekerja dengan Config Server untuk Spring, Anda harus terlebih dahulu membuat sumber daya yang diperlukan.
Jalankan perintah berikut untuk membuat grup sumber daya dan lingkungan Container Apps Anda.
Buat variabel untuk mendukung konfigurasi aplikasi Anda. Nilai-nilai ini disediakan untuk Anda untuk tujuan pelajaran ini.
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export JAVA_COMPONENT_NAME=configserver export APP_NAME=my-config-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-config-client:latest" export URI="https://github.com/Azure-Samples/azure-spring-cloud-config-java-aca.git"
Variabel Deskripsi LOCATION
Lokasi wilayah Azure tempat Anda membuat aplikasi kontainer dan komponen Java. ENVIRONMENT
Nama lingkungan Azure Container Apps untuk aplikasi demo Anda. RESOURCE_GROUP
Nama grup sumber daya Azure untuk aplikasi demo Anda. JAVA_COMPONENT_NAME
Nama komponen Java yang dibuat untuk aplikasi kontainer Anda. Dalam hal ini, Anda membuat komponen Config Server for Spring Java. IMAGE
Gambar kontainer yang digunakan di aplikasi kontainer Anda. URI
Anda dapat mengganti URI dengan URL repositori Git Anda, jika bersifat privat, tambahkan konfigurasi autentikasi terkait seperti spring.cloud.config.server.git.username
danspring.cloud.config.server.git.password
.Masuk ke Azure dengan Azure CLI.
az login
Buat grup sumber daya.
az group create --name $RESOURCE_GROUP --location $LOCATION
Buat lingkungan aplikasi kontainer Anda.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Lingkungan ini digunakan untuk menghosting komponen Config Server for Spring java dan aplikasi kontainer Anda.
Membuat komponen Config Server for Spring Java
Setelah memiliki lingkungan Container Apps, Anda dapat membuat aplikasi kontainer dan mengikatnya ke komponen java Config Server for Spring. Saat Anda mengikat aplikasi kontainer, nilai konfigurasi secara otomatis disinkronkan dari komponen Config Server ke aplikasi Anda.
Buat komponen Config Server for Spring Java.
az containerapp env java-component config-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --min-replicas 1 \ --max-replicas 1 \ --configuration spring.cloud.config.server.git.uri=$URI
Perbarui komponen Config Server for Spring Java.
az containerapp env java-component config-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --min-replicas 2 \ --max-replicas 2 \ --configuration spring.cloud.config.server.git.uri=$URI spring.cloud.config.server.git.refresh-rate=60
Di sini, Anda memberi tahu komponen tempat menemukan repositori yang menyimpan informasi konfigurasi Anda melalui
uri
properti . Properti memberirefresh-rate
tahu Aplikasi Kontainer seberapa sering memeriksa perubahan di repositori Git Anda.
Mengikat aplikasi kontainer Anda ke komponen Config Server for Spring Java
Buat aplikasi kontainer yang menggunakan data konfigurasi.
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080 \ --query properties.configuration.ingress.fqdn
Perintah ini mengembalikan URL aplikasi kontainer Anda yang menggunakan data konfigurasi. Salin URL ke editor teks sehingga Anda dapat menggunakannya dalam langkah mendatang.
Jika Anda mengunjungi aplikasi di browser, nilai yang
connectTimeout
dikembalikan adalah nilai default .0
Ikat ke Server Konfigurasi untuk Spring.
Setelah aplikasi kontainer dan Config Server dibuat, Anda mengikatnya bersama dengan
update
perintah ke aplikasi kontainer Anda.az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $JAVA_COMPONENT_NAME
Parameter
--bind $JAVA_COMPONENT_NAME
membuat tautan antara aplikasi kontainer Anda dan komponen konfigurasi.
Setelah aplikasi kontainer dan komponen Config Server terikat bersama, perubahan konfigurasi secara otomatis disinkronkan ke aplikasi kontainer.
Saat Anda mengunjungi URL aplikasi lagi, nilainya connectTimeout
sekarang 10000
. Nilai ini berasal dari repositori Git yang ditetapkan dalam variabel yang $URI
awalnya ditetapkan sebagai sumber komponen konfigurasi. Secara khusus, nilai ini diambil dari connectionTimeout
properti dalam file application.yml repositori.
Permintaan pengikatan menyuntikkan pengaturan konfigurasi ke dalam aplikasi sebagai variabel lingkungan. Nilai-nilai ini sekarang tersedia untuk kode aplikasi yang akan digunakan saat mengambil pengaturan konfigurasi dari server konfigurasi.
Dalam hal ini, variabel lingkungan berikut tersedia untuk aplikasi:
SPRING_CLOUD_CONFIG_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CLOUD_CONFIG_COMPONENT_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CONFIG_IMPORT=optional:configserver:$SPRING_CLOUD_CONFIG_URI
Jika Anda ingin menyesuaikan sendiri SPRING_CONFIG_IMPORT
, Anda dapat merujuk ke variabel SPRING_CLOUD_CONFIG_COMPONENT_URI
lingkungan - misalnya, Anda dapat mengambil alih berdasarkan argumen baris perintah, seperti Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true
.
Anda juga dapat menghapus pengikatan dari aplikasi Anda.
(Opsional) Batalkan ikatan aplikasi kontainer Anda dari komponen Config Server for Spring Java
Untuk menghapus pengikatan dari aplikasi kontainer, gunakan --unbind
opsi .
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Saat Anda mengunjungi URL aplikasi lagi, nilai connectTimeout
perubahan menjadi kembali ke 0
.
Membersihkan sumber daya
Sumber daya yang dibuat dalam tutorial ini berpengaruh pada tagihan Azure Anda. Jika Anda tidak akan menggunakan layanan ini dalam jangka panjang, jalankan perintah berikut untuk menghapus semua yang dibuat dalam tutorial ini.
az group delete --resource-group $RESOURCE_GROUP
Opsi konfigurasi
Perintah az containerapp update
menggunakan --configuration
parameter untuk mengontrol bagaimana Config Server for Spring dikonfigurasi. Anda dapat menggunakan beberapa parameter sekaligus selama dipisahkan oleh spasi. Untuk informasi selengkapnya, lihat Spring Cloud Config Server.
Tabel berikut ini menjelaskan nilai konfigurasi backend Git yang berbeda yang tersedia:
Nama | Deskripsi |
---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
URI repositori jarak jauh. |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
Nama pengguna untuk autentikasi dengan repositori jarak jauh. |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
Kata sandi untuk autentikasi dengan repositori jarak jauh. |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
Cari jalur untuk digunakan dalam salinan kerja lokal. Secara default, hanya mencari akar. |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
Bendera untuk menunjukkan bahwa repositori harus menarik paksa. Jika true , buang perubahan lokal apa pun dan ambil dari repositori jarak jauh. |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
Label default yang digunakan untuk Git adalah utama. Jika Anda tidak mengatur spring.cloud.config.server.git.default-label dan cabang bernama utama tidak ada, server konfigurasi secara default juga mencoba memeriksa cabang bernama master. Jika Anda ingin menonaktifkan perilaku cabang fallback, Anda dapat mengatur spring.cloud.config.server.git.tryMasterBranch ke false . |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
Server konfigurasi secara default mencoba memeriksa cabang bernama master. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
Anda dapat menonaktifkan validasi server konfigurasi dari sertifikat TLS/SSL server Git dengan mengatur git.skipSslValidation properti ke true . |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
Bendera untuk menunjukkan bahwa repositori harus dikloning saat startup, bukan sesuai permintaan. Umumnya mengarah ke startup yang lebih lambat tetapi kueri pertama yang lebih cepat. |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
Batas waktu dalam detik untuk mendapatkan koneksi HTTP atau SSH, jika berlaku. Nilai default-nya adalah 5 detik. |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
Seberapa sering server konfigurasi mengambil data konfigurasi yang diperbarui dari backend Git Anda. |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
Kunci privat SSH yang valid. Harus diatur jika ignore-local-ssh-settings adalah true dan URI Git dalam format SSH. |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
Kunci host SSH yang valid. Harus diatur jika host-key-algorithm juga diatur. |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
Salah satu dari ssh-dss , , ssh-rsa ssh-ed25519 , ecdsa-sha2-nistp256 , ecdsa-sha2-nistp384 , atau ecdsa-sha2-nistp521 . Harus diatur jika host-key juga diatur. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
true atau false . Jika false , abaikan kesalahan dengan kunci host. |
spring.cloud.config.server.git.repos.{repoName} |
URI repositori jarak jauh. |
spring.cloud.config.server.git.repos.{repoName}.pattern |
Format pola adalah daftar {application}/{profile} nama yang dipisahkan koma dengan kartubebas. Jika {application}/{profile} tidak cocok dengan salah satu pola, pola tersebut menggunakan URI default yang ditentukan di bawah. |
Daftar berikut ini menjelaskan konfigurasi umum:
Konfigurasi terkait pengelogan:
logging.level.*
logging.group.*
- Konfigurasi lain di bawah
logging.*
namespace harus dilarang - misalnya, menulis file log dengan menggunakanlogging.file
harus dilarang.
spring.cloud.config.server.overrides
- Peta tambahan untuk sumber properti yang akan dikirim ke semua klien secara tanpa syarat.
spring.cloud.config.override-none
- Anda dapat mengubah prioritas semua penimpaan di klien menjadi lebih seperti nilai default, memungkinkan aplikasi menyediakan nilainya sendiri dalam variabel lingkungan atau properti Sistem, dengan mengatur
spring.cloud.config.override-none=true
bendera - defaultnya adalah false - di repositori jarak jauh.
- Anda dapat mengubah prioritas semua penimpaan di klien menjadi lebih seperti nilai default, memungkinkan aplikasi menyediakan nilainya sendiri dalam variabel lingkungan atau properti Sistem, dengan mengatur
spring.cloud.config.allow-override
- Jika Anda mengaktifkan bootstrap pertama konfigurasi, Anda dapat mengizinkan aplikasi klien untuk mengambil alih konfigurasi dari server konfigurasi dengan menempatkan dua properti dalam konfigurasi aplikasi yang berasal dari server konfigurasi.
spring.cloud.config.server.health.*
- Anda dapat mengonfigurasi Indikator Kesehatan untuk memeriksa lebih banyak aplikasi bersama dengan profil kustom dan label kustom.
spring.cloud.config.server.accept-empty
- Anda dapat mengatur
spring.cloud.config.server.accept-empty
kefalse
sehingga server mengembalikan status HTTP404
jika aplikasi tidak ditemukan. Secara default, bendera ini diatur ketrue
.
- Anda dapat mengatur
Enkripsi dan dekripsi (simetris):
encrypt.key
- Nyaman saat Anda menggunakan kunci konten karena merupakan nilai properti tunggal untuk dikonfigurasi.
spring.cloud.config.server.encrypt.enabled
- Atur properti ini ke
false
untuk menonaktifkan dekripsi sisi server.
- Atur properti ini ke
Refresh
Layanan yang menggunakan properti perlu mengetahui tentang perubahan sebelum terjadi. Metode pemberitahuan default untuk Config Server for Spring melibatkan pemicu peristiwa refresh secara manual, seperti refresh dengan panggilan https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh
, yang mungkin tidak layak jika ada banyak instans aplikasi.
Sebagai gantinya, Anda dapat secara otomatis menyegarkan nilai dari Config Server dengan membiarkan polling klien konfigurasi untuk perubahan berdasarkan refresh internal. Gunakan langkah-langkah berikut untuk menyegarkan nilai secara otomatis dari Config Server:
Daftarkan tugas terjadwal untuk merefresh konteks dalam interval tertentu, seperti yang ditunjukkan dalam contoh berikut:
@Configuration @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class}) @EnableScheduling public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer { @Value("${spring.cloud.config.refresh-interval:60}") private long refreshInterval; @Value("${spring.cloud.config.auto-refresh:false}") private boolean autoRefresh; private final RefreshEndpoint refreshEndpoint; public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) { this.refreshEndpoint = refreshEndpoint; } @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { if (autoRefresh) { // set minimal refresh interval to 5 seconds refreshInterval = Math.max(refreshInterval, 5); scheduledTaskRegistrar.addFixedRateTask(refreshEndpoint::refresh, Duration.ofSeconds(refreshInterval)); } } }
Aktifkan
autorefresh
dan atur interval refresh yang sesuai dalam file application.yml . Dalam contoh berikut, klien melakukan polling untuk perubahan konfigurasi setiap 60 detik, yang merupakan nilai minimum yang dapat Anda atur untuk interval refresh.Secara default,
autorefresh
diatur kefalse
danrefresh-interval
diatur ke 60 detik.spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refresh
Tambahkan
@RefreshScope
dalam kode Anda. Dalam contoh berikut, variabelconnectTimeout
secara otomatis di-refresh setiap 60 detik:@RestController @RefreshScope public class HelloController { @Value("${timeout:4000}") private String connectTimeout; }
Enkripsi dan dekripsi dengan kunci konten
Dekripsi sisi server
Secara default, enkripsi sisi server diaktifkan. Gunakan langkah-langkah berikut untuk mengaktifkan dekripsi di aplikasi Anda:
Tambahkan properti terenkripsi di file .properties Anda di repositori Git Anda.
File Anda harus menyerupai contoh berikut:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
Perbarui komponen Config Server for Spring Java untuk menggunakan repositori Git yang memiliki properti terenkripsi dan atur kunci enkripsi.
Sebelum Anda menjalankan perintah berikut, ganti tempat penampung yang dikelilingi dengan
<>
nilai Anda.az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> encrypt.key=randomKey
Dekripsi sisi klien
Anda dapat menggunakan dekripsi sisi klien properti dengan mengikuti langkah-langkah berikut:
Tambahkan properti terenkripsi di file .properties Anda di repositori Git Anda.
Perbarui komponen Config Server for Spring Java untuk menggunakan repositori Git yang memiliki properti terenkripsi dan menonaktifkan dekripsi sisi server.
Sebelum Anda menjalankan perintah berikut, ganti tempat penampung yang dikelilingi dengan
<>
nilai Anda.az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> spring.cloud.config.server.encrypt.enabled=false
Di aplikasi klien Anda, tambahkan kunci
ENCRYPT_KEY=randomKey
dekripsi sebagai variabel lingkungan.Atau, jika Anda menyertakan
spring-cloud-starter-bootstrap
padaclasspath
, atau ditetapkanspring.cloud.bootstrap.enabled=true
sebagai properti sistem, aturencrypt.key
dalambootstrap.properties
.Sebelum Anda menjalankan perintah berikut, ganti tempat penampung yang dikelilingi dengan
<>
nilai Anda.az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"
encrypt: key: somerandomkey