Berkomunikasi antara aplikasi kontainer di Azure Container Apps

Azure Container Apps menyediakan penemuan dan perutean layanan bawaan sehingga aplikasi kontainer Anda dapat berkomunikasi satu sama lain tanpa mengelola infrastruktur. Saat Anda menyebarkan beberapa aplikasi kontainer ke lingkungan yang sama, platform menangani resolusi DNS, penyeimbangan beban, dan perutean lalu lintas yang aman secara otomatis.

Jika ingress diaktifkan, setiap aplikasi kontainer akan mendapatkan nama domain. Anda dapat membuat titik akhir tersebut tersedia untuk umum atau membatasinya ke aplikasi kontainer lain di lingkungan yang sama.

Aplikasi kontainer dapat menjangkau satu sama lain melalui salah satu metode berikut:

  • Nama domain yang sepenuhnya memenuhi syarat (FQDN) : domain yang dihasilkan default
  • Nama aplikasi: alamat formulir http://<APP_NAME> pendek untuk panggilan internal
  • Pemanggilan layanan Dapr: pendekatan berbasis sidecar dengan pencobaan ulang dan kemampuan observasi bawaan
  • Domain kustom: nama domain Anda sendiri dengan sertifikat terkelola

Catatan

Saat Anda memanggil aplikasi kontainer lain di lingkungan yang sama dengan menggunakan FQDN atau nama aplikasi, lalu lintas jaringan tidak pernah meninggalkan lingkungan.

Mengapa penting

Dalam arsitektur layanan mikro, layanan perlu saling memanggil satu sama lain dengan andal. Azure Container Apps menghapus beban operasional menyiapkan penemuan layanan, mengelola catatan DNS, dan mengonfigurasi proksi terbalik.

Inilah yang ditangani platform untuk Anda:

  • Pendaftaran DNS otomatis: Setiap aplikasi kontainer mendapatkan nama host yang dapat diselesaikan segera setelah disebarkan.
  • Perutean yang dikelola proksi: Semua arus lalu lintas antar aplikasi melalui lapisan proksi Envoy bawaan yang menangani penghentian TLS, pemisahan lalu lintas, dan penyeimbangan beban.
  • Isolasi cakupan lingkungan: Titik akhir internal hanya dapat dijangkau dari dalam lingkungan yang sama, menciptakan batas keamanan alami.
  • Fleksibilitas protokol: Komunikasi melalui HTTP/1.1, HTTP/2 (untuk gRPC), atau TCP mentah tergantung pada kebutuhan beban kerja Anda.

Kemampuan ini berarti Anda dapat fokus pada logika aplikasi Anda daripada pipa jaringan.

Lokasi aplikasi container (FQDN)

Setiap nama domain aplikasi kontainer yang sepenuhnya memenuhi syarat terdiri dari nama aplikasi, pengidentifikasi lingkungan unik, dan wilayah. Fragmen domain ini semuanya termasuk dalam azurecontainerapps.io domain tingkat atas.

aplikasi kontainer Azure Container Apps nama domain yang sepenuhnya memenuhi syarat.

FQDN eksternal dan internal

Pengaturan visibilitas ingress mengontrol apakah aplikasi Anda dapat dijangkau dari luar lingkungan:

Keterlihatan Pola FQDN Dapat dijangkau dari
Eksternal <APP_NAME>.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io Di mana saja (internet publik)
Internal <APP_NAME>.internal.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io Hanya lingkungan yang sama

Saat Anda mengatur ingress ke internal, FQDN akan menyertakan sebuah .internal. segmen. Aplikasi kontainer lain di lingkungan yang sama masih dapat menjangkau aplikasi menggunakan alamat ini, tetapi permintaan dari luar lingkungan menerima 404 respons dari proksi lingkungan. Nama DNS diselesaikan ke IP bersama lingkungan, tetapi proksi menolak permintaan karena aplikasi hanya internal.

Dapatkan nama domain yang sepenuhnya memenuhi syarat

Perintah az containerapp show mengembalikan nama domain sepenuhnya memenuhi syarat dari aplikasi kontainer.

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

Dalam contoh ini, ganti tempat penampung dengan <> dengan nilai milik Anda.

Nilai yang dikembalikan dari perintah ini menyerupai nama domain seperti contoh berikut:

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

FQDN label revisi

Saat Anda menetapkan label ke revisi tertentu, setiap label mendapatkan FQDN uniknya sendiri menggunakan pemisah tiga tanda hubung:

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

Untuk aplikasi internal, pola mencakup .internal. segmen :

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

FQDN label memungkinkan Anda mengirim lalu lintas ke revisi tertentu secara langsung. Praktik ini berguna untuk menguji versi baru, menjalankan eksperimen A/B, atau menyediakan titik akhir yang stabil untuk penyebaran revisi tertentu.

Memanggil aplikasi kontainer berdasarkan nama

Cara paling mudah untuk memanggil aplikasi kontainer lain dari dalam lingkungan yang sama adalah dengan namanya. Kirim permintaan ke http://<CONTAINER_APP_NAME>, dan DNS bawaan lingkungan menyelesaikan nama secara otomatis.

http://my-backend-api

Cara kerja resolusi DNS

Di balik layar, Azure Container Apps menggunakan konfigurasi DNS kustom yang menerjemahkan nama aplikasi kontainer ke dalam alamat yang dapat dirutekan. Saat aplikasi Anda membuat permintaan ke nama aplikasi lain atau FQDN:

  1. Server DNS lingkungan menerjemahkan nama host menjadi alamat layanan proksi Envoy.
  2. Proksi Envoy mengidentifikasi aplikasi target dari nama host asli.
  3. Proksi merutekan permintaan ke revisi yang benar berdasarkan konfigurasi lalu lintas Anda.

Arsitektur ini berarti aplikasi kontainer tidak pernah berkomunikasi langsung dengan pod satu sama lain. Semua lalu lintas melewati lapisan proksi, yang menyediakan penghentian TLS, penyeimbangan beban, dan pemisahan lalu lintas.

Petunjuk / Saran

Gunakan nama aplikasi pendek (http://<APP_NAME>) untuk panggilan antar aplikasi kontainer di lingkungan yang sama. Ini lebih sederhana daripada FQDN lengkap dan bekerja dengan cara yang sama karena DNS menyelesaikan kedua pola melalui proksi yang sama.

Protokol transportasi

Aplikasi kontainer mendukung tiga mode transportasi untuk masuk, dikonfigurasi transport melalui properti:

Transportasi Skenario penggunaan Rincian
Otomatis (default) API dan layanan web standar Menegosiasikan HTTP/1.1 dan HTTP/2 secara otomatis
HTTP/2 Layanan gRPC Mengaktifkan HTTP/2 end-to-end, diperlukan untuk gRPC
TCP Protokol non-HTTP (basis data, protokol khusus) Koneksi TCP mentah dengan pemetaan port

Catatan

TCP ingress eksternal memerlukan VNet kustom. Jika Anda mencoba membuat aplikasi TCP eksternal tanpa VNet kustom, Anda menerima ContainerAppTcpRequiresVnet kesalahan. Internal TCP ingress bekerja tanpa menggunakan VNet kustom.

Saat Anda menggunakan TCP transport, Anda juga dapat mengekspos port tambahan selain port ingress utama. Setiap port tambahan membuat titik akhir TCP terpisah yang dapat disambungkan oleh aplikasi lain di lingkungan.

Pemisahan lalu lintas dan pengarahan revisi

Azure Container Apps mendukung tiga mode revisi yang memengaruhi bagaimana lalu lintas didistribusikan antara aplikasi kontainer:

Modus Perilaku
Tunggal Semua trafik diarahkan ke revisi aktif terbaru.
Beberapa Pembagian lalu lintas di antara revisi dilakukan berdasarkan persentase, sesuai dengan aturan lalu lintas Anda.
Label Setiap revisi berlabel mendapatkan FQDN unik untuk akses langsung.

Dalam mode multiple, saat aplikasi kontainer lain memanggil FQDN aplikasi Anda, proksi secara otomatis mendistribusikan permintaan di seluruh revisi sesuai dengan bobot yang dikonfigurasi. Dalam mode label, penelepon dapat menargetkan revisi tertentu dengan menggunakan FQDN dari label tersebut.

Untuk informasi lebih lanjut, lihat Revisi di Azure Container Apps.

Pemanggilan layanan Dapr

Dapr (Distributed Application Runtime) menyediakan pendekatan berbasis sidecar untuk komunikasi antar aplikasi. Dengan mengaktifkan Dapr, aplikasi kontainer Anda mendapatkan pemanggilan layanan bawaan dengan TLS bersama, percobaan ulang otomatis, dan pelacakan terdistribusi melalui Azure Application Insights.

Diagram memperlihatkan lokasi aplikasi kontainer Azure Container Apps dengan Dapr.

Cara kerja pemanggilan Dapr

Setiap aplikasi kontainer yang diaktifkan Dapr menjalankan proses sidecar di samping aplikasi Anda. Untuk memanggil aplikasi lain yang diaktifkan Dapr, buat permintaan HTTP lokal ke sidecar Dapr, yang menangani penemuan dan perutean layanan:

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

Misalnya, untuk memanggil metode catalog pada aplikasi dengan Dapr App ID order-processor:

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

Sidecar menentukan aplikasi target menggunakan domain DNS khusus dan merutekan permintaan melalui lapisan proxy Envoy. Ini adalah infrastruktur yang sama yang menangani perutean berbasis FQDN.

Catatan

Dapr menggunakan jalur resolusi DNS sendiri ( .dapr domain) terpisah dari resolusi FQDN standar. Kedua jalur mengalami rute melintasi infrastruktur proksi dari lingkungan.

ID Aplikasi Dapr

ID Aplikasi Dapr adalah identitas yang digunakan aplikasi lain untuk memanggil layanan Anda. Jika Anda tidak mengatur ID Aplikasi secara eksplisit, Dapr runtime akan menggunakan secara default nama aplikasi kontainer Anda. ARM API menampilkan appId: null ketika Anda tidak mengonfigurasi ID kustom, tetapi runtime menerapkan nama aplikasi secara otomatis. Atur ID Aplikasi kustom di konfigurasi Dapr Anda jika Anda memerlukan pengidentifikasi yang berbeda.

ID Aplikasi Dapr harus unik dalam lingkungan. Jika Anda mencoba menyebarkan aplikasi kontainer dengan ID Aplikasi Dapr yang sudah digunakan oleh aplikasi lain, sumber daya aplikasi kontainer dibuat tetapi revisinya gagal disediakan (provisioningState: Failed). Pesan kesalahan mengidentifikasi ID Aplikasi yang bertentangan dan aplikasi yang memilikinya.

Aplikasi eksklusif Dapr (tanpa ingress HTTP)

Anda dapat mengaktifkan Dapr pada aplikasi kontainer tanpa mengonfigurasi ingress HTTP. Dalam hal ini, aplikasi tidak dapat dijangkau melalui FQDN atau nama aplikasi, tetapi aplikasi berkemampuan Dapr lainnya masih dapat memanggilnya melalui pemanggilan layanan Dapr. Pola ini berguna untuk pekerja latar belakang atau pemroses acara yang hanya perlu menerima panggilan dari layanan lain dalam mesh.

Petunjuk / Saran

Saat Anda membuat aplikasi tanpa masuk dengan Azure CLI, hilangkan bendera --ingress dan --target-port. Termasuk --target-port tanpa --ingress mengembalikan kesalahan penggunaan.

Konfigurasi sidecar Dapr

Anda mengonfigurasi sidecar Dapr melalui properti aplikasi kontainer Anda. Pengaturan kunci meliputi:

Setting Deskripsi
appId ID Aplikasi Dapr (secara default menjadi nama aplikasi kontainer)
appPort Port yang didengarkan aplikasi Anda (kembali ke port target ingress)
appProtocol Protokol untuk komunikasi Dapr-ke-aplikasi (misalnya, http, grpc)
logLevel Log verbositas sidecar Dapr
enableApiLogging Apakah akan mencatat panggilan DAPR API
httpMaxRequestSize Ukuran isi permintaan maksimum dalam MB untuk server HTTP Dapr
httpReadBufferSize Ukuran maksimum buffer baca HTTP dalam KB

Untuk informasi selengkapnya tentang mengonfigurasi Dapr dengan Azure Container Apps, lihat integrasi Dapr dengan Azure Container Apps.

Keamanan untuk komunikasi antar aplikasi

Azure Container Apps menyertakan beberapa fitur keamanan yang memengaruhi cara aplikasi kontainer berkomunikasi:

  • TLS secara default: Semua lalu lintas antar aplikasi container dialihkan melalui proksi Envoy, yang menangani penghentian TLS. Atur allowInsecure ke false (default) untuk menerapkan pengalihan HTTPS.
  • Mode sertifikat klien (mTLS): Mengonfigurasi TLS bersama dengan mengatur mode sertifikat klien ke require, accept, atau ignore.
  • Pembatasan IP: Tentukan aturan izinkan atau tolak untuk membatasi alamat IP mana yang dapat menjangkau aplikasi Anda.
  • Kebijakan CORS: Mengonfigurasi aturan berbagi sumber daya lintas asal untuk klien berbasis browser yang memanggil aplikasi kontainer Anda.

Catatan

Saat Anda menggunakan pemanggilan layanan Dapr, sidecar Dapr secara otomatis mengamankan komunikasi dengan TLS bersama antar layanan. Anda tidak perlu mengonfigurasi mTLS secara terpisah untuk panggilan Dapr-to-Dapr.

Untuk informasi selengkapnya, lihat Ingress di Azure Container Apps.

Domain khusus

Anda dapat memetakan nama domain Anda sendiri ke aplikasi kontainer dengan mengonfigurasi domain kustom pada pengaturan ingress. Setiap domain kustom dapat mereferensikan sertifikat TLS terkelola atau yang diunggah.

Domain kustom didaftarkan bersama FQDN default, sehingga aplikasi Anda merespons kedua alamat. Saat aplikasi kontainer lain di lingkungan perlu menjangkau aplikasi Anda, aplikasi tersebut dapat menggunakan FQDN default, nama aplikasi, atau domain kustom Anda.

Untuk informasi selengkapnya, lihat Domain kustom di Azure Container Apps.

Solusi contoh

Sampel yang menunjukkan cara memanggil antara kontainer menggunakan FQDN dan Dapr tersedia pada Sampel Azure.

Memahami komunikasi antar-aplikasi di Azure Container Apps terhubung ke beberapa topik terkait:

Langkah selanjutnya