Bagikan melalui


Menyebarkan gateway yang dihost sendiri Azure API Management ke Azure Container Apps

BERLAKU UNTUK: Pengembang | Premium

Artikel ini menyediakan langkah-langkah untuk menyebarkan komponen gateway yang dihost sendiri dari Azure API Management ke Azure Container Apps.

Sebarkan gateway yang dihost sendiri ke aplikasi kontainer untuk mengakses API yang dihosting di lingkungan Azure Container Apps yang sama.

Prasyarat

  • Selesaikan panduan memulai cepat berikut: Membuat instans Azure API Management.

  • Untuk Azure CLI:

    Nota

    Contoh perintah Azure CLI dalam artikel ini memerlukan containerapp ekstensi Azure CLI. Jika Anda belum menggunakan az containerapp perintah, ekstensi diinstal secara dinamis saat Anda menjalankan perintah pertama az containerapp Anda. Pelajari selengkapnya tentang ekstensi Azure CLI.

Memprovisikan gateway di instans Azure API Management Anda

Sebelum menyebarkan gateway yang dihost sendiri, provisikan sumber daya gateway di instans Azure API Management Anda. Untuk langkah-langkahnya, lihat Menyediakan gateway yang dihost sendiri. Dalam contoh artikel ini, gateway diberi nama my-gateway.

Mendapatkan pengaturan penyebaran gateway dari API Management

Untuk menyebarkan gateway, Anda memerlukan nilai titik akhirToken dan Konfigurasi gateway. Anda dapat menemukannya di portal Microsoft Azure:

  1. Masuk ke portal Microsoft Azure, dan buka instans Azure API Management Anda.
  2. Di menu sebelah kiri, di bawah Penyebaran + infrastruktur, pilih Gateway yang dihost sendiri.
  3. Pilih sumber daya gateway yang Anda provisikan, dan pilihPenyebaran>.
  4. Salin nilai titik akhirToken dan Konfigurasi.

Menyebarkan gateway yang dihost sendiri ke aplikasi kontainer

Anda dapat menyebarkan gambar kontainer gateway yang dihost sendiri ke aplikasi kontainer menggunakan portal Microsoft Azure, Azure CLI, atau alat lainnya. Artikel ini memperlihatkan langkah-langkah menggunakan Azure CLI.

Membuat lingkungan aplikasi kontainer

Pertama, buat lingkungan aplikasi kontainer menggunakan perintah az containerapp env create :

#!/bin/bash
az containerapp env create --name my-environment --resource-group myResourceGroup \
    --location centralus

Perintah ini membuat:

  • Lingkungan aplikasi kontainer bernama my-environment yang Anda gunakan untuk mengelompokkan aplikasi kontainer.
  • Ruang kerja analitik log

Membuat aplikasi kontainer untuk gateway yang dihost sendiri

Untuk menyebarkan gateway yang dihost sendiri ke aplikasi kontainer di lingkungan, jalankan perintah az containerapp create .

Tetapkan variabel untuk nilai Token dan titik akhir Konfigurasi dari sumber daya gateway Azure API Management.

#!/bin/bash
endpoint="<API Management configuration endpoint>"
token="<API Management gateway token>"

Buat aplikasi kontainer menggunakan az containerapp create perintah :

#!/bin/bash
az containerapp create --name my-gateway \
    --resource-group myResourceGroup --environment 'my-environment' \
    --image "mcr.microsoft.com/azure-api-management/gateway:2.9.2" \
    --target-port 8080 --ingress external \
    --min-replicas 1 --max-replicas 3 \
    --env-vars "config.service.endpoint"="$endpoint" "config.service.auth"="$token" "net.server.http.forwarded.proto.enabled"="true"

Perintah ini membuat:

  • Aplikasi kontainer bernama my-gateway dalam myResourceGroup grup sumber daya. Dalam contoh ini, aplikasi kontainer menggunakan citra mcr.microsoft.com/azure-api-management/gateway:2.9.2. Untuk informasi selengkapnya tentang gateway yang dihost sendiri, lihat gambar kontainer.

  • Dukungan untuk ingress eksternal ke aplikasi kontainer pada port 8080.

  • Minimal 1 dan maksimum 3 replika aplikasi kontainer.

  • Koneksi dari gateway yang dihost sendiri ke instans Azure API Management dengan meneruskan nilai konfigurasi dalam variabel lingkungan. Untuk detailnya, lihat pengaturan konfigurasi kontainer pada gateway yang dihosting sendiri.

    Nota

    ingress Azure Container Apps meneruskan permintaan HTTPS ke aplikasi kontainer gateway yang dihosting sendiri sebagai HTTP. Di sini, net.server.http.forwarded.proto.enabled variabel lingkungan diatur ke true sehingga gateway yang dihost sendiri menggunakan X-Forwarded-Proto header untuk menentukan protokol asli permintaan.

Konfirmasikan bahwa aplikasi kontainer sedang berjalan

  1. Masuk ke portal Microsoft Azure, dan buka aplikasi kontainer Anda.

  2. Pada halaman Gambaran Umum aplikasi kontainer, periksa apakah StatusSedang Berjalan.

  3. Kirim permintaan pengujian ke titik akhir status di /status-012345678990abcdef. Misalnya, gunakan curl yang mirip dengan perintah berikut.

    curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdef
    

    Jika permintaan berhasil, akan mengembalikan respons 200 OK.

Petunjuk / Saran

Dengan menggunakan CLI, Anda juga dapat menjalankan perintah az containerapp show untuk memeriksa status aplikasi kontainer.

Pastikan bahwa kondisi gateway baik

  1. Masuk ke portal Microsoft Azure dan buka instans Azure API Management Anda.

  2. Di menu sebelah kiri, di bawah Penyebaran + infrastruktur, pilih Gateway yang dihost sendiri.

  3. Pada halaman Gambaran Umum , periksa Status gateway Anda. Jika gateway berfungsi dengan baik, ia melaporkan detak jantung reguler.

    Cuplikan layar status gateway di portal.

Contoh skenario

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan gateway yang dihost sendiri untuk mengakses API yang dihosting di aplikasi kontainer di lingkungan yang sama. Seperti yang ditunjukkan dalam diagram berikut, gateway yang dihost sendiri dapat diakses dari internet, sementara API hanya dapat diakses dalam lingkungan aplikasi kontainer.

Diagram contoh skenario dengan gateway yang dihost sendiri.

  1. Sebarkan aplikasi kontainer yang menghosting API di lingkungan yang sama dengan gateway yang dihost sendiri.
  2. Tambahkan API ke instans Azure API Management Anda.
  3. Panggil API melalui gateway yang dihost sendiri.

Menyebarkan aplikasi kontainer yang menghosting API di lingkungan yang sama dengan gateway yang dihost sendiri

Dalam contoh ini, Anda menyebarkan contoh API album musik ke aplikasi kontainer. Untuk mengakses API nanti dengan menggunakan gateway yang dihost sendiri, sebarkan API di lingkungan yang sama dengan gateway yang dihost sendiri. Untuk langkah-langkah dan informasi terperinci tentang sumber daya yang digunakan dalam contoh ini, lihat Mulai Cepat: Membangun dan menyebarkan dari kode sumber lokal ke Azure Container Apps. Langkah-langkah yang disingkat mengikuti:

  1. Unduh kode sumber Python ke komputer lokal Anda. Jika mau, unduh kode sumber dalam bahasa lain pilihan Anda.

  2. Ekstrak kode sumber ke folder lokal dan ubah ke folder containerapps-albumapi-python-main/src .

  3. Jalankan perintah az containerapp up berikut untuk menyebarkan API ke aplikasi kontainer di lingkungan yang sama dengan gateway yang dihost sendiri. . Perhatikan di akhir perintah, yang menentukan folder saat ini sebagai sumber untuk aplikasi kontainer.

    #!/bin/bash
    az containerapp up --name albums-api \
        --resource-group myResourceGroup --location centralus \
        --environment my-environment --source .
    
  4. Konfirmasikan bahwa aplikasi kontainer berjalan dan dapat diakses secara eksternal di FQDN yang dikembalikan dalam output perintah. Secara default API dapat diakses di /albums titik akhir. Contoh: https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums.

Mengonfigurasi API untuk ingress internal

Sekarang perbarui aplikasi kontainer yang menghosting API sampel untuk mengaktifkan masuk hanya di lingkungan kontainer. Pengaturan ini membatasi akses ke API hanya dari gateway yang dihost sendiri yang Anda sebarkan.

  1. Masuk ke portal Microsoft Azure, dan buka aplikasi kontainer Anda.
  2. Di menu sebelah kiri, pilih Networking>Ingress.
  3. Atur Ingress ke Diaktifkan.
  4. Di Lalu lintas masuk, pilih Terbatas pada Lingkungan Aplikasi Kontainer.
  5. Tinjau pengaturan yang tersisa dan pilih Simpan.

Menambahkan API ke instans Azure API Management Anda

Langkah-langkah berikut menunjukkan cara menambahkan API ke instans Azure API Management Anda dan mengonfigurasi backend API. Untuk informasi selengkapnya, lihat Menambahkan API ke Azure API Management.

Menambahkan API ke instans API Management Anda

  1. Di portal Microsoft Azure, buka instans API Management tempat Anda mengonfigurasi gateway yang dihost sendiri.
  2. Di menu sebelah kiri, pilih API API>>+ Tambahkan API.
  3. Pilih HTTP dan pilih Penuh. Masukkan pengaturan berikut:
    1. Nama tampilan: Masukkan nama deskriptif. Contoh: API Album.
    2. URL layanan web: Masukkan FQDN internal aplikasi kontainer yang menghosting API. Contoh: http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io.
    3. Skema URL: Pilih HTTP(S).
    4. Akhiran URL API: Masukkan akhiran pilihan Anda. Contoh: albumapi.
    5. Gateway: Pilih gateway yang dihost sendiri yang Anda provisikan. Contoh: my-gateway.
  4. Konfigurasikan pengaturan API lainnya sesuai dengan skenario Anda. Pilih Buat.

Menambahkan operasi API

  1. Di menu sebelah kiri, pilih API>Album API API.
  2. Pilih + Tambahkan operasi.
  3. Masukkan pengaturan operasi:
    1. Nama tampilan: Masukkan nama deskriptif untuk operasi. Contoh: Dapatkan album.
    2. URL: Pilih Dapatkan dan masukkan /albums untuk titik akhir.
    3. Pilih Simpan.

Memanggil API melalui gateway yang dihost sendiri

Gunakan FQDN dari gateway yang dihosting sendiri yang berjalan di aplikasi kontainer untuk memanggil API. Temukan FQDN di halaman Gambaran Umum aplikasi kontainer di portal Microsoft Azure, atau jalankan perintah berikut az containerapp show .

#!/bin/bash
az containerapp show --name my-gateway --resource-group myResourceGroup \
    --query "properties.configuration.ingress.fqdn" --output tsv

Misalnya, jalankan perintah berikut curl untuk memanggil API di /albumapi/albums titik akhir. Jika API Anda memerlukan kunci langganan, berikan kunci langganan yang valid untuk instans API Management Anda sebagai header dalam permintaan:

curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/albumapi/albums -H "Ocp-Apim-Subscription-Key: <subscription-key>"

Ketika pengujian berhasil, backend merespons dengan kode respons HTTP yang berhasil dan beberapa data.

HTTP/1.1 200 OK
content-length: 751
content-type: application/json
date: Wed, 28 Feb 2024 22:45:09 GMT
[...]

[{"id":1,"title":"You, Me and an App Id","artist":"Daprize","price":10.99,"image_url":"https://aka.ms/albums-daprlogo"},{"id":2,"title":"Seven Revision Army","artist":"The Blue-Green Stripes","price":13.99,"image_url":"https://aka.ms/albums-containerappslogo"},{"id":3,"title":"Scale It Up","artist":"KEDA Club","price":13.99,"image_url":"https://aka.ms/albums-kedalogo"},{"id":4,"title":"Lost in Translation","artist":"MegaDNS","price":12.99,"image_url":"https://aka.ms/albums-envoylogo"},{"id":5,"title":"Lock Down Your Love","artist":"V is for VNET","price":12.99,"image_url":"https://aka.ms/albums-vnetlogo"},{"id":6,"title":"Sweet Container O' Mine","artist":"Guns N Probeses","price":14.99,"image_url":"https://aka.ms/albums-containerappslogo"}]

Petunjuk / Saran

Jika Anda mengaktifkan pengelogan untuk API Anda ke Application insights, Anda dapat mengkueri log untuk melihat permintaan dan respons.

Keterbatasan

Instans gateway yang dihost sendiri mengandalkan protokol UDP untuk komunikasi heartbeat dan batas kecepatan. Karena Azure Container Apps saat ini tidak mendukung protokol UDP, baik untuk ingress maupun untuk lalu lintas internal, kebijakan rate-limit tidak dapat mensinkronisasi penghitungnya di seluruh setiap instans. Akibatnya, mempertahankan tiga replika aplikasi kontainer gateway yang dihost sendiri dengan batas X dapat mengakibatkan tiga kali lalu lintas hingga batas X tercapai.

Azure Container Apps mendistribusikan permintaan secara linier di setiap replika yang tersedia dan sehat. Untuk menerapkan pembatasan tarif, Anda dapat membagi batas yang diinginkan dengan jumlah replika yang ingin Anda jalankan dan mengatur nilai yang dihasilkan dalam konfigurasi. Pendekatan ini memiliki kelemahan tersendiri karena Anda mungkin tidak dapat memperhitungkan penghitung yang telah disesuaikan apabila dan ketika aplikasi kontainer Anda diskalakan.