Bersiaplah untuk menyebarkan solusi IoT Edge Anda ke dalam lingkungan produksi

Berlaku untuk:IoT Edge 1.5 dengan tanda centang IoT Edge 1.5

Important

IoT Edge 1.5 LTS adalah rilis didukung. IoT Edge 1.4 LTS mencapai akhir masa pakai pada 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Update IoT Edge.

Saat Anda siap untuk mengambil solusi IoT Edge dari pengembangan ke produksi, pastikan solusi tersebut dikonfigurasi untuk performa yang sedang berlangsung.

Tidak semua informasi dalam artikel ini sama pentingnya. Untuk membantu Anda memprioritaskan, setiap bagian dimulai dengan daftar yang membagi pekerjaan menjadi dua grup: penting untuk diselesaikan sebelum pergi ke produksi, atau berguna untuk diketahui.

Konfigurasi perangkat

IoT Edge perangkat dapat berupa apa pun dari Raspberry Pi ke laptop atau komputer virtual yang berjalan di server. Anda dapat mengakses perangkat secara fisik atau melalui koneksi virtual, atau dapat diisolasi untuk jangka waktu yang lama. Bagaimanapun, pastikan dikonfigurasi agar berfungsi dengan tepat.

  • Important

    • Menginstal sertifikat produksi
    • Memiliki rencana manajemen perangkat
    • Menggunakan Moby sebagai mesin kontainer. Jika Anda menggunakan snap Ubuntu Core, Canonical menyediakan layanan untuk Docker snap dan mendukungnya dalam skenario produksi.
  • Helpful

    • Pilih protokol upstream

Menginstal sertifikat produksi

Setiap perangkat IoT Edge dalam produksi memerlukan sertifikat otoritas sertifikat perangkat (CA) yang diinstal di dalamnya. Nyatakan sertifikat CA ke dalam runtime IoT Edge di dalam file konfigurasi. Untuk pengembangan dan pengujian, runtime IoT Edge membuat sertifikat sementara jika Anda tidak mendeklarasikan sertifikat dalam file konfigurasi. Tetapi sertifikat sementara ini kedaluwarsa setelah tiga bulan dan tidak aman untuk skenario produksi. Untuk skenario produksi, berikan sertifikat CA Edge Anda sendiri, baik dari otoritas sertifikat yang ditandatangani sendiri atau yang dibeli dari otoritas sertifikat komersial.

Untuk memahami peran sertifikat EDGE CA, lihat Cara Azure IoT Edge menggunakan sertifikat.

Untuk informasi selengkapnya tentang menginstal sertifikat pada perangkat IoT Edge dan merujuknya dari file konfigurasi, lihat Kelola sertifikat pada perangkat IoT Edge.

Memiliki rencana manajemen perangkat

Sebelum Anda menempatkan perangkat apa pun dalam produksi, pertimbangkan bagaimana Anda akan mengelola pembaruan di masa mendatang. Untuk perangkat IoT Edge, daftar komponen yang akan diperbarui dapat mencakup:

  • Firmware perangkat
  • Pustaka sistem operasi
  • Mesin kontainer, seperti Moby
  • IoT Edge
  • Sertifikat CA

Device Update for IoT Hub adalah layanan yang memungkinkan Anda menyebarkan pembaruan over-the-air (OTA) untuk perangkat IoT Edge Anda.

Cara lain untuk memperbarui IoT Edge memerlukan akses fisik atau SSH ke perangkat IoT Edge. Untuk informasi selengkapnya, lihat Perbarui runtime Edge IoT. Untuk memperbarui beberapa perangkat, pertimbangkan untuk menambahkan langkah-langkah pembaruan ke skrip atau menggunakan alat otomatisasi seperti Ansible.

Mesin kontainer

Mesin kontainer diperlukan untuk perangkat IoT Edge apa pun. Mesin moby-engine didukung untuk produksi. Jika Anda menggunakan snap Ubuntu Core, Canonical menyediakan layanan untuk Docker snap dan mendukungnya dalam skenario produksi. Mesin kontainer lain, seperti Docker, bekerja dengan IoT Edge dan tidak apa-apa menggunakan mesin ini untuk pengembangan. Mesin moby dapat didistribusikan ulang saat digunakan dengan Azure IoT Edge, dan Microsoft menyediakan layanan untuk mesin ini.

Pilih protokol upstream

Anda dapat mengonfigurasi protokol, yang menentukan port yang digunakan, untuk komunikasi upstream ke IoT Hub baik untuk agen IoT Edge maupun hub IoT Edge. Protokol default adalah AMQP, tetapi Anda mungkin ingin mengubah protokol tersebut tergantung pada penyiapan jaringan Anda.

Kedua modul runtime memiliki UpstreamProtocol variabel lingkungan. Nilai yang valid untuk variabel ini adalah:

  • MQTT
  • AMQP
  • MQTTWS
  • AMQPWS

Konfigurasikan variabel UpstreamProtocol untuk agen IoT Edge dalam file konfigurasi pada perangkat itu sendiri. Misalnya, jika perangkat IoT Edge Anda berada di belakang server proksi yang memblokir port AMQP, Anda mungkin perlu mengonfigurasi agen IoT Edge untuk menggunakan AMQP melalui WebSocket (AMQPWS) untuk membuat koneksi awal ke IoT Hub.

Setelah perangkat IoT Edge Anda tersambung, lanjutkan mengonfigurasi variabel UpstreamProtocol untuk kedua modul runtime dalam penyebaran di masa mendatang. Misalnya, lihat Konfigurasi perangkat IoT Edge untuk berkomunikasi melalui server proksi.

Deployment

  • Helpful
    • Selalu konsisten dengan protokol upstream.
    • Siapkan penyimpanan host untuk modul sistem.
    • Kurangi ruang memori yang digunakan oleh hub IoT Edge.
    • Gunakan gambar modul yang benar dalam manifes penerapan.
    • Perhatikan batas ukuran kembar saat menggunakan modul kustom.
    • Konfigurasikan bagaimana pembaruan untuk modul diterapkan.

Konsisten dengan protokol upstream

Jika Anda mengonfigurasi agen IoT Edge di perangkat IoT Edge Anda untuk menggunakan protokol yang berbeda dari AMQP default, nyatakan protokol yang sama dalam semua penyebaran di masa mendatang. Misalnya, jika perangkat IoT Edge Anda berada di belakang server proksi yang memblokir port AMQP, Anda mungkin mengonfigurasi perangkat untuk terhubung melalui AMQP melalui WebSocket (AMQPWS). Saat Anda menyebarkan modul ke perangkat, konfigurasikan protokol AMQPWS yang sama untuk agen IoT Edge dan hub IoT Edge. Jika tidak, AMQP default akan mengambil alih pengaturan dan mencegah Anda tersambung lagi.

Anda hanya perlu mengonfigurasi variabel lingkungan UpstreamProtocol untuk agen IoT Edge dan modul hub IoT Edge. Setiap modul tambahan mewarisi protokol apa pun yang diatur dalam modul runtime.

Contoh proses ini disediakan dalam Konfigurasi perangkat IoT Edge untuk berkomunikasi melalui server proksi.

Siapkan penyimpanan host untuk modul sistem

Modul hub dan agen IoT Edge menggunakan penyimpanan lokal untuk mempertahankan status dan memungkinkan olahpesan antara modul, perangkat, dan cloud. Demi keandalan dan performa yang lebih baik, konfigurasikan modul sistem untuk menggunakan penyimpanan pada sistem file host.

Untuk informasi selengkapnya, lihat Penyimpanan host untuk modul sistem.

Mengurangi ruang memori yang digunakan oleh hub IoT Edge

Jika Anda menyebarkan perangkat yang dibatasi dengan memori terbatas, konfigurasikan hub IoT Edge untuk berjalan dalam kapasitas yang lebih efisien dan gunakan lebih sedikit ruang disk. Konfigurasi ini membatasi performa hub IoT Edge, jadi temukan keseimbangan yang tepat yang berfungsi untuk solusi Anda.

Jangan optimalkan untuk performa pada perangkat yang dibatasi

Hub IoT Edge dioptimalkan untuk performa secara default, sehingga mencoba mengalokasikan gugus memori yang besar. Konfigurasi ini dapat menyebabkan masalah stabilitas pada perangkat yang lebih kecil seperti Raspberry Pi. Jika Anda menyebarkan perangkat dengan sumber daya yang dibatasi, atur variabel lingkungan OptimizeForPerformance ke false di hub IoT Edge.

Ketika Anda mengatur OptimizeForPerformance ke true, kepala protokol MQTT menggunakan PooledByteBufferAllocator, yang memiliki performa yang lebih baik tetapi mengalokasikan lebih banyak memori. Alokator tidak bekerja dengan baik pada sistem operasi 32-bit atau pada perangkat dengan memori rendah. Selain itu, jika dioptimalkan untuk performa, RocksDb mengalokasikan lebih banyak memori untuk perannya sebagai penyedia penyimpanan lokal.

Untuk informasi selengkapnya, lihat Masalah stabilitas pada perangkat yang lebih kecil.

Nonaktifkan protokol yang tidak digunakan

Cara lain untuk mengoptimalkan performa hub IoT Edge dan mengurangi penggunaan memorinya adalah dengan mematikan kepala protokol untuk protokol apa pun yang tidak Anda gunakan dalam solusi Anda.

Atur variabel lingkungan boolean untuk modul hub IoT Edge dalam manifes penyebaran Anda untuk mengonfigurasi kepala protokol. Tiga variabel tersebut adalah:

  • amqpSettings__enabled
  • mqttSettings__enabled
  • httpSettings__enabled

Ketiga variabel memiliki dua garis bawah dan dapat diatur ke benar atau salah.

Kurangi waktu penyimpanan untuk pesan

Modul hub IoT Edge menyimpan pesan untuk sementara jika tidak dapat mengirimkannya ke IoT Hub karena alasan apa pun. Anda dapat mengonfigurasi berapa lama hub IoT Edge berpegang pada pesan yang tidak terdeliver sebelum membiarkannya kedaluwarsa. Jika Anda memiliki masalah memori pada perangkat Anda, turunkan nilai timeToLiveSecs di kembaran modul hub IoT Edge.

Nilai default parameter timeToLiveSecs adalah 7200 detik, yaitu dua jam.

Gunakan gambar modul yang benar dalam manifes penyebaran

Jika Anda menggunakan gambar modul kosong atau salah, agen Edge mencoba kembali untuk memuat gambar. Proses coba lagi ini menghasilkan lalu lintas tambahan. Tambahkan gambar yang benar ke manifes penyebaran untuk menghindari menghasilkan lalu lintas yang tidak perlu.

Jangan gunakan versi debug gambar modul

Saat Anda berpindah dari skenario pengujian ke skenario produksi, ingatlah untuk menghapus konfigurasi debug dari manifes penyebaran. Periksa apakah tidak ada gambar modul dalam manifes penyebaran yang memiliki akhiran .debug . Jika Anda telah menambahkan opsi pembuatan untuk mengekspos port dalam modul untuk debugging, hapus opsi pembuatan tersebut sekaligus.

Perhatikan batas ukuran kembar saat menggunakan modul kustom

Manifes penyebaran yang berisi modul kustom adalah bagian dari kembar EdgeAgent. Tinjau batasan pada ukuran kembar modul.

Jika Anda menerapkan banyak modul, Anda mungkin menghabiskan batas ukuran ganda ini. Pertimbangkan beberapa mitigasi umum untuk batas keras ini:

  • Simpan konfigurasi apa pun di modul ganda kustom, yang memiliki batasnya sendiri.
  • Simpan beberapa konfigurasi yang menunjuk ke lokasi tanpa batas ruang, misalnya, ke penyimpanan blob.

Mengonfigurasi cara pembaruan modul diterapkan

Saat Anda memperbarui penyebaran, Edge Agent menerima konfigurasi baru sebagai pembaruan kembar. Jika konfigurasi baru memiliki gambar modul baru atau yang diperbarui, secara default, Agen Edge secara berurutan memproses setiap modul:

  1. Gambar yang diperbarui diunduh
  2. Modul yang sedang berjalan dihentikan
  3. Instans modul baru dimulai
  4. Pembaruan modul berikutnya diproses

Dalam beberapa kasus, seperti ketika dependensi ada di antara modul, Anda mungkin ingin terlebih dahulu mengunduh semua gambar modul yang diperbarui sebelum memulai ulang modul yang sedang berjalan. Anda dapat mengonfigurasi perilaku pembaruan modul ini dengan mengatur variabel lingkungan Agen IoT Edge ModuleUpdateMode ke nilai string WaitForAllPulls. Untuk informasi selengkapnya, lihat Variabel Lingkungan IoT Edge.

"modulesContent": {
    "$edgeAgent": {
        "properties.desired": {
            ...
            "systemModules": {
                "edgeAgent": {
                    "env": {
                        "ModuleUpdateMode": {
                            "value": "WaitForAllPulls"
                        }
                    ...

Manajemen kontainer

  • Important
    • Gunakan tag untuk mengelola versi.
    • Mengelola volume.
  • Helpful
    • Simpan kontainer runtime di registri pribadi Anda.
    • Mengonfigurasi pengumpulan sampah gambar.

gunakan tag untuk mengelola versi

Tag adalah konsep Docker yang dapat Anda gunakan untuk membedakan antara versi kontainer Docker. Tag adalah akhiran seperti 1,5 yang berada di akhir repositori kontainer. Misalnya, mcr.microsoft.com/azureiotedge-agent:1.5. Tag dapat berubah dan dapat menunjuk ke kontainer lain kapan saja, sehingga tim Anda harus menyepakati konvensi yang akan diikuti ke depan saat Anda memperbarui gambar modul Anda.

Tag juga membantu Anda menerapkan pembaruan di perangkat IoT Edge Anda. Saat Anda mengunggah versi modul yang diperbarui ke registri kontainer Anda, tingkatkan tag. Kemudian, kirim penyebaran baru ke perangkat Anda dengan tag yang ditingkatkan. Mesin kontainer mengenali tag yang dinaikkan sebagai versi baru dan menarik versi modul terbaru ke perangkat Anda.

Tag untuk runtime IoT Edge

Agen IoT Edge dan gambar hub IoT Edge ditandai dengan versi IoT Edge yang terkait dengannya. Ada dua cara berbeda untuk menggunakan tag dengan gambar runtime:

  • Tag bergulir - Gunakan hanya dua nilai pertama dari nomor versi untuk mendapatkan gambar terbaru yang cocok dengan digit tersebut. Misalnya, 1.5 diperbarui setiap kali ada rilis baru untuk menunjuk ke versi 1.5.x terbaru. Jika runtime container pada perangkat IoT Edge Anda mengambil ulang citra, modul runtime diperbarui ke versi terbaru. Penyebaran dari portal Azure secara default menggunakan tag bergulir. Pendekatan ini disarankan untuk tujuan pengembangan.

  • Tag tertentu - Gunakan ketiga nilai nomor versi untuk mengatur versi gambar secara eksplisit. Misalnya, 1.5.0 tidak berubah setelah rilis awal. Anda mendeklarasikan nomor versi baru dalam manifes penyebaran saat Anda siap untuk memperbarui. Pendekatan ini disarankan untuk tujuan produksi.

Mengelola volume penyimpanan

IoT Edge tidak menghapus volume yang terpasang pada kontainer modul. Perilaku ini sengaja dirancang, karena memungkinkan mempertahankan keberlanjutan data antar instans kontainer seperti skenario peningkatan. Namun, jika volume ini tidak digunakan, volume tersebut dapat menyebabkan kelelahan ruang disk dan kesalahan sistem berikutnya. Jika Anda menggunakan volume Docker dalam skenario Anda, gunakan alat Docker seperti pangkas volume docker dan volume docker rm untuk menghapus volume yang tidak digunakan, terutama untuk skenario produksi.

simpan kontainer runtime dalam registri privat Anda

Anda tahu cara menyimpan gambar kontainer untuk modul kode kustom di registri Azure privat Anda, tetapi Anda juga dapat menggunakannya untuk menyimpan gambar kontainer publik seperti edgeAgent dan edgeHub modul runtime. Jika Anda memiliki pembatasan firewall yang ketat, Anda mungkin perlu menyimpan kontainer runtime ini di registri privat Anda karena biasanya disimpan di Microsoft Container Registry (MCR).

Langkah-langkah berikut menunjukkan cara mengunduh image Docker edgeAgent dan edgeHub ke komputer lokal Anda, menandai ulang, mengunggahnya ke registri privat Anda, lalu memperbarui file konfigurasi Anda sehingga perangkat Anda tahu untuk mengunduh image dari registri privat Anda.

  1. Tarik gambar EdgeAgent Docker dari registri Microsoft. Perbarui nomor versi jika diperlukan.

    # Pull edgeAgent image
    docker pull mcr.microsoft.com/azureiotedge-agent:1.5
    
    # Pull edgeHub image
    docker pull mcr.microsoft.com/azureiotedge-hub:1.5
    
  2. Daftarkan semua image Docker Anda, temukan edgeAgent dan edgeHub, lalu salin ID image mereka.

    docker images
    
  3. Retag ulang gambar edgeAgent dan edgeHub Anda. Ganti nilai dalam tanda kurung '[]' dengan nilai Anda sendiri.

    # Retag your edgeAgent image
    docker tag <my-image-id> <registry-name/server>/azureiotedge-agent:1.5
    
    # Retag your edgeHub image
    docker tag <my-image-id> <registry-name/server>/azureiotedge-hub:1.5
    
  4. Dorong gambar edgeAgent dan edgeHub Anda ke registri privat Anda. Ganti nilai dalam tanda kurung siku dengan nilai Anda sendiri.

    # Push your edgeAgent image to your private registry
    docker push <registry-name/server>/azureiotedge-agent:1.5
    
    # Push your edgeHub image to your private registry
    docker push <registry-name/server>/azureiotedge-hub:1.5
    
  5. Perbarui referensi gambar dalam file deployment.template.json untuk modul sistem edgeAgent dan edgeHub , dengan mengganti mcr.microsoft.com dengan "registry-name/server" Anda sendiri untuk kedua modul.

  6. Buka editor teks di perangkat IoT Edge Anda untuk mengubah file konfigurasi sehingga tahu tentang gambar registri privat Anda.

    sudo nano /etc/aziot/config.toml
    
  7. Di editor teks, ubah nilai gambar Anda di bawah [agent.config]. Ganti nilai dalam tanda kurung '[]' dengan nilai Anda sendiri.

    [agent.config]
    image = "<registry-name/server>/azureiotedge-agent:1.5"
    
  8. Jika registri privat Anda memerlukan autentikasi, atur parameter autentikasi di [agent.config.auth].

    [agent.config.auth]
    serveraddress = "<login-server>" # Almost always equivalent to <registry-name/server>
    username = "<username>"
    password = "<password>"
    
  9. Simpan perubahan Anda dan keluar dari editor teks Anda.

  10. Terapkan perubahan konfigurasi IoT Edge.

    sudo iotedge config apply
    

    Runtime IoT Edge Anda dimulai ulang.

Untuk informasi selengkapnya, lihat:

Mengonfigurasi pengumpulan sampah gambar

Pengumpulan sampah gambar adalah fitur di IoT Edge v1.4 dan yang lebih baru yang secara otomatis membersihkan gambar Docker yang tidak lagi digunakan oleh modul IoT Edge. Ini hanya menghapus image Docker yang ditarik oleh runtime IoT Edge sebagai bagian dari penyebaran. Menghapus gambar Docker yang tidak digunakan membantu menghemat ruang disk.

Layanan aziot-edged, yang merupakan komponen host IoT Edge, mengimplementasikan fitur ini dan mengaktifkannya secara default. Proses pembersihan berjalan setiap hari pada tengah malam (waktu lokal perangkat) dan menghapus gambar Docker yang tidak digunakan yang terakhir digunakan tujuh hari yang lalu. Anda mengatur parameter untuk mengontrol perilaku pembersihan dalam file config.toml , dan bagian ini menjelaskannya. Jika Anda tidak menentukan parameter dalam file konfigurasi, nilai default akan berlaku.

Misalnya, bagian config.toml berikut menunjukkan pengaturan pengumpulan sampah gambar dengan nilai default:

[image_garbage_collection]
enabled = true
cleanup_recurrence = "1d"
image_age_cleanup_threshold = "7d" 
cleanup_time = "00:00"

Tabel berikut menjelaskan parameter pengumpulan sampah gambar. Semua parameter bersifat opsional. Atur satu per satu untuk mengubah pengaturan default.

Parameter Description Required Nilai standar
enabled Mengaktifkan pengumpulan sampah gambar. Anda dapat menonaktifkan fitur dengan mengatur nilai ini ke false. Optional true
cleanup_recurrence Mengontrol seberapa sering tugas pembersihan berjalan. Tentukan nilai ini sebagai beberapa hari dan tidak boleh kurang dari satu hari.

Misalnya: 1d, 2d, 6d, dan sebagainya.
Optional 1d
image_age_cleanup_threshold Menentukan ambang batas usia minimum gambar yang tidak digunakan sebelum mempertimbangkannya untuk pembersihan. Tentukan nilai ini dalam hari. Anda dapat menentukan 0d untuk membersihkan gambar segera setelah dihapus dari penyebaran.

Gambar dianggap tidak digunakan setelah dihapus dari penyebaran.
Optional 7d
cleanup_time Waktu dalam sehari, menurut waktu lokal perangkat, saat tugas pembersihan dilaksanakan. Harus dalam format waktu 24 jam HH:MM. Jika perangkat tidak online, tugas pembersihan tidak berjalan. Tugas berjalan pada jadwal berikutnya cleanup_time jika perangkat sedang online pada saat itu. Optional 00:00

Jaringan

  • Helpful
    • Tinjau konfigurasi keluar dan masuk
    • Perbolehkan koneksi dari perangkat IoT Edge
    • Konfigurasikan komunikasi melalui proksi
    • Mengatur server DNS dalam pengaturan mesin kontainer

Tinjau konfigurasi keluar dan masuk

Anda selalu mengonfigurasi saluran komunikasi antara Azure IoT Hub dan IoT Edge sebagai pihak luar. Untuk sebagian besar skenario IoT Edge, hanya tiga koneksi yang diperlukan. Mesin kontainer perlu tersambung dengan registri kontainer (atau registri) yang menyimpan gambar modul. Runtime IoT Edge perlu terhubung dengan IoT Hub untuk mengambil informasi konfigurasi perangkat, dan untuk mengirim pesan dan telemetri. Jika Anda menggunakan provisi otomatis, IoT Edge perlu terhubung ke Device Provisioning Service. Untuk informasi selengkapnya, lihat Firewall dan aturan konfigurasi port.

Perbolehkan koneksi dari perangkat IoT Edge

Jika penyiapan jaringan mengharuskan Anda secara eksplisit mengizinkan koneksi dari perangkat IoT Edge, tinjau daftar komponen IoT Edge berikut:

  • IoT Edge agent membuka koneksi AMQP atau MQTT persisten ke IoT Hub, mungkin melalui WebSockets.
  • IoT Edge hub membuka satu koneksi AMQP persisten atau beberapa koneksi MQTT ke IoT Hub, mungkin melalui WebSocket.
  • layanan IoT Edge melakukan panggilan HTTPS terputus-terputus ke IoT Hub.

Dalam ketiga kasus, nama domain yang sepenuhnya memenuhi syarat (FQDN) cocok dengan pola \*.azure-devices.net.

Registrasi wadah

Mesin Kontainer melakukan panggilan ke registri kontainer melalui HTTPS. Untuk mengambil gambar kontainer runtime IoT Edge, FQDN mcr.microsoft.com. Mesin kontainer tersambung ke registri lain seperti yang dikonfigurasi dalam penyebaran.

Daftar periksa ini adalah titik awal untuk aturan firewall:

FQDN (* = simbol pengganti) Port TCP Keluar Usage
mcr.microsoft.com 443 Microsoft Container Registry
*.data.mcr.microsoft.com 443 Titik akhir data yang menyediakan pengiriman konten
*.cdn.azcr.io 443 Menyebarkan modul dari Marketplace ke perangkat
global.azure-devices-provisioning.net 443 Akses Layanan Penyediaan Perangkat (opsional)
*.azurecr.io 443 Registri kontainer pribadi dan pihak ketiga
*.blob.core.windows.net 443 Mengunduh delta citra Azure Container Registry dari penyimpanan blob
*.azure-devices.net 5671, 8883, 4431 akses IoT Hub
*.docker.io 443 akses Docker Hub (opsional)

1Buka port 8883 untuk MQTT aman atau port 5671 untuk AMQP yang aman. Jika Anda hanya dapat membuat koneksi melalui port 443, maka salah satu protokol ini dapat berjalan melalui terowongan WebSocket.

Petunjuk / Saran

Untuk keamanan yang lebih ketat, ganti FQDN wildcard dengan titik akhir tertentu jika memungkinkan. Misalnya, ganti *.azure-devices.net dengan <your-hub-name>.azure-devices.net. Ganti *.azurecr.io dengan <your-registry-name>.azurecr.io. Tim keamanan TI perusahaan sering menolak aturan wildcard, jadi rencanakan FQDN tertentu dalam lingkungan produksi.

Karena alamat IP hub IoT dapat berubah tanpa pemberitahuan, selalu gunakan FQDN untuk mengizinkan konfigurasi. Untuk mempelajari lebih lanjut, lihat Pahami alamat IP IoT Hub.

Beberapa aturan firewall ini diwarisi dari Azure Container Registry. Untuk informasi selengkapnya, lihat Konfigurasi aturan untuk mengakses registri kontainer Azure di belakang firewall.

Anda dapat mengaktifkan titik akhir data khusus di registri Kontainer Azure Anda untuk menghindari daftar putih wildcard untuk *.blob.core.windows.net FQDN. Untuk informasi selengkapnya, lihat Mengaktifkan titik akhir data berdedikasi.

Note

Untuk menyediakan FQDN yang konsisten antara REST dan titik akhir data, mulai 15 Juni 2020 , titik akhir data Microsoft Container Registry berubah dari *.cdn.mscr.io ke *.data.mcr.microsoft.com.
Untuk informasi selengkapnya, lihat Konfigurasi aturan firewall klien Microsoft Container Registry.

Jika Anda tidak ingin mengonfigurasi firewall Anda untuk mengizinkan akses ke registri kontainer publik, Anda dapat menyimpan image di registri kontainer privat Anda, seperti yang dijelaskan dalam Menyimpan kontainer runtime di registri privat Anda.

Azure IoT Identity Service

IoT Identity Service menyediakan layanan provisi dan kriptografi untuk perangkat Azure IoT. Layanan identitas memeriksa apakah versi yang diinstal adalah versi terbaru. Pemeriksaan menggunakan FQDN berikut untuk memverifikasi versi.

FQDN Port TCP Keluar Usage
aka.ms 443 URL Vanity yang menyediakan pengalihan ke file versi
raw.githubusercontent.com 443 File versi layanan identitas yang dihosting di GitHub

Konfigurasikan komunikasi melalui proksi

Jika Anda menyebarkan perangkat Anda di jaringan yang menggunakan server proksi, mereka perlu berkomunikasi melalui proksi untuk menjangkau IoT Hub dan registri kontainer. Untuk informasi selengkapnya, lihat Konfigurasi perangkat IoT Edge untuk berkomunikasi melalui server proksi.

Mengatur server DNS dalam pengaturan mesin kontainer

Tentukan server DNS untuk lingkungan Anda di pengaturan mesin kontainer. Pengaturan server DNS berlaku untuk semua modul kontainer yang dijalankan oleh mesin.

  1. Edit file /etc/docker di direktori daemon.json pada perangkat Anda. Buat file jika tidak tersedia.

  2. Tambahkan kunci dns dan atur alamat server DNS ke layanan DNS yang dapat diakses publik. Jika perangkat edge Anda tidak dapat mengakses server DNS publik, gunakan alamat server DNS yang dapat diakses di jaringan Anda. Contohnya:

    {
        "dns": ["1.1.1.1"]
    }
    

    Untuk jaringan perusahaan atau privat yang memblokir DNS eksternal, gunakan server DNS internal Anda sebagai gantinya:

    {
        "dns": ["10.0.0.53"]
    }
    

Manajemen solusi

  • Helpful
    • Siapkan log dan diagnostik
    • Menyiapkan driver pengelogan default
    • Pertimbangkan proses pengujian dan rangkaian CI/CD

Siapkan log dan diagnostik

Di Linux, daemon IoT Edge menggunakan jurnal sebagai driver pengelogan default. Gunakan alat journalctl baris perintah untuk mengkueri log daemon.

Dimulai dengan versi 1.2, IoT Edge bergantung pada beberapa daemon. Meskipun Anda dapat mengkueri setiap log daemon satu per satu dengan menggunakan journalctl, gunakan iotedge system perintah untuk mengkueri log gabungan.

  • Perintah Terkonsolidasi iotedge:

    sudo iotedge system logs
    
  • Perintah journalctl yang setara:

    journalctl -u aziot-edge -u aziot-identityd -u aziot-keyd -u aziot-certd -u aziot-tpmd
    

Saat menguji penyebaran IoT Edge, Anda biasanya mengakses perangkat untuk mengambil log dan memecahkan masalah. Dalam skenario penyebaran, Anda mungkin tidak memiliki opsi tersebut. Pertimbangkan bagaimana Anda akan mengumpulkan informasi tentang perangkat Anda dalam produksi. Salah satu opsinya adalah menggunakan modul pengelogan yang mengumpulkan informasi dari modul lain dan mengirimkannya ke cloud. Misalnya, gunakan logspout-loganalytics, atau rancang sendiri.

Menyiapkan driver pengelogan default

Secara default, mesin kontainer Moby tidak mengatur batas ukuran log kontainer. Seiring waktu, pengaturan default ini dapat menyebabkan perangkat mengisi dengan log dan kehabisan ruang disk. Atur mesin kontainer Anda untuk menggunakan driver pengeloganlocal sebagai mekanisme pengelogan Anda. Driver local pengelogan menawarkan batas ukuran log default, melakukan rotasi log secara default, dan menggunakan format file yang lebih efisien, yang membantu mencegah kelelahan ruang disk. Anda juga dapat menggunakan driver pencatatan log yang berbeda dan menetapkan batas ukuran yang berbeda sesuai kebutuhan Anda.

Opsi: Mengonfigurasi driver pengelogan default untuk semua modul kontainer

Atur mesin kontainer Anda untuk menggunakan penggerak log tertentu log driver dengan mengatur nilai ke nama penggerak log dalam berkas daemon.json. Contoh berikut mengatur driver pengelogan default ke local driver log (disarankan).

{
    "log-driver": "local"
}

Anda juga dapat mengonfigurasi log-opts kunci untuk menggunakan nilai yang sesuai dalam daemon.json file. Contoh berikut mengatur driver log ke local dan mengatur opsi max-size dan max-file.

{
    "log-driver": "local",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3"
    }
}

Tambahkan atau tambahkan informasi ini ke file bernama daemon.json dan letakkan di lokasi berikut:

  • /etc/docker/

Mulai ulang mesin kontainer agar perubahan diterapkan.

Opsi: Sesuaikan pengaturan log untuk setiap modul kontainer

Atur opsi ini di createOptions dari setiap modul. Contohnya:

"createOptions": {
    "HostConfig": {
        "LogConfig": {
            "Type": "local",
            "Config": {
                "max-size": "10m",
                "max-file": "3"
            }
        }
    }
}

Opsi tambahan pada sistem Linux

  • Konfigurasikan mesin kontainer untuk mengirim log ke systemdjurnal dengan mengatur journald sebagai driver pengelogan default.

  • Hapus log lama secara berkala dari perangkat Anda dengan memasang alat logrotate. Gunakan spesifikasi file berikut:

    /var/lib/docker/containers/*/*-json.log{
         copytruncate
         daily
         rotate7
         delaycompress
         compress
         notifempty
         missingok
    }
    

Pertimbangkan proses pengujian dan rangkaian CI/CD

Untuk penyebaran IoT Edge yang paling efisien, integrasikan penyebaran produksi Anda ke dalam pengujian dan alur CI/CD Anda. Azure IoT Edge mendukung beberapa platform CI/CD, termasuk Azure DevOps. Untuk informasi selengkapnya, lihat Integrasi kontinu dan penyebaran kontinu ke Azure IoT Edge.

Pertimbangan keamanan

  • Important
    • Mengelola akses ke registri kontainer Anda.
    • Batasi akses kontainer ke sumber daya host.

Kelola akses ke registri kontainer Anda

Sebelum Anda menyebarkan modul ke perangkat IoT Edge produksi, pastikan Anda mengontrol akses ke registri kontainer sehingga orang luar tidak dapat mengakses atau mengubah gambar kontainer Anda. Gunakan registri kontainer privat untuk mengelola citra kontainer.

Dalam tutorial dan dokumentasi lainnya, Anda menggunakan kredensial registri kontainer yang sama di perangkat IoT Edge Anda seperti pada komputer pengembangan Anda. Instruksi ini membantu Anda menyiapkan lingkungan pengujian dan pengembangan dengan lebih mudah dan bukan untuk penggunaan produksi.

Untuk akses yang lebih aman ke registri Anda, pilih dari beberapa opsi autentikasi. Menggunakan prinsipal layanan Active Directory adalah metode yang populer dan direkomendasikan untuk aplikasi atau layanan untuk mengambil citra kontainer secara otomatis dan tanpa pengawasan, seperti yang dilakukan oleh perangkat IoT Edge. Anda juga dapat menggunakan token dengan cakupan repositori, yang memungkinkan Anda membuat identitas jangka panjang atau pendek yang hanya ada di Azure Container Registry tempat Anda membuatnya dengan cakupan akses pada tingkat repositori.

Untuk membuat perwakilan layanan, jalankan dua skrip yang dijelaskan dalam membuat perwakilan layanan. Skrip ini melakukan langkah-langkah berikut:

  • Skrip pertama membuat prinsipal layanan. Ini menunjukkan ID perwakilan layanan dan kata sandi perwakilan layanan. Simpan nilai ini dengan aman dalam rekaman Anda.

  • Skrip kedua membuat penetapan peran untuk diberikan kepada perwakilan layanan. Jalankan selanjutnya jika diperlukan. Gunakan peran pengguna acrPull untuk role parameter . Untuk daftar peran dan izin, lihat Azure Container Registry roles and permissions.

Untuk mengautentikasi dengan menggunakan perwakilan layanan, berikan ID perwakilan layanan dan kredensial kata sandi dari skrip pertama dalam manifes penyebaran.

  • Untuk nama pengguna atau ID klien, tentukan ID perwakilan layanan.

  • Untuk kata sandi atau rahasia klien, tentukan kata sandi perwakilan layanan.

Untuk membuat token berbasis repositori, ikuti membuat token berbasis repositori.

Untuk mengautentikasi dengan menggunakan token yang dicakup repositori, berikan nama token dan kredensial kata sandi yang Anda dapatkan setelah membuat token cakupan repositori Anda dalam manifes penyebaran.

  • Untuk nama pengguna, tentukan nama pengguna token.

  • Untuk kata sandi, tentukan salah satu kata sandi token.

Note

Setelah menerapkan autentikasi keamanan yang ditingkatkan, nonaktifkan pengaturan pengguna Admin sehingga akses nama pengguna dan kata sandi default tidak tersedia. Anda dapat menemukan pengaturan untuk registri kontainer Anda di portal Azure, di bawah Settings, pilih kunci Akses.

Membatasi akses kontainer ke sumber daya host

Untuk menyeimbangkan sumber daya host bersama di seluruh modul, tetapkan batasan penggunaan sumber daya untuk setiap modul. Batas ini memastikan satu modul tidak dapat menggunakan terlalu banyak memori atau CPU dan mencegah proses lain berjalan di perangkat. Secara default, platform IoT Edge tidak membatasi sumber daya untuk modul karena Anda perlu menguji untuk mengetahui berapa banyak sumber daya yang perlu dijalankan modul dengan baik.

Docker memungkinkan Anda membatasi sumber daya seperti memori dan penggunaan CPU. Untuk informasi selengkapnya, lihat Opsi runtime dengan memori, CPU, dan GPU.

Anda dapat menerapkan batasan ini ke modul individual dengan menggunakan opsi buat dalam manifes penyebaran. Untuk informasi selengkapnya, lihat Cara mengonfigurasi opsi pembuatan kontainer untuk modul IoT Edge.

Misalnya, untuk membatasi modul hingga 256 MB memori dan 1 inti CPU:

"createOptions": {
    "HostConfig": {
        "Memory": 268435456,
        "NanoCPUs": 1000000000
    }
}

Langkah selanjutnya

  • Pelajari lebih lanjut tentang penyebaran otomatis IoT Edge.
  • Lihat bagaimana IoT Edge mendukung integrasi berkelanjutan dan penyebaran berkelanjutan.