Azure Container Apps'da kapsayıcı uygulamaları arasında iletişim kurma

Azure Container Apps, kapsayıcı uygulamalarınızın altyapıyı yönetmeden birbirleriyle iletişim kurabilmesi için yerleşik hizmet bulma ve yönlendirme sağlar. Aynı ortama birden çok kapsayıcı uygulaması dağıttığınızda, platform DNS çözümlemesini, yük dengelemeyi ve güvenli trafik yönlendirmesini otomatik olarak işler.

Ingress etkinse, her kapsayıcı uygulaması bir domain adı alır. Bu uç noktayı genel kullanıma açabilir veya aynı ortamdaki diğer kapsayıcı uygulamalarıyla kısıtlayabilirsiniz.

Kapsayıcı uygulamaları aşağıdaki yöntemlerden herhangi biri aracılığıyla birbirine erişebilir:

  • Tam Nitelikli Alan Adı (FQDN) : varsayılan olarak oluşturulan etki alanı
  • Uygulama adı: dahili aramalar için kısa formlu http://<APP_NAME> bir adres
  • Dapr hizmet çağrısı: Yerleşik yeniden denemeler ve gözlemlenebilirlik ile sepet tabanlı bir yaklaşım
  • Özel alan adı: yönetilen sertifika ile kendi alan adınız

Not

FQDN veya uygulama adını kullanarak aynı ortamdaki başka bir kapsayıcı uygulamasını çağırdığınızda, ağ trafiği ortamdan hiçbir zaman ayrılmaz.

Neden önemlidir?

Mikro hizmetler mimarisinde hizmetlerin birbirini güvenilir bir şekilde çağırması gerekir. Azure Container Apps hizmet bulmayı ayarlama, DNS kayıtlarını yönetme ve ters proxy'leri yapılandırma işlem yükünü ortadan kaldırır.

Platform sizin için şunları işler:

  • Otomatik DNS kaydı: Her kapsayıcı uygulama dağıtıldığında hemen çözümlenebilir bir ana bilgisayar adı kazanır.
  • Ara sunucuyla yönetilen yönlendirme: Tüm uygulamalar arası trafik, TLS sonlandırma, trafik bölme ve yük dengelemeyi işleyen yerleşik bir Envoy proxy katmanı üzerinden akar.
  • Ortam kapsamlı yalıtım: İç uç noktalara yalnızca aynı ortamdan ulaşılabilir ve doğal bir güvenlik sınırı oluşturulur.
  • Protokol esnekliği: İş yükü gereksinimlerinize bağlı olarak HTTP/1.1, HTTP/2 (gRPC için) veya ham TCP üzerinden iletişim.

Bu özellikler ağ tesisatı yerine uygulama mantığınıza odaklanabileceğiniz anlamına gelir.

Kapsayıcı uygulaması konumu (FQDN)

Her kapsayıcı uygulamasının tam etki alanı adı uygulama adından, benzersiz bir ortam tanımlayıcıdan ve bölgeden oluşur. Bu etki alanı parçalarının azurecontainerapps.io tümü en üst düzey etki alanının altına girer.

Azure Container Apps kapsayıcı uygulamasının tam etki alanı adı.

Dış ve iç Tam Nitelikli Alan Adları (FQDN'ler)

Giriş görünürlüğü ayarı, uygulamanızın ortamın dışından erişilebilir olup olmadığını denetler:

Görünürlük FQDN düzeni Ulaşılabilen kaynak
Dış <APP_NAME>.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io Her yerde (genel internet)
İç <APP_NAME>.internal.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io Yalnızca aynı ortam

Girişi olarak ayarladığınızda, FQDN bir .internal. bölüm içerir. Aynı ortamdaki diğer kapsayıcı uygulamaları bu adresi kullanarak uygulamaya yine de ulaşabilir, ancak ortamın dışından gelen istekler ortamın proxy'sinden bir 404 yanıt alır. DNS adı ortamın paylaşılan IP'sine çözümleniyor, ancak uygulama yalnızca dahili olduğundan proxy isteği reddediyor.

Tam etki alanı adını alma

az containerapp show komutu, bir kapsayıcı uygulamasının tam etki alanı adını döndürür.

az containerapp show \
  --resource-group <RESOURCE_GROUP_NAME> \
  --name <CONTAINER_APP_NAME> \
  --query properties.configuration.ingress.fqdn

Bu örnekte, c0 ile belirtilen yer tutucuları değerlerinizle değiştirin.

Bu komuttan döndürülen değer, aşağıdaki örneğe benzer bir etki alanı adına benzer:

myapp.happyhill-70162bb9.canadacentral.azurecontainerapps.io

Düzeltme etiketi Tam Nitelikli Alan Adları (FQDN'ler)

Belirli düzeltmelere etiket atadığınızda, her etiket üç çizgili ayırıcı kullanarak kendi benzersiz FQDN'sini alır:

<APP_NAME>---<LABEL>.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io

İç uygulamalar için, desen .internal. segmentini içerir.

<APP_NAME>---<LABEL>.internal.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io

Etiket FQDN'leri trafiği doğrudan belirli bir düzeltmeye göndermenizi sağlar. Bu uygulama, yeni sürümleri test etme, A/B denemeleri çalıştırma veya belirli düzeltme dağıtımları için kararlı uç noktalar sağlama için kullanışlıdır.

Kapsayıcı uygulamayı adıyla çağırma

Aynı ortamda yer alan başka bir kapsayıcı uygulamayı çağırmanın en kolay yolu, onu adıyla çağırmaktır. http://<CONTAINER_APP_NAME> öğesine bir istek gönderin ve ortamın yerleşik DNS'i adı otomatik olarak çözülür.

http://my-backend-api

DNS çözümlemesi nasıl çalışır?

arka planda, Azure Container Apps kapsayıcı uygulama adlarını yönlendirilebilir adreslere çeviren özel bir DNS yapılandırması kullanır. Uygulamanız başka bir uygulamanın adına veya FQDN'sine istekte bulunursa:

  1. Çevrenin DNS sunucusu, ana bilgisayar adını Envoy proxy hizmeti adresine dönüştürür.
  2. Envoy proxy, hedef uygulamayı orijinal ana bilgisayar adından tanımlar.
  3. Ara sunucu, isteği trafik yapılandırmanıza göre doğru sürüm(ler)e yönlendirir.

Bu mimari, kapsayıcı uygulamalarının hiçbir zaman birbirlerinin podlarıyla doğrudan iletişim kurmamalarını sağlar. Tüm trafik TLS sonlandırma, yük dengeleme ve trafik bölme sağlayan ara sunucu katmanından geçer.

Tip

Aynı ortamdaki kapsayıcı uygulamaları arasındaki çağrılar için kısa uygulama adını (http://<APP_NAME>) kullanın. Tam FQDN'den daha basittir ve DNS her iki deseni de aynı ara sunucu üzerinden çözümlediğinden aynı şekilde çalışır.

Aktarım protokolleri

Kapsayıcı uygulamalar giriş için üç aktarım modunu destekler ve transport özelliği kullanılarak yapılandırılır.

Transport Kullanım örneği Ayrıntılar
Otomatik (varsayılan) Standart web API'leri ve hizmetleri HTTP/1.1 ve HTTP/2'ye otomatik olarak anlaşma sağlar
HTTP/2 gRPC hizmetleri gRPC için gereken HTTP/2 uçtan uca'yı etkinleştirir
TCP HTTP olmayan protokoller (veritabanları, özel protokoller) Bağlantı noktası eşlemesi ile ham TCP bağlantıları

Not

Dış TCP girişleri, özel bir sanal ağ gerektirir. Özel bir sanal ağ olmadan bir dış TCP uygulaması oluşturmaya çalışırsanız bir ContainerAppTcpRequiresVnet hata alırsınız. İç TCP girişi özel bir sanal ağ olmadan çalışır.

TCP aktarımını kullandığınızda, birincil giriş bağlantı noktasının ötesinde ek bağlantı noktalarını da kullanıma sağlayabilirsiniz. Her ek bağlantı noktası, ortamdaki diğer uygulamaların bağlanabileceği ayrı bir TCP uç noktası oluşturur.

Trafik bölme ve düzeltme yönlendirme

Azure Container Apps, trafiğin kapsayıcı uygulamaları arasında nasıl dağıtıldığını etkileyen üç düzeltme modunu destekler:

Çalışma Modu Davranış
Tek Tüm trafik en son aktif revizyona gider.
Birden Çok Trafik, trafik kurallarınıza göre önceki sürümler arasında yüzdelik olarak bölünür.
Etiketler Etiketli her düzeltme, doğrudan erişim için benzersiz bir FQDN alır.

Birden çok modda, başka bir kapsayıcı uygulaması uygulamanızın FQDN'sini çağırdığında, proxy istekleri yapılandırılmış ağırlıklara göre revizyonlar arasında otomatik olarak dağıtır. Etiketler modunda arayanlar, FQDN etiketini kullanarak belirli bir düzeltmeyi hedefleyebilir.

Daha fazla bilgi için bkz. Azure Container Apps Revizyonlar.

Dapr hizmeti çağırma

Dapr (Dağıtılmış Uygulama Çalışma Zamanı), uygulamalar arası iletişim için sepet tabanlı bir yaklaşım sağlar. Dapr'yi etkinleştirerek kapsayıcı uygulamalarınız karşılıklı TLS, otomatik yeniden denemeler ve Azure Application Insights aracılığıyla dağıtılmış izleme ile yerleşik hizmet çağrısı elde eder.

Azure Container Apps kapsayıcı uygulamasının konumunu Dapr ile gösteren diyagram.

Dapr çağırma nasıl çalışır?

Dapr özellikli her kapsayıcı uygulaması, uygulamanızla birlikte bir sepet işlemi çalıştırır. Başka bir Dapr özellikli uygulamaya istek yapmak için, hizmet bulma ve yönlendirmeyi işleyen Dapr yan birimine yerel bir HTTP isteği gönderin.

http://localhost:3500/v1.0/invoke/<DAPR_APP_ID>/method/<METHOD_NAME>

Örneğin, catalog kimlikli bir uygulamada order-processor yöntemini çağırmak için:

http://localhost:3500/v1.0/invoke/order-processor/method/catalog

Yan araba, hedef uygulamayı ayrılmış bir DNS etki alanı aracılığıyla çözümleyerek isteği Envoy proxy katmanı üzerinden yönlendirir. Bu, FQDN tabanlı yönlendirmeyi işleyen altyapıyla aynıdır.

Not

Dapr, standart FQDN çözümlemesinden ayrı kendi DNS çözümleme yolunu ( .dapr etki alanı) kullanır. Her iki yol da ortamın proxy altyapısı üzerinden yönlendirilir.

Dapr Uygulama Kimliği

Dapr Uygulama Kimliği, diğer uygulamaların hizmetinizi çağırmak için kullandığı kimliktir. Açık bir Uygulama Kimliği ayarlamazsanız, Dapr çalışma zamanı varsayılan olarak kapsayıcı uygulama adınızı kullanır. ARM API, özel bir kimlik yapılandırmadığınızda appId: null gösterir, ancak çalışma zamanı uygulama adını otomatik olarak uygular. Farklı bir tanımlayıcıya ihtiyacınız varsa Dapr yapılandırmanızda özel bir Uygulama Kimliği ayarlayın.

Dapr Uygulama Kimlikleri bir ortamda benzersiz olmalıdır. Zaten başka bir uygulama tarafından kullanılmakta olan bir Dapr Uygulama Kimliğine sahip bir kapsayıcı uygulaması dağıtmaya çalışırsanız, kapsayıcı uygulaması kaynağı oluşturulur ancak düzeltmesi sağlayamaz (provisioningState: Failed ). Hata iletisi çakışan Uygulama Kimliğini ve bu kimliğin sahibi olan uygulamayı tanımlar.

Yalnızca dapr uygulamaları (HTTP girişi yok)

HTTP girişini yapılandırmadan kapsayıcı uygulamasında Dapr'i etkinleştirebilirsiniz. Bu durumda, uygulamaya bir FQDN veya uygulama adı üzerinden ulaşılamaz, ancak diğer Dapr özellikli uygulamalar yine de Dapr hizmeti çağrısı aracılığıyla uygulamayı çağırabilir. Bu düzen, yalnızca ağ içindeki diğer hizmetlerden çağrı alması gereken arka plan çalışanları veya olay işlemcileri için kullanışlıdır.

Tip

Azure CLI ile giriş yok uygulaması oluşturduğunuzda hem --ingress hem de --target-port bayraklarını atlarsınız. --target-port olmadan --ingress dahil etmek bir kullanım hatası döndürür.

Dapr sepet yapılandırması

Kapsayıcı uygulamanızın özellikleri aracılığıyla Dapr sidecar'ını yapılandırırsınız. Önemli ayarlar şunlardır:

Setting Açıklama
appId Dapr Uygulama Kimliği (varsayılan olarak kapsayıcı uygulaması adıdır)
appPort Uygulamanızın dinleyiş noktası (giriş hedef bağlantı noktasına geri döner)
appProtocol Dapr'dan uygulamaya iletişim protokolü (örneğin, http, grpc)
logLevel Dapr sidecar günlük ayrıntı seviyesi
enableApiLogging Dapr API çağrılarının günlüğe kaydedilip kaydedilmeyeceği
httpMaxRequestSize Dapr'ın HTTP sunucusu için MB cinsinden en büyük istek gövdesi boyutu
httpReadBufferSize KB'de HTTP okuma arabelleğinin en büyük boyutu

Azure Container Apps ile Dapr'ı yapılandırma hakkında daha fazla bilgi için bkz. Azure Container Apps ile Dapr tümleştirmesi.

Uygulamalar arası iletişim için güvenlik

Azure Container Apps, kapsayıcı uygulamalarının iletişim kurma biçimini etkileyen çeşitli güvenlik özellikleri içerir:

  • Varsayılan olarak TLS: Kapsayıcı uygulamaları arasındaki tüm trafik, TLS sonlandırmasını işleyen Envoy ara sunucusu üzerinden yönlendirilir. HTTPS yeniden yönlendirmelerini zorunlu kılmak için allowInsecure ögesini false (varsayılan) olarak ayarlayın.
  • İstemci sertifika modu (mTLS): İstemci sertifika modunu require, acceptveya ignoreolarak ayarlayarak karşılıklı TLS'yi yapılandırın.
  • IP kısıtlamaları: Uygulamanıza hangi IP adreslerinin ulaşabileceğini kısıtlamak için izin verme veya reddetme kuralları tanımlayın.
  • CORS ilkeleri: Kapsayıcı uygulamalarınızı çağıran tarayıcı tabanlı istemciler için çıkış noktaları arası kaynak paylaşım kurallarını yapılandırın.

Not

Dapr hizmet çağrısını kullandığınızda, Dapr yan birimleri, hizmetler arasındaki karşılıklı TLS (Transport Layer Security) ile iletişimi otomatik olarak güvence altına alır. Dapr-to-Dapr çağrıları için mTLS'yi ayrı olarak yapılandırmanız gerekmez.

Daha fazla bilgi için Azure Container Apps'te Ingress sayfasına bakın.

Özel alan adları

Giriş ayarlarında özel alan adları yapılandırarak kendi alan adlarınızı bir kapsayıcı uygulamasına eşleştirebilirsiniz. Her özel etki alanı, yönetilen veya karşıya yüklenen bir TLS sertifikasına referans verebilir.

Özel alan adları, varsayılan FQDN ile birlikte kaydedilir, bu nedenle uygulamanız her iki adrese de yanıt verir. Ortamdaki diğer kapsayıcı uygulamalarının uygulamanıza ulaşması gerektiğinde, bunlar varsayılan FQDN'yi, uygulama adını veya özel etki alanınızı kullanabilir.

Daha fazla bilgi için bkz: Azure Container Apps'te Özel Etki Alanları.

Örnek çözüm

Hem FQDN hem de Dapr kullanarak kapsayıcılar arasında çağrı yapmayı gösteren bir örnek Azure Samples üzerinde kullanılabilir.

Azure Container Apps'de uygulamalar arası iletişimi anlamak, ilgili birkaç konuya bağlanır:

Sonraki adım