Mengonfigurasi modul proksi API untuk skenario hierarki gateway Anda
Berlaku untuk: IoT Edge 1.5
Penting
IoT Edge 1.5 LTS adalah rilis yang didukung. IoT Edge 1.4 LTS adalah akhir masa pakai per 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Memperbarui IoT Edge.
Artikel ini menelusuri opsi konfigurasi untuk modul proksi API, sehingga Anda dapat menyesuaikan modul tersebut agar dapat mendukung persyaratan hierarki gateway Anda.
Modul proksi API menyederhanakan komunikasi untuk perangkat IoT Edge ketika beberapa layanan disebarkan yang semuanya mendukung protokol HTTPS dan mengikat ke port 443. Ini sangat relevan dalam penyebaran hierarkis perangkat IoT Edge dalam arsitektur terisolasi jaringan berbasis ISA-95 seperti yang dijelaskan dalam Jaringan mengisolasi perangkat hilir karena klien pada perangkat hilir tidak dapat terhubung langsung ke cloud.
Misalnya, untuk memungkinkan perangkat IoT Edge hilir menarik gambar Docker memerlukan penyebaran modul registri Docker. Untuk memungkinkan pengunggahan blob, diperlukan penyebaran modul Azure Blob Storage pada perangkat IoT Edge yang sama. Kedua layanan ini menggunakan HTTPS untuk komunikasi. Proksi API mengaktifkan penyebaran tersebut pada perangkat IoT Edge. Alih-alih setiap layanan, modul proksi API mengikat port 443 pada perangkat host dan merutekan permintaan ke modul layanan yang tepat yang berjalan pada perangkat tersebut pada setiap aturan yang dapat dikonfigurasi oleh pengguna. Layanan individu masih bertanggung jawab untuk menangani permintaan, termasuk mengautentikasi dan memberi otorisasi kepada klien.
Tanpa proksi API, setiap modul layanan harus mengikat ke port terpisah pada perangkat host, yang membutuhkan perubahan konfigurasi yang rumit dan rawan terjadi kesalahan pada setiap perangkat anak yang tersambung ke perangkat IoT Edge induk.
Catatan
Perangkat hilir memancarkan data langsung ke Internet atau ke perangkat gateway (diaktifkan IoT Edge atau tidak). Perangkat anak dapat menjadi perangkat hilir atau perangkat gateway dalam topologi berlapis.
Menyebarkan modul proksi
Modul proksi API tersedia dari Microsoft Container Registry (MCR) dan URI gambar adalah mcr.microsoft.com/azureiotedge-api-proxy:latest
. Anda dapat menyebarkan modul menggunakan portal Azure atau Azure CLI.
Memahami modul proksi
Modul proksi API memanfaatkan proksi terbalik nginx untuk merutekan data melalui lapisan jaringan. Proksi tertanam dalam modul, yang berarti bahwa gambar modul perlu mendukung konfigurasi proksi. Sebagai contoh, jika proksi mendengarkan port tertentu, maka modul harus membuka port tersebut.
Proksi dimulai dengan file konfigurasi default yang disematkan dalam modul. Anda dapat meneruskan konfigurasi baru ke modul dari cloud menggunakan modul kembar. Selain itu, Anda dapat menggunakan variabel lingkungan untuk mengaktifkan atau menonaktifkan pengaturan konfigurasi pada waktu penyebaran.
Artikel ini berfokus terlebih dahulu pada file konfigurasi default, dan cara menggunakan variabel lingkungan untuk mengaktifkan pengaturannya. Kemudian, kami membahas tentang mengkustomisasi file konfigurasi di akhir.
Konfigurasi default
Modul proksi API dilengkapi dengan konfigurasi default yang mendukung skenario umum dan memungkinkan penyesuaian. Anda dapat mengontrol konfigurasi default melalui variabel lingkungan modul.
Saat ini, variabel lingkungan default meliputi:
Variabel lingkungan | Deskripsi |
---|---|
PROXY_CONFIG_ENV_VAR_LIST |
Mencantumkan semua variabel yang ingin Anda perbarui dalam daftar yang dipisahkan dengan koma. Langkah ini mencegah perubahan pengaturan konfigurasi yang salah secara tidak disengaja. |
NGINX_DEFAULT_TLS |
Menentukan daftar protokol TLS yang akan diaktifkan. Lihat ssl_protocols NGINX. Defaultnya adalah 'TLSv1.2'. |
NGINX_DEFAULT_PORT |
Mengubah port yang didengarkan oleh proksi nginx. Jika Anda memperbarui variabel lingkungan ini, Anda harus mengekspos port di dockerfile modul dan mendeklarasikan pengikatan port dalam manifes penyebaran. Untuk informasi selengkapnya, lihat Mengekspos port proksi. Default-nya adalah 443. Saat disebarkan dari Marketplace Azure, port default diperbarui ke 8000 untuk mencegah konflik dengan modul edgeHub. Untuk informasi selengkapnya, lihat Mengecilkan port terbuka. |
DOCKER_REQUEST_ROUTE_ADDRESS |
Alamat untuk merutekan permintaan penambat. Ubah variabel ini pada perangkat lapisan atas untuk menunjuk ke modul registri. Default-nya adalah nama host induk. |
BLOB_UPLOAD_ROUTE_ADDRESS |
Alamat untuk merutekan permintaan registri blob. Ubah variabel ini pada perangkat lapisan atas untuk menunjuk ke modul penyimpanan blob. Default-nya adalah nama host induk. |
Mengecilkan port terbuka
Untuk mengecilkan jumlah port terbuka, modul proksi API harus me-relay semua lalu lintas HTTPS (port 443), termasuk lalu lintas yang menargetkan modul edgeHub. Modul proksi API dikonfigurasikan secara default untuk merutekan ulang semua lalu lintas edgeHub pada port 443.
Menggunakan langkah-langkah berikut untuk mengonfigurasikan penyebaran Anda untuk mengecilkan port yang terbuka:
Perbarui pengaturan modul edgeHub untuk tidak mengikat pada port 443, jika tidak, akan ada konflik pengikatan port. Secara default, modul edgeHub mengikat port 443, 5671, dan 8883. Menghapus pengikatan port 443 dan biarkan dua lainnya di tempat:
{ "HostConfig": { "PortBindings": { "5671/tcp": [ { "HostPort": "5671" } ], "8883/tcp": [ { "HostPort": "8883" } ] } } }
Konfigurasikan modul proksi API untuk mengikat port 443.
Set nilai NGINX_DEFAULT_PORT variabel lingkungan menjadi
443
.Perbarui opsi pembuatan kontainer untuk mengikat pada port 443.
{ "HostConfig": { "PortBindings": { "443/tcp": [ { "HostPort": "443" } ] } } }
Jika Anda tidak perlu mengecilkan port terbuka, maka Anda dapat membiarkan modul edgeHub menggunakan port 443 dan mengonfigurasikan modul proksi API untuk mendengarkan port lain. Misalnya, modul proksi API dapat mendengarkan port 8000 dengan mengatur nilai NGINX_DEFAULT_PORT variabel lingkungan ke 8000
dan membuat pengikatan untuk port 8000.
Mengaktifkan pengunduhan gambar kontainer
Kasus penggunaan umum untuk modul proksi API adalah mengaktifkan perangkat Azure IoT Edge di lapisan bawah untuk menarik gambar kontainer. Skenario ini menggunakan modul Penambat registri modul untuk mengambil gambar kontainer kembali dari cloud dan menyimpannya di lapisan atas. Proksi API menyampaikan semua permintaan HTTPS untuk mengunduh gambar kontainer dari lapisan bawah yang akan dilayani oleh modul registri di lapisan atas.
Skenario ini mengharuskan perangkat Azure IoT Edge downstream menunjuk ke nama domain $upstream
yang diikuti oleh nomor port modul Proxksi API alih-alih registri kontainer gambar. Misalnya: $upstream:8000/azureiotedge-api-proxy:1.1
.
Kasus penggunaan ini ditunjukkan dalam tutorial Membuat hierarki perangkat Azure IoT Edge menggunakan gateway.
Mengonfigurasikan modul berikut di lapisan atas:
- Modul registri Docker
- Konfigurasikan modul dengan nama yang mudah diingat seperti registri dan mengekspos port dalam modul untuk menerima permintaan.
- Konfigurasikan modul untuk memetakan ke registri kontainer Anda.
- Modul proksi API
Mengonfigurasikan variabel lingkungan berikut:
Nama Nilai DOCKER_REQUEST_ROUTE_ADDRESS
Nama modul registri dan port terbuka. Contohnya, registry:5000
.NGINX_DEFAULT_PORT
Port yang didengarkan proksi nginx untuk permintaan dari perangkat downstream. Contohnya, 8000
.Mengonfigurasikan createOptions berikut:
{ "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "8000" } ] } } }
Mengonfigurasikan modul berikut pada lapisan bawah untuk skenario ini:
- Modul proksi API. Modul proksi API diperlukan pada semua perangkat lapisan bawah kecuali perangkat lapisan bawah.
Mengonfigurasikan variabel lingkungan berikut:
Nama Nilai NGINX_DEFAULT_PORT
Port yang didengarkan proksi nginx untuk permintaan dari perangkat downstream. Contohnya, 8000
.Mengonfigurasikan createOptions berikut:
{ "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "8000" } ] } } }
Mengekspos port proksi
Port 8000 diekspos secara default dari gambar docker. Jika port proksi nginx yang berbeda digunakan, tambahkan bagian ExposedPorts yang mendeklarasikan port dalam manifes penyebaran. Misalnya, jika Anda mengubah port proksi nginx menjadi 8001, tambahkan yang berikut ini ke manifes penyebaran:
{
"ExposedPorts": {
"8001/tcp": {}
},
"HostConfig": {
"PortBindings": {
"8001/tcp": [
{
"HostPort": "8001"
}
]
}
}
}
Mengaktifkan unggahan blob
Kasus penggunaan lain untuk modul proksi API adalah mengaktifkan perangkat Azure IoT Edge pada lapisan bawah untuk mengunggah blob. Kasus penggunaan ini memungkinkan fungsionalitas pemecahan masalah pada perangkat lapisan bawah seperti mengunggah log modul atau mengunggah bundel dukungan.
Skenario ini menggunakan Azure Blob Storage pada Azure IoT Edge modul pada lapisan atas untuk menangani pembuatan dan pengunggahan blob. Dalam skenario berlapis, hingga lima lapisan didukung. Modul Azure Blob Storage di IoT Edge diperlukan pada perangkat lapisan atas dan opsional untuk perangkat lapisan bawah. Untuk contoh penyebaran multi-lapisan, lihat sampel Azure IoT Edge for Industrial IoT .
Mengonfigurasikan modul berikut di lapisan atas:
- Azure Blob Storage pada modul Azure IoT Edge.
- Modul proksi API
Mengonfigurasikan variabel lingkungan berikut:
Nama Nilai BLOB_UPLOAD_ROUTE_ADDRESS
Nama modul penyimpanan blob dan port terbuka. Contohnya, azureblobstorageoniotedge:11002
.NGINX_DEFAULT_PORT
Port yang didengarkan proksi nginx untuk permintaan dari perangkat downstream. Contohnya, 8000
.Mengonfigurasikan createOptions berikut:
{ "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "8000" } ] } } }
Mengonfigurasikan modul berikut pada lapisan bawah untuk skenario ini:
- Modul proksi API
Mengonfigurasikan variabel lingkungan berikut:
Nama Nilai NGINX_DEFAULT_PORT
Port yang didengarkan proksi nginx untuk permintaan dari perangkat downstream. Contohnya, 8000
.Mengonfigurasikan createOptions berikut:
{ "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "8000" } ] } } }
Menggunakan langkah-langkah berikut untuk mengunggah bundel dukungan atau file log ke modul penyimpanan blob yang terletak di lapisan atas:
Buat kontainer blob menggunakan Azure Storage Explorer atau API REST. Untuk informasi selengkapnya, lihat Menyimpan data di Azure Stack Edge dengan Azure Blob Storage pada Azure IoT Edge.
Minta pengunggahan bundel log atau dukungan sesuai dengan langkah-langkah dalam Mengambil kembali log dari penyebaran Azure IoT Edge, tetapi gunakan nama domain
$upstream
dan port proksi terbuka sebagai ganti dari alamat modul penyimpanan blob. Contohnya:{ "schemaVersion": "1.0", "sasUrl": "https://$upstream:8000/myBlobStorageName/myContainerName?SAS_key", "since": "2d", "until": "1d", "edgeRuntimeOnly": false }
Mengedit konfigurasi proksi
File konfigurasi default disematkan pada modul proksi API, tetapi Anda dapat meneruskan konfigurasi baru ke modul melalui cloud menggunakan modul kembar.
Saat menulis konfigurasi, Anda masih dapat menggunakan lingkungan untuk menyesuaikan pengaturan per penyebaran. Gunakan sintaks berikut:
Gunakan
${MY_ENVIRONMENT_VARIABLE}
untuk mengambil nilai variabel lingkungan.Gunakan pernyataan bersyarat untuk mengaktifkan atau menonaktifkan pengaturan berdasarkan nilai variabel lingkungan:
#if_tag ${MY_ENVIRONMENT_VARIABLE} statement to execute if environment variable evaluates to 1 #endif_tag ${MY_ENVIRONMENT_VARIABLE} #if_tag !${MY_ENVIRONMENT_VARIABLE} statement to execute if environment variable evaluates to 0 #endif_tag !${MY_ENVIRONMENT_VARIABLE}
Ketika modul proksi API mengurai konfigurasi proksi, modul ini terlebih dahulu menggantikan semua variabel lingkungan yang tercantum dalam PROXY_CONFIG_ENV_VAR_LIST
dengan nilai yang disediakan menggunakan substitusi. Kemudian, semuanya di antara #if_tag
dan #endif_tag
pasangan diganti. Kemudian, modul menyediakan konfigurasi terurai ke proksi terbalik nginx.
Untuk memperbarui konfigurasi proksi secara dinamis, gunakan langkah-langkah berikut:
Tulis file konfigurasi Anda. Anda dapat menggunakan templat default ini sebagai referensi: nginx_default_config.conf
Salin teks file konfigurasi dan konversikan ke base64.
Tempelkan file konfigurasi yang dikodekan sebagai nilai
proxy_config
properti yang diinginkan dalam modul kembar.
Langkah berikutnya
Gunakan modul proksi API untuk Menyambungkan perangkat Azure IoT Edge downstream ke gateway Azure IoT Edge.