Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Spring için Yapılandırma Sunucusu, yapılandırma verilerini birden çok uygulamanın kullanımına sunmak için merkezi bir konum sağlar. Bu makalede, Azure Container Apps'te barındırılan bir uygulamayı Spring örneği için Java Config Server'a bağlamayı öğreneceksiniz.
Spring Java için Yapılandırma Sunucusu bileşeni, yapılandırma ayarları için kaynak olarak bir GitHub deposu kullanır. Yapılandırma değerleri, bileşen ile kapsayıcı uygulamanız arasında bir bağlama aracılığıyla kapsayıcı uygulamanız için kullanılabilir hale getirilir. Yapılandırma sunucusunda değerler değiştikçe, bunlar uygulamanızı yeniden derlemenize veya yeniden dağıtmanıza gerek kalmadan uygulamanıza otomatik olarak akar.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Spring Java bileşeni için yapılandırma sunucusu oluşturma
- Spring için Yapılandırma Sunucusu'nu kapsayıcı uygulamanıza bağlama
- Yapılandırma sunucusunu uygulamanıza bağlamadan önce ve sonra yapılandırma değerlerini gözlemleyin
- Yapılandırma değerlerini simetrik anahtarla şifreleme ve şifresini çözme
Önemli
Bu öğreticide Azure faturanızı etkileyebilecek hizmetler kullanılır. Adım adım izlemeye karar verirseniz, beklenmeyen faturalamayı önlemek için bu makalede öne çıkan kaynakları sildiğinizden emin olun.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Henüz bir hesabınız yoksa ücretsiz olarak oluşturabilirsiniz.
- Azure CLI.
Dikkat edilmesi gereken noktalar
Azure Container Apps'te Spring için Config Server'da çalışırken aşağıdaki ayrıntılara dikkat edin:
| Kalem | Açıklama |
|---|---|
| Scope | Spring için Yapılandırma Sunucusu, bağlı kapsayıcı uygulamasıyla aynı ortamda çalışır. |
| Ölçeklendirme | Tek bir gerçek kaynağını korumak için Spring için Yapılandırma Sunucusu ölçeklendirilmiyor. Ölçeklendirme özellikleri minReplicas ve maxReplicas her ikisi de olarak 1ayarlanır. |
| Kaynaklar | Spring için Yapılandırma Sunucusu için kapsayıcı kaynak ayırması sabittir, CPU çekirdeklerinin sayısı 0,5 ve bellek boyutu 1Gi'dir. |
| Fiyatlandırma | Spring faturalaması için Yapılandırma Sunucusu tüketime dayalı fiyatlandırma kapsamındadır. Yönetilen Java bileşenleri tarafından tüketilen kaynaklar etkin/boşta kalma fiyatlarına göre faturalandırılır. Faturalamayı durdurmak için artık kullanımda olmayan bileşenleri silebilirsiniz. |
| Bağlama | Kapsayıcı uygulaması, bağlama yoluyla Spring için bir Yapılandırma Sunucusuna bağlanır. Bağlama, yapılandırmaları kapsayıcı uygulaması ortam değişkenlerine ekler. Bağlama oluşturulduktan sonra kapsayıcı uygulaması ortam değişkenlerinden yapılandırma değerlerini okuyabilir. |
Ayarlama
Spring için Yapılandırma Sunucusu ile çalışmaya başlamadan önce gerekli kaynakları oluşturmanız gerekir.
Kaynak grubunuzu ve Container Apps ortamınızı oluşturmak için aşağıdaki komutları yürütebilirsiniz.
Uygulama yapılandırmanızı desteklemek için değişkenler oluşturun. Bu değerler, bu dersin amaçları doğrultusunda size sağlanır.
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"Değişken Açıklama LOCATIONKapsayıcı uygulamanızı ve Java bileşenini oluşturduğunuz Azure bölgesi konumu. ENVIRONMENTTanıtım uygulamanızın Azure Container Apps ortam adı. RESOURCE_GROUPTanıtım uygulamanızın Azure kaynak grubu adı. JAVA_COMPONENT_NAMEKapsayıcı uygulamanız için oluşturulan Java bileşeninin adı. Bu durumda Spring Java bileşeni için bir Yapılandırma Sunucusu oluşturursunuz. IMAGEKapsayıcı uygulamanızda kullanılan kapsayıcı görüntüsü. URIURI'yi Git depo URL'nizle değiştirebilirsiniz; özelse ve spring.cloud.config.server.git.usernamegibispring.cloud.config.server.git.passwordilgili kimlik doğrulama yapılandırmalarını ekleyebilirsiniz.Azure CLI ile Azure'da oturum açın.
az loginKaynak grubu oluşturun.
az group create --name $RESOURCE_GROUP --location $LOCATIONKapsayıcı uygulamaları ortamınızı oluşturun.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Bu ortam hem Spring java için Yapılandırma Sunucusu bileşenini hem de kapsayıcı uygulamanızı barındırmak için kullanılır.
Spring Java için Yapılandırma Sunucusu bileşenini oluşturma
Artık bir Container Apps ortamınız olduğuna göre, kapsayıcı uygulamanızı oluşturabilir ve spring java bileşeni için bir Yapılandırma Sunucusu'na bağlayabilirsiniz. Kapsayıcı uygulamanızı bağladığınızda yapılandırma değerleri Yapılandırma Sunucusu bileşeninden uygulamanıza otomatik olarak eşitlenir.
Spring Java için Yapılandırma Sunucusu bileşenini oluşturun.
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=$URISpring Java için Yapılandırma Sunucusu bileşenini güncelleştirin.
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=60Burada bileşene, özelliği aracılığıyla
uriyapılandırma bilgilerinizi barındıran depoyu nerede bulacağını anlatacaksınız. özelliği,refresh-rateContainer Apps'e Git deponuzdaki değişiklikleri ne sıklıkta denetleyeceklerini bildirir.
Kapsayıcı uygulamanızı Spring Java için Yapılandırma Sunucusu bileşenine bağlama
Yapılandırma verilerini kullanan kapsayıcı uygulamasını oluşturun.
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.fqdnBu komut, yapılandırma verilerini kullanan kapsayıcı uygulamanızın URL'sini döndürür. Url'yi bir metin düzenleyicisine kopyalayarak gelecek adımda kullanabilirsiniz.
Uygulamanızı tarayıcıda ziyaret ederseniz,
connectTimeoutdöndürülen değer varsayılan değeridir0.Spring için Yapılandırma Sunucusuna bağlanın.
Artık kapsayıcı uygulaması ve Yapılandırma Sunucusu oluşturulduğuna göre, bunları kapsayıcı uygulamanıza komutuyla
updatebağlarsınız.az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $JAVA_COMPONENT_NAMEparametresi,
--bind $JAVA_COMPONENT_NAMEkapsayıcı uygulamanızla yapılandırma bileşeni arasındaki bağlantıyı oluşturur.
Kapsayıcı uygulaması ve Yapılandırma Sunucusu bileşeni birbirine bağlandıktan sonra yapılandırma değişiklikleri otomatik olarak kapsayıcı uygulamasıyla eşitlenir.
Uygulamanın URL'sini yeniden ziyaret ettiğinizde değeri connectTimeout şimdi 10000olur. Bu değer, başlangıçta yapılandırma bileşeninin kaynağı olarak ayarlanan değişkende $URI ayarlanan Git deposundan gelir. Özel olarak, bu değer deponun connectionTimeoutapplication.yml dosyasındaki özelliğinden çekilir.
Bağlama isteği, uygulamaya ortam değişkenleri olarak yapılandırma ayarı ekler. Bu değerler artık yapılandırma sunucusundan yapılandırma ayarları getirilirken kullanılacak uygulama kodu tarafından kullanılabilir.
Bu durumda, aşağıdaki ortam değişkenleri uygulama tarafından kullanılabilir:
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
Kendi SPRING_CONFIG_IMPORTortamınızı özelleştirmek istiyorsanız ortam değişkenine SPRING_CLOUD_CONFIG_COMPONENT_URI başvurabilirsiniz. Örneğin, gibi Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=truekomut satırı bağımsız değişkenleriyle geçersiz kılabilirsiniz.
Bağlamayı uygulamanızdan da kaldırabilirsiniz.
(İsteğe bağlı) Spring Java için Yapılandırma Sunucusu bileşeninden kapsayıcı uygulamanızın bağlantısını kaldırın
Kapsayıcı uygulamasından bağlamayı kaldırmak için seçeneğini kullanın --unbind .
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Uygulamanın URL'sini yeniden ziyaret ettiğinizde değeri connectTimeout olarak değişir 0.
Kaynakları temizleme
Bu öğreticide oluşturulan kaynakların Azure faturanız üzerinde etkisi vardır. Bu hizmetleri uzun süreli kullanmayacaksanız, bu öğreticide oluşturulan her şeyi kaldırmak için aşağıdaki komutu çalıştırın.
az group delete --resource-group $RESOURCE_GROUP
Yapılandırma seçenekleri
komutu, az containerapp update Spring için Yapılandırma Sunucusu'nu nasıl yapılandırıldığını denetlemek için parametresini kullanır --configuration . Bir boşlukla ayrıldığı sürece aynı anda birden çok parametre kullanabilirsiniz. Daha fazla bilgi için bkz . Spring Cloud Config Server.
Aşağıdaki tabloda, kullanılabilen farklı Git arka uç yapılandırma değerleri açıklanmaktadır:
| Veri Akışı Adı | Açıklama |
|---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
Uzak deponun URI'sini seçin. |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
Uzak depo ile kimlik doğrulaması için kullanıcı adı. |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
Uzak depo ile kimlik doğrulaması parolası. |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
Yerel çalışma kopyası içinde kullanılacak arama yolları. Varsayılan olarak, yalnızca kökü arar. |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
Deponun çekmeyi zorlaması gerektiğini belirten bayrak. ise true, yerel değişiklikleri atıp uzak depodan alın. |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
Git için kullanılan varsayılan etiket ana etikettir. Ayarlamazsanız spring.cloud.config.server.git.default-label ve main adlı bir dal yoksa, yapılandırma sunucusu varsayılan olarak master adlı bir dalı da kullanıma almaya çalışır. Geri dönüş dalı davranışını devre dışı bırakmak isterseniz olarak ayarlayabilirsiniz spring.cloud.config.server.git.tryMasterBranchfalse. |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
Yapılandırma sunucusu varsayılan olarak master adlı bir dalı kullanıma almaya çalışır. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
Özelliğini git.skipSslValidationolarak ayarlayarak, yapılandırma sunucusunun Git sunucusunun TLS/SSL sertifikası doğrulamasını true devre dışı bırakabilirsiniz. |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
Deponun isteğe bağlı değil başlangıçta kopyalanması gerektiğini belirten bayrak. Genellikle daha yavaş başlatmaya ama ilk sorguyu daha hızlı çalıştırmaya yol açar. |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
Varsa HTTP veya SSH bağlantısı elde etmek için saniyeler içinde zaman aşımı. Varsayılan değer 5 saniyedir. |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
Yapılandırma sunucusunun Git arka ucunuzdan güncelleştirilmiş yapılandırma verilerini getirme sıklıkları. |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
Geçerli SSH özel anahtarı. Ise ve Git URI'sinin SSH biçiminde olması durumunda ignore-local-ssh-settingstrue ayarlanmalıdır. |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
Geçerli SSH ana bilgisayar anahtarı. Ayrıca ayarlandıysa host-key-algorithm ayarlanmalıdır. |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
ssh-dss, , ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384veya ecdsa-sha2-nistp521. Ayrıca ayarlandıysa host-key ayarlanmalıdır. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
true veya false. ise false, konak anahtarıyla ilgili hataları yoksayın. |
spring.cloud.config.server.git.repos.{repoName} |
Uzak deponun URI'sini seçin. |
spring.cloud.config.server.git.repos.{repoName}.pattern |
Desen biçimi, joker karakterler içeren virgülle ayrılmış bir ad listesidir {application}/{profile} . Desenlerden {application}/{profile} herhangi biriyle eşleşmezse altında tanımlanan varsayılan URI'yi kullanır. |
Aşağıdaki listede yaygın yapılandırmalar açıklanmaktadır:
İlgili yapılandırmaları günlüğe kaydetme:
logging.level.*logging.group.*- Ad alanı altındaki
logging.*diğer tüm yapılandırmalar yasak olmalıdır; örneğin, kullanaraklogging.filegünlük dosyaları yazmak yasak olmalıdır.
spring.cloud.config.server.overrides- Koşulsuz olarak tüm istemcilere gönderilecek özellik kaynağı için ek eşleme.
spring.cloud.config.override-none- Uzak depodaki bayrağını (varsayılan değer false) ayarlayarak
spring.cloud.config.override-none=trueuygulamaların ortam değişkenlerinde veya Sistem özelliklerinde kendi değerlerini sağlamasına izin vererek istemcideki tüm geçersiz kılmaların önceliğini daha çok varsayılan değerlere benzer şekilde değiştirebilirsiniz.
- Uzak depodaki bayrağını (varsayılan değer false) ayarlayarak
spring.cloud.config.allow-override- Yapılandırmayı ilk bootstrap'ı etkinleştirirseniz, yapılandırma sunucusundan gelen uygulama yapılandırmasına iki özellik yerleştirerek istemci uygulamalarının yapılandırma sunucusundan yapılandırmayı geçersiz kılabilir.
spring.cloud.config.server.health.*- Özel profiller ve özel etiketlerle birlikte daha fazla uygulamayı denetlemek için Sistem Durumu Göstergesi'ni yapılandırabilirsiniz.
spring.cloud.config.server.accept-empty- Uygulama bulunamazsa sunucunun HTTP
spring.cloud.config.server.accept-emptydurumu döndürmesi için olarak ayarlayabilirsiniz.false404Varsayılan olarak, bu bayrak olaraktrueayarlanır.
- Uygulama bulunamazsa sunucunun HTTP
Şifreleme ve şifre çözme (simetrik):
encrypt.key- Yapılandırılan tek bir özellik değeri olduğundan simetrik anahtar kullandığınızda kullanışlıdır.
spring.cloud.config.server.encrypt.enabled- Sunucu tarafı şifre çözmeyi devre dışı bırakmak için bu özelliği olarak
falseayarlayın.
- Sunucu tarafı şifre çözmeyi devre dışı bırakmak için bu özelliği olarak
Yenile
Özellikleri kullanan hizmetlerin değişiklik gerçekleşmeden önce bunu bilmesi gerekir. Spring için Yapılandırma Sunucusu'nun varsayılan bildirim yöntemi, yenileme olayının el ile tetiklenmesini içerir; örneğin, çağrısıyla https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refreshyenileme, çok sayıda uygulama örneği varsa uygun olmayabilir.
Bunun yerine, yapılandırma istemcisinin bir yenileme iç öğesini temel alan değişiklikler için yoklamasına izin vererek yapılandırma sunucusundan değerleri otomatik olarak yenileyebilirsiniz. Yapılandırma Sunucusu'ndan değerleri otomatik olarak yenilemek için aşağıdaki adımları kullanın:
Aşağıdaki örnekte gösterildiği gibi belirli bir aralıkta bağlamı yenilemek için zamanlanmış bir görevi kaydedin:
@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)); } } }application.yml
autorefreshetkinleştirin ve ayarlayın. Aşağıdaki örnekte istemci, yenileme aralığı için ayarlayabileceğiniz en düşük değer olan 60 saniyede bir yapılandırma değişikliğini yoklar.Varsayılan olarak,
autorefresholarak ayarlanırfalseverefresh-interval60 saniye olarak ayarlanır.spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refreshKodunuzu ekleyin
@RefreshScope. Aşağıdaki örnekte değişkenconnectTimeouther 60 saniyede bir otomatik olarak yenilenir:@RestController @RefreshScope public class HelloController { @Value("${timeout:4000}") private String connectTimeout; }
Simetrik anahtarla şifreleme ve şifre çözme
Sunucu tarafı şifre çözme
Varsayılan olarak, sunucu tarafı şifreleme etkinleştirilir. Uygulamanızda şifre çözmeyi etkinleştirmek için aşağıdaki adımları kullanın:
Şifrelenmiş özelliği Git deponuzdaki .properties dosyanıza ekleyin.
Dosyanız aşağıdaki örneğe benzemelidir:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282fSpring Java için Yapılandırma Sunucusu bileşenini şifrelenmiş özelliğe sahip Git deposunu kullanacak şekilde güncelleştirin ve şifreleme anahtarını ayarlayın.
Aşağıdaki komutu çalıştırmadan önce, ile çevrelenen
<>yer tutucuları değerlerinizle değiştirin.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
İstemci tarafı şifre çözme
Aşağıdaki adımları izleyerek özelliklerin istemci tarafı şifre çözmesini kullanabilirsiniz:
Şifrelenmiş özelliği Git deponuzdaki .properties dosyanıza ekleyin.
Spring Java için Yapılandırma Sunucusu bileşenini şifrelenmiş özelliğe sahip Git deposunu kullanacak şekilde güncelleştirin ve sunucu tarafı şifre çözmeyi devre dışı bırakın.
Aşağıdaki komutu çalıştırmadan önce, ile çevrelenen
<>yer tutucuları değerlerinizle değiştirin.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İstemci uygulamanızda, şifre çözme anahtarını
ENCRYPT_KEY=randomKeyortam değişkeni olarak ekleyin.Alternatif olarak, öğesine eklerseniz
spring-cloud-starter-bootstrapclasspathveya bir sistem özelliği olarak ayarlarsanızspring.cloud.bootstrap.enabled=true, içindeencrypt.keyayarlayınbootstrap.properties.Aşağıdaki komutu çalıştırmadan önce, ile çevrelenen
<>yer tutucuları değerlerinizle değiştirin.az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"encrypt: key: somerandomkey