Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Halaman ini mencakup instruksi untuk mengelola komponen Azure IoT Operations menggunakan manifes penyebaran Kubernetes, yang ada dalam pratinjau. Fitur ini disediakan dengan beberapa batasan, dan tidak boleh digunakan untuk beban kerja produksi.
Lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure untuk persyaratan hukum yang berlaku pada fitur Azure dalam versi beta, pratinjau, atau belum dirilis secara umum.
Artikel ini menunjukkan berbagai cara untuk menguji konektivitas ke broker MQTT dengan klien MQTT di lingkungan nonproduksi.
Secara default, broker MQTT:
-
Menyebarkan listener yang mendukung Protokol Transport Layer Security (TLS) pada port 18883 dengan
ClusterIpsebagai jenis layanan.ClusterIpberarti bahwa broker hanya dapat diakses dari dalam kluster Kubernetes. Untuk mengakses broker dari luar kluster, Anda harus mengonfigurasi layanan jenisLoadBalanceratauNodePort. - Menerima akun layanan Kubernetes untuk autentikasi untuk koneksi dari dalam kluster. Untuk terhubung dari luar kluster, Anda harus mengonfigurasi metode autentikasi yang berbeda.
Perhatian
Untuk skenario produksi, gunakan TLS dan autentikasi akun layanan untuk mengamankan solusi IoT Anda. Untuk informasi selengkapnya, lihat:
- Konfigurasikan TLS dengan manajemen sertifikat otomatis untuk mengamankan komunikasi MQTT di broker MQTT.
- Konfigurasikan autentikasi di broker MQTT.
- Mengekspos layanan Kubernetes ke perangkat eksternal dengan menggunakan penerusan port atau sakelar virtual dengan Azure Kubernetes Services (AKS) Edge Essentials.
Sebelum Memulai, instal atau konfigurasikan Operasi Azure IoT. Gunakan opsi berikut untuk menguji konektivitas ke broker MQTT dengan klien MQTT di lingkungan nonproduksi.
Menyambungkan ke pendengar default di dalam kluster
Opsi pertama adalah menyambungkan dari dalam kluster. Opsi ini menggunakan konfigurasi default dan tidak memerlukan pembaruan tambahan. Contoh berikut menunjukkan cara terhubung dari dalam kluster dengan menggunakan Alpine Linux biasa dan klien MQTT yang umum digunakan dengan menggunakan akun layanan dan sertifikat Otoritas Sertifikat akar (CA) default.
mqtt-client.yaml Unduh penyebaran dari repositori sampel GitHub.
Penting
Jangan gunakan klien MQTT dalam produksi. Klien hanya untuk tujuan pengujian.
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
pod/mqtt-client created
Setelah pod berjalan, gunakan kubectl exec untuk menjalankan perintah di dalam pod.
Misalnya, untuk menerbitkan pesan ke broker, buka shell di dalam pod:
kubectl exec --stdin --tty mqtt-client --namespace azure-iot-operations -- sh
Di dalam shell pod, jalankan perintah berikut untuk menerbitkan pesan ke broker:
mosquitto_pub --host aio-broker --port 18883 --message "hello" --topic "world" --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
Hasilnya harus terlihat mirip dengan contoh berikut:
Client (null) sending CONNECT
Client (null) received CONNACK (0)
Client (null) sending PUBLISH (d0, q0, r0, m1, 'world', ... (5 bytes))
Client (null) sending DISCONNECT
Klien Mosquitto menggunakan token akun layanan yang dipasang /var/run/secrets/tokens/broker-sat untuk mengautentikasi dengan broker. Token berlaku selama 24 jam. Klien juga menggunakan sertifikat OS akar default yang dipasang di /var/run/certs/ca.crt untuk memverifikasi rantai sertifikat TLS broker.
Petunjuk / Saran
Anda dapat menggunakan kubectl untuk mengunduh sertifikat OS akar default untuk digunakan dengan klien lain. Misalnya, untuk mengunduh sertifikat OS akar default ke file bernama ca.crt:
kubectl get configmap azure-iot-operations-aio-ca-trust-bundle -n azure-iot-operations -o jsonpath='{.data.ca\.crt}' > ca.crt
Untuk berlangganan topik, jalankan perintah berikut:
mosquitto_sub --host aio-broker --port 18883 --topic "world" --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
Hasilnya harus terlihat mirip dengan contoh berikut:
Client (null) sending CONNECT
Client (null) received CONNACK (0)
Client (null) sending SUBSCRIBE (Mid: 1, Topic: world, QoS: 0, Options: 0x00)
Client (null) received SUBACK
Subscribed (mid: 1): 0
Klien Mosquitto menggunakan token akun layanan dan sertifikat OS akar yang sama untuk mengautentikasi dengan broker dan berlangganan topik tersebut.
Untuk menghapus pod, jalankan kubectl delete pod mqtt-client -n azure-iot-operations.
Menyambungkan klien dari luar kluster
Karena pendengar broker default diatur ke ClusterIp jenis layanan, Anda tidak dapat terhubung ke broker dari luar kluster secara langsung. Untuk mencegah gangguan yang tidak disengaja terhadap komunikasi antara komponen Operasi IoT internal, kami sarankan Anda menjaga pendengar default tetap tidak dimodifikasi dan didedikasikan untuk komunikasi internal Operasi IoT. Meskipun dimungkinkan untuk membuat layanan Kubernetes LoadBalancer terpisah untuk mengekspos layanan IP kluster, lebih baik membuat listener terpisah dengan pengaturan yang berbeda, seperti port MQTT yang lebih umum 1883 dan 8883, untuk menghindari kebingungan dan potensi risiko keamanan.
Port node
Cara term mudah untuk menguji konektivitas adalah dengan menggunakan NodePort jenis layanan di pendengar. Dengan metode tersebut, Anda dapat menggunakan <nodeExternalIP>:<NodePort> untuk terhubung seperti yang ditunjukkan dalam dokumentasi Kubernetes.
Misalnya, untuk membuat pendengar broker baru dengan NodePort jenis layanan, nama aio-broker-nodeportlayanan, dan mendengarkan di port 1884 (port node 31884), ikuti langkah-langkah ini.
Di portal Azure, buka instans Operasi IoT Anda.
Di bawah Komponen, pilih MQTT Broker.
Pilih pendengar broker MQTT untuk NodePort>Create. Anda hanya dapat membuat satu listener per jenis layanan. Jika Anda sudah memiliki pendengar dengan jenis layanan yang sama, Anda dapat menambahkan lebih banyak port ke pendengar yang ada.
Perhatian
Mengatur autentikasi ke Tidak Ada dan tidak mengonfigurasi TLS menonaktifkan autentikasi dan TLS hanya untuk tujuan pengujian.
Masukkan pengaturan berikut:
Pengaturan Nilai Nama aio-broker-nodeportNama layanan Biarkan kosong atau gunakan aio-broker-nodeport.Pelabuhan 1884 Autentikasi Pilih dari yang sudah ada atau Tidak Ada. Otorisasi Pilih dari yang sudah ada atau Tidak Ada. Protokol Pilih MQTT. Port node 31884 Tambahkan pengaturan TLS ke pendengar dengan memilih Tambahkan TLS>pada port. Langkah ini tidak diperlukan jika Anda tidak memerlukan TLS untuk pengujian. Untuk informasi selengkapnya, lihat BrokerListener.
Pilih Buat untuk membuat pendengar.
Catatan
Secara default Kubernetes, nomor port node harus dalam rentang 30000 hingga 32767.
Dapatkan alamat IP eksternal node:
kubectl get nodes -o yaml | grep ExternalIP -C 1
Hasilnya harus terlihat mirip dengan contoh berikut:
- address: 104.197.41.11
type: ExternalIP
allocatable:
--
- address: 23.251.152.56
type: ExternalIP
allocatable:
...
Gunakan alamat IP eksternal dan port node untuk terhubung ke broker. Misalnya, untuk menerbitkan pesan ke broker:
mosquitto_pub --host <EXTERNAL_IP> --port 31884 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings
Jika tidak ada IP eksternal dalam output, Anda mungkin menggunakan penyiapan Kubernetes yang tidak mengekspos alamat IP eksternal node secara default, seperti banyak pengaturan k3, k3d, atau minikube. Dalam hal ini, Anda dapat mengakses broker dengan IP internal bersama dengan port node dari komputer pada jaringan yang sama. Misalnya, untuk mendapatkan alamat IP internal simpul:
kubectl get nodes -o yaml | grep InternalIP -C 1
Hasilnya harus terlihat mirip dengan contoh berikut:
- address: 172.19.0.2
type: InternalIP
allocatable:
Kemudian, gunakan alamat IP internal dan port node untuk terhubung ke broker dari komputer dalam kluster yang sama. Jika Kubernetes berjalan pada komputer lokal, seperti dengan k3 node tunggal, Anda sering dapat menggunakan localhost alih-alih alamat IP internal. Jika Kubernetes berjalan dalam kontainer Docker, seperti dengan k3d, alamat IP internal sesuai dengan alamat IP kontainer, dan harus dapat dijangkau dari komputer host.
Load Balancer
Cara lain untuk mengekspos broker ke internet adalah dengan menggunakan LoadBalancer jenis layanan. Metode ini lebih kompleks dan mungkin memerlukan lebih banyak konfigurasi, seperti menyiapkan penerusan port.
Misalnya, untuk membuat pendengar broker baru dengan LoadBalancer jenis layanan, nama aio-broker-loadbalancerlayanan, dan mendengarkan di port 1883, ikuti langkah-langkah ini.
Di portal Azure, buka instans Operasi IoT Anda.
Di bawah Komponen, pilih MQTT Broker.
Pilih pendengar broker MQTT untuk NodePort>Create. Anda hanya dapat membuat satu listener per jenis layanan. Jika Anda sudah memiliki pendengar dengan jenis layanan yang sama, Anda dapat menambahkan lebih banyak port ke pendengar yang ada.
Perhatian
Mengatur autentikasi ke Tidak Ada dan tidak mengonfigurasi TLS menonaktifkan autentikasi dan TLS hanya untuk tujuan pengujian.
Masukkan pengaturan berikut:
Pengaturan Nilai Nama aio-broker-loadbalancerNama layanan Biarkan kosong atau gunakan aio-broker-loadbalancer.Pelabuhan 1883 Autentikasi Pilih dari yang sudah ada atau Tidak Ada. Otorisasi Pilih dari yang sudah ada atau Tidak Ada. Protokol Pilih MQTT. Tambahkan pengaturan TLS ke pendengar dengan memilih Tambahkan TLS>pada port. Langkah ini tidak diperlukan jika Anda tidak memerlukan TLS untuk pengujian. Untuk informasi selengkapnya, lihat BrokerListener.
Pilih Buat untuk membuat pendengar.
Pilih Buat untuk membuat pendengar.
Dapatkan alamat IP eksternal untuk layanan broker:
kubectl get service aio-broker-loadbalancer --namespace azure-iot-operations
Jika output terlihat mirip dengan contoh berikut:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aio-broker-loadbalancer LoadBalancer 10.x.x.x x.x.x.x 1883:30382/TCP 83s
Kemudian IP eksternal ditetapkan ke layanan load balancer. Anda dapat menggunakan alamat IP eksternal dan port untuk terhubung ke broker. Misalnya, untuk menerbitkan pesan ke broker:
mosquitto_pub --host <EXTERNAL_IP> --port 1883 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings
Jika IP eksternal tidak ditetapkan, Anda mungkin perlu menggunakan penerusan port atau sakelar virtual untuk mengakses broker.
Menggunakan penerusan port
Dengan minikube, jenis, dan sistem emulasi kluster lainnya, IP eksternal mungkin tidak ditetapkan secara otomatis. Misalnya, status mungkin ditampilkan sebagai Tertunda.
Untuk mengakses broker, teruskan port pendengar broker ke host.
# Using aio-broker-loadbalancer service name and listener port 1883 as example kubectl port-forward --namespace azure-iot-operations service/aio-broker-loadbalancer <HOST_PORT>:1883Biarkan perintah penerusan port berjalan di terminal.
Sambungkan ke broker di port host dengan autentikasi dan konfigurasi TLS yang sama dengan contoh tanpa penerusan port.
Untuk informasi selengkapnya tentang minikube, lihat Menggunakan Penerusan Port untuk Mengakses Aplikasi dalam Kluster.
Penerusan port pada AKS Edge Essentials
Untuk AKS Edge Essentials, Anda perlu melakukan beberapa langkah lagi. Dengan AKS Edge Essentials, mendapatkan alamat IP eksternal mungkin tidak cukup untuk terhubung ke broker. Anda mungkin perlu menyiapkan penerusan port dan membuka port pada firewall untuk memungkinkan lalu lintas ke layanan broker.
Pertama, dapatkan alamat IP eksternal pendengar load balancer broker:
kubectl get service broker-loadbalancer --namespace azure-iot-operationsOutput akan terlihat mirip dengan contoh berikut:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE broker-loadbalancer LoadBalancer 10.x.x.x 192.168.0.4 1883:30366/TCP 14hSiapkan penerusan port ke
broker-loadbalancerlayanan pada alamat192.168.0.4IP eksternal dan port1883:netsh interface portproxy add v4tov4 listenport=1883 connectport=1883 connectaddress=192.168.0.4Buka port pada firewall untuk memungkinkan lalu lintas ke layanan broker:
New-NetFirewallRule -DisplayName "AIO MQTT Broker" -Direction Inbound -Protocol TCP -LocalPort 1883 -Action AllowGunakan alamat IP publik host untuk terhubung ke broker MQTT.
Untuk informasi selengkapnya tentang penerusan port, lihat Mengekspos layanan Kubernetes ke perangkat eksternal.
Akses melalui localhost
Beberapa distribusi Kubernetes dapat mengekspos broker MQTT ke port pada sistem host (localhost) sebagai bagian dari konfigurasi kluster. Gunakan pendekatan ini untuk mempermudah klien pada host yang sama untuk mengakses broker MQTT.
Misalnya, untuk membuat kluster k3d yang memetakan port MQTT default broker MQTT 1883 ke localhost:1883:
k3d cluster create --port '1883:1883@loadbalancer'
Atau untuk memperbarui kluster yang ada:
k3d cluster edit <CLUSTER_NAME> --port-add '1883:1883@loadbalancer'
Kemudian, gunakan localhost dan port untuk terhubung ke broker. Misalnya, untuk menerbitkan pesan ke broker:
mosquitto_pub --host localhost --port 1883 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings
Hanya nonaktifkan TLS dan autentikasi untuk pengujian
Alasan broker MQTT menggunakan autentikasi TLS dan akun layanan secara default adalah untuk memberikan pengalaman aman secara default yang meminimalkan paparan solusi IoT Anda yang tidak disengaja kepada penyerang. Anda tidak boleh menonaktifkan TLS dan autentikasi dalam produksi. Mengekspos broker MQTT ke internet tanpa autentikasi dan TLS dapat menyebabkan akses yang tidak sah dan bahkan serangan penolakan layanan terdistribusi.
Peringatan
Jika Anda memahami risiko dan perlu menggunakan port yang tidak aman di lingkungan yang terkontrol dengan baik, Anda dapat menonaktifkan TLS dan autentikasi untuk tujuan pengujian dengan menghapus tls pengaturan dan authenticationRef dari konfigurasi pendengar.
Di portal Azure, buka instans Operasi IoT Anda.
Di bawah Komponen, pilih MQTT Broker.
Pilih pendengar broker MQTT untuk NodePort atau pendengar broker MQTT untuk LoadBalancer>Create. Anda hanya dapat membuat satu listener per jenis layanan. Jika Anda sudah memiliki pendengar dengan jenis layanan yang sama, Anda dapat menambahkan lebih banyak port ke pendengar yang ada.
Perhatian
Mengatur autentikasi ke Tidak Ada dan tidak mengonfigurasi TLS menonaktifkan autentikasi dan TLS hanya untuk tujuan pengujian.
Masukkan pengaturan berikut:
Pengaturan Nilai Nama Masukkan nama untuk pendengar. Nama layanan Masukkan nama layanan. Pelabuhan Masukkan nomor port. Autentikasi Pilih Tidak Ada. Otorisasi Pilih Tidak Ada. Protokol Pilih MQTT. Port node Masukkan angka antara 30000 hingga 32767 jika menggunakan port node. Pilih Buat untuk membuat pendengar.