Ingress pada Azure Container Apps

Azure Container Apps memungkinkan Anda mengekspos aplikasi kontainer ke web publik, jaringan virtual (VNET), dan aplikasi kontainer lainnya dalam lingkungan Anda dengan mengaktifkan ingress. Pengaturan Ingress diberlakukan melalui sekumpulan aturan yang mengontrol pengarahan lalu lintas eksternal dan internal ke aplikasi kontainer Anda. Saat mengaktifkan ingress, Anda tidak perlu membuat Azure Load Balancer, alamat IP publik, atau sumber daya Azure lainnya untuk mengaktifkan permintaan HTTP masuk atau lalu lintas TCP (Protokol Kontrol Transmisi).

Ingress mendukung:

Contoh konfigurasi ingress yang menunjukkan pemisahan ingress antara dua revisi.

Diagram memperlihatkan konfigurasi ingress yang memisahkan lalu lintas antara dua revisi.

Untuk detail konfigurasi, lihat Mengonfigurasi ingress.

ingress eksternal dan internal

Saat mengaktifkan ingress, Anda dapat memilih antara dua jenis ingress:

  • Eksternal: Mengekspos aplikasi melalui alamat IP masuk lingkungan Container Apps. Jika lingkungan menggunakan IP masuk publik, aplikasi dapat menerima lalu lintas dari internet publik, dan juga dapat dijangkau dari aplikasi kontainer lain di lingkungan yang sama.

  • Internal: Membuat nama domain lengkap (FQDN) aplikasi hanya dapat diakses dari lingkungan Container Apps yang sama, seperti dari aplikasi kontainer lainnya. FQDN aplikasi ini tidak dapat diakses langsung dari internet publik. Namun, aplikasi masih dapat menerima lalu lintas eksternal jika dirujuk sebagai target dalam konfigurasi rute HTTP tingkat lingkungan. Untuk sepenuhnya mengisolasi aplikasi dari lalu lintas eksternal, pastikan aplikasi tersebut tidak dimasukkan sebagai target dalam konfigurasi rute HTTP manapun, atau tempatkan di lingkungan terpisah. Untuk informasi lebih lanjut, lihat Gunakan routing berbasis aturan dengan Azure Container Apps.

Setiap aplikasi kontainer dalam lingkungan dapat dikonfigurasi dengan pengaturan ingress yang berbeda. Misalnya, dalam skenario dengan beberapa aplikasi layanan mikro, untuk meningkatkan keamanan, Anda mungkin memiliki satu aplikasi kontainer yang menerima permintaan publik dan meneruskan permintaan ke layanan latar belakang. Dalam skenario ini, Anda akan mengonfigurasi aplikasi kontainer yang menghadap publik menggunakan ingress eksternal, sementara aplikasi kontainer yang menghadap internal dengan ingress internal.

Bagaimana visibilitas ingress berinteraksi dengan tipe lingkungan

Dua pengaturan terpisah menentukan siapa yang dapat mengakses aplikasi kontainer Anda:

  • Tingkat aksesibilitas lingkungan: Atur saat Anda membuat lingkungan. Lingkungan internal (dibuat dengan --internal-only) sama sekali tidak memiliki titik akhir publik. Fitur ini hanya dapat diakses melalui load balancer internal di jaringan virtual Anda. Untuk informasi lebih lanjut, lihat Tingkat Aksesibilitas.

  • Visibilitas masuk aplikasi: Properti per-aplikasi external , diatur dengan --type external atau --type internal, dan ditampilkan di portal sebagai lalu lintas Ingress.

Tingkat aksesibilitas lingkungan menentukan batas jaringan luar. Visibilitas masuk aplikasi menentukan apakah aplikasi dipublikasikan di batas tersebut, atau disimpan di dalam lingkungan.

Tingkat aksesibilitas lingkungan Akses aplikasi eksternal
(Menerima lalu lintas dari mana saja)
Masuk aplikasi internal
(Terbatas pada Lingkungan Aplikasi Kontainer)
Eksternal Dapat diakses dari internet publik, dan dari aplikasi lain di lingkungan. Hanya dapat diakses dari aplikasi lain dalam lingkungan yang sama.
Internal Dapat dijangkau dari jaringan virtual melalui penyeimbang beban internal, dan dari aplikasi lain di lingkungan tersebut. Tidak dapat diakses dari internet publik. Hanya dapat diakses dari aplikasi lain dalam lingkungan yang sama. Klien di bagian lain dalam jaringan virtual menerima respons HTTP 404.

Important

Pengaturan masuk aplikasi menggambarkan hubungan aplikasi dengan lingkungannya, bukan dengan internet. Di lingkungan internal, menerima lalu lintas dari mana saja tidak mempublikasikan aplikasi Anda ke internet, karena lingkungan tersebut tidak memiliki titik akhir publik. Sebagai gantinya, aplikasi dipublikasikan melalui penyeimbang beban internal lingkungan agar klien di jaringan virtual Anda dapat mengaksesnya.

Memilih Terbatas Lingkungan Aplikasi Kontainer di lingkungan internal lebih membatasi dari yang Anda kira. Aplikasi ini menyembunyikan aplikasi dari jaringan virtual Anda serta dari internet.

Nota

Aplikasi dengan internal ingress masih dapat menerima lalu lintas dari luar lingkungan jika dirujuk sebagai target dalam konfigurasi rute HTTP tingkat lingkungan. Untuk informasi lebih lanjut, lihat Gunakan routing berbasis aturan dengan Azure Container Apps.

Batasi aplikasi hanya untuk akses jaringan virtual

Persyaratan umum adalah aplikasi yang tidak dapat dijangkau oleh internet publik, tetapi dapat dijangkau oleh mesin virtual, titik akhir privat, jaringan peered, dan jaringan on-premises yang terhubung melalui VPN atau Azure ExpressRoute. Konfigurasi ini mengharuskan Anda mengatur baik tingkat aksesibilitas lingkungan maupun visibilitas masuk aplikasi.

  1. Atur lingkungan sebagai internal, sehingga lingkungan tidak memiliki endpoint publik. Isolasi internet berasal dari pengaturan ini, dan Anda tidak bisa mengubahnya setelah menciptakan lingkungan. Untuk informasi lebih lanjut, lihat Gunakan jaringan virtual dengan Azure Container Apps.

    az containerapp env create \
        --name <ENVIRONMENT_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --infrastructure-subnet-resource-id <SUBNET_RESOURCE_ID> \
        --internal-only true
    
  2. Atur ingres aplikasi menjadi eksternal, sehingga aplikasi dipublikasikan pada load balancer internal lingkungan dan klien di jaringan virtual dapat menjangkaunya.

    az containerapp ingress enable \
        --name <APP_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --target-port <PORT_NUMBER> \
        --type external
    

Gunakan internal app ingress hanya untuk aplikasi yang dipanggil oleh aplikasi kontainer lain dalam lingkungan yang sama, seperti layanan backend dalam aplikasi microservices.

Jenis protokol

Container Apps mendukung dua protokol untuk masuk: HTTP dan TCP.

HTTP

Dengan ingress HTTP diaktifkan, aplikasi kontainer Anda memiliki:

  • Dukungan untuk penghentian TLS (Keamanan Lapisan Transportasi)
  • Dukungan untuk HTTP/1.1 dan HTTP/2
  • Dukungan untuk WebSocket dan gRPC
  • Titik akhir HTTPS yang selalu menggunakan TLS 1.2 atau 1.3, dihentikan pada titik masuk
  • Titik akhir yang mengekspos port 80 (untuk HTTP) dan 443 (untuk HTTPS)
    • Secara default, permintaan HTTP ke port 80 secara otomatis dialihkan ke HTTPS pada 443
  • Nama domain yang sepenuhnya memenuhi syarat (FQDN)
  • Waktu permintaan habis adalah 240 detik

Penanda HTTP

Ingress HTTP menambahkan header untuk meneruskan metadata tentang permintaan klien ke aplikasi kontainer Anda. Misalnya, X-Forwarded-Proto header digunakan untuk mengidentifikasi protokol yang digunakan klien untuk terhubung dengan layanan Container Apps. Tabel berikut mencantumkan header HTTP yang relevan dengan ingress di Container Apps:

Kepala Halaman Deskripsi Nilai
X-Forwarded-Proto Protokol yang digunakan oleh klien untuk terhubung dengan layanan Container Apps. http atau https. Nilai ini ditimpa jika dikirim oleh klien.
X-Forwarded-For Alamat IP klien dan/atau proksi perantara yang mengirim permintaan. Alamat IP pengirim. Jika ditentukan dalam permintaan awal, ditambahkan pada permintaan. Hanya IP paling kanan yang disediakan oleh Azure Container Apps. Nilai lain harus divalidasi oleh pengguna untuk mencegah spoofing IP.
X-Forwarded-Client-Cert Sertifikat klien jika clientCertificateMode ditetapkan. Daftar Hash, Cert, dan Chain yang dipisahkan titik koma. Misalnya: Hash=....;Cert="...";Chain="...";. Nilai ini ditimpa jika dikirim oleh klien.

PKT

Container Apps mendukung protokol berbasis TCP selain HTTP atau HTTPS. Misalnya, Anda dapat menggunakan ingress TCP untuk mengekspos aplikasi kontainer yang menggunakan protokol Redis.

Nota

Ingress TCP eksternal hanya didukung untuk lingkungan Container Apps yang menggunakan jaringan virtual.

Dengan TCP ingress diaktifkan, aplikasi kontainer Anda:

  • Dapat diakses oleh aplikasi kontainer lain di lingkungan yang sama melalui namanya (ditentukan oleh name properti di sumber daya Container Apps) dan nomor port yang diekspos.
  • Dapat diakses dari luar melalui nama domain lengkap (FQDN) dan nomor port yang terbuka jika ingress diatur ke external.

Port TCP tambahan

Selain port HTTP/TCP utama untuk aplikasi kontainer, Anda mungkin mengekspos port TCP tambahan untuk mengaktifkan aplikasi yang menerima koneksi TCP pada beberapa port.

Nota

Untuk menggunakan fitur ini, Anda harus memiliki ekstensi CLI aplikasi kontainer. Jalankan az extension add -n containerapp untuk menginstal versi terbaru ekstensi CLI aplikasi kontainer.

Berikut ini berlaku untuk port TCP tambahan:

  • Lebih banyak port TCP hanya dapat berada di luar jika aplikasi itu sendiri diatur sebagai eksternal dan aplikasi kontainer menggunakan jaringan virtual.

  • Setiap port TCP tambahan yang diekspos secara eksternal harus unik di seluruh lingkungan Container Apps. Ini termasuk semua port TCP tambahan eksternal, port TCP utama eksternal, dan port 80/443 yang digunakan oleh ingress HTTP bawaan. Jika port tambahan bersifat internal, Anda dapat berbagi port yang sama di beberapa aplikasi.

  • Jika port yang diekspos tidak disediakan, maka secara default port tersebut akan cocok dengan port target.

  • Setiap port target harus unik, dan port target yang sama tidak dapat diekspos pada port yang diekspos yang berbeda.

  • Ada maksimal lima port tambahan per aplikasi. Jika port tambahan diperlukan, buka permintaan dukungan.

  • Hanya port ingress utama yang mendukung fitur HTTP bawaan seperti CORS dan afinitas sesi. Saat menjalankan HTTP di atas port TCP tambahan, fitur bawaan ini tidak didukung.

  • Nomor port 36985 dicadangkan untuk pemeriksaan kesehatan internal dan tidak tersedia untuk aplikasi TCP atau port ekstra yang terekspos pada aplikasi HTTP.

Untuk informasi selengkapnya tentang cara mengaktifkan port tambahan, lihat Mengonfigurasi ingress untuk aplikasi Anda.

Nama domain

Anda dapat mengakses aplikasi dengan cara berikut:

  • Nama domain default yang sepenuhnya memenuhi syarat (FQDN): Setiap aplikasi di lingkungan Container Apps secara otomatis diberi FQDN berdasarkan akhiran DNS (Sistem Nama Domain) lingkungan. Akhiran ini ditentukan oleh CONTAINER_APP_ENV_DNS_SUFFIX variabel lingkungan. Untuk mengkustomisasi akhiran DNS lingkungan, lihat Akhiran DNS lingkungan kustom.

  • Nama domain kustom: Anda dapat mengonfigurasi domain DNS kustom untuk lingkungan Container Apps Anda. Untuk informasi selengkapnya, lihat Nama domain kustom dan sertifikat.

  • Nama aplikasi: Anda dapat menggunakan nama aplikasi untuk komunikasi antar aplikasi di lingkungan yang sama.

Untuk mendapatkan FQDN untuk aplikasi Anda, lihat Lokasi aplikasi kontainer (FQDN).

Batasan IP

Container Apps mendukung pembatasan IP untuk ingress. Anda dapat membuat aturan untuk mengonfigurasi alamat IP yang diizinkan atau ditolak akses ke aplikasi kontainer Anda. Untuk informasi selengkapnya, lihat Mengonfigurasi pembatasan IP.

Otentikasi

Azure Container Apps menyediakan fitur autentikasi dan otorisasi bawaan untuk mengamankan aplikasi kontainer eksternal yang mendukung ingress Anda. Untuk informasi selengkapnya, lihat Authentication dan otorisasi di Azure Container Apps.

Anda dapat mengonfigurasi aplikasi untuk mendukung sertifikat klien (mTLS) untuk autentikasi dan enkripsi lalu lintas. Untuk informasi selengkapnya, lihat Mengonfigurasi sertifikat klien.

Untuk detail tentang cara menggunakan enkripsi jaringan tingkat lingkungan peer-to-peer, lihat konfigurasi jaringan.

Pemisahan lalu lintas

Containers Apps memungkinkan Anda membagi lalu lintas masuk antara revisi aktif. Saat Anda menentukan aturan pemisahan, Anda menetapkan persentase lalu lintas masuk untuk masuk ke revisi yang berbeda. Untuk informasi selengkapnya, lihat Pemisahan lalu lintas.

Afinitas sesi

Penyelarasan sesi, yang juga dikenal sebagai sesi tetap, adalah fitur yang dapat memungkinkan Anda untuk merutekan semua permintaan HTTP dari pengguna ke replika aplikasi kontainer yang sama. Fitur ini berguna untuk aplikasi stateful yang memerlukan koneksi yang konsisten ke replika yang sama. Untuk informasi selengkapnya, lihat Afinitas Sesi.

Berbagi Sumber Daya Lintas Asal (CORS)

Secara default, setiap permintaan yang dibuat melalui browser dari halaman ke domain yang tidak cocok dengan domain asal halaman diblokir. Untuk menghindari pembatasan ini untuk layanan yang disebarkan ke Container Apps, Anda dapat mengaktifkan berbagi sumber daya lintas asal (CORS).

Untuk informasi selengkapnya, lihat Konfigurasi CORS di Azure Container Apps.

Langkah selanjutnya