Bagikan melalui


Mengamankan komunikasi broker MQTT dengan menggunakan BrokerListener

Penting

Halaman ini mencakup instruksi untuk mengelola komponen Azure IoT Operations menggunakan manifes penyebaran Kubernetes, yang masih dalam tahap 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 untuk fitur Azure yang dalam versi beta, pratinjau, atau belum dirilis ke ketersediaan umum.

Sumber daya BrokerListener sesuai dengan titik akhir jaringan yang mengekspos broker ke klien melalui jaringan. Anda dapat memiliki satu atau beberapa sumber daya BrokerListener untuk setiap broker, dengan beberapa port dan kontrol akses yang berbeda pada masing-masing.

Setiap port BrokerListener dapat memiliki aturan autentikasi dan otorisasinya sendiri yang menentukan siapa yang dapat terhubung pada port pendengar tersebut dan tindakan apa yang dapat mereka lakukan pada broker. Anda dapat menggunakan sumber daya BrokerAuthentication dan BrokerAuthorization untuk menentukan kebijakan kontrol akses untuk setiap port pendengar. Fleksibilitas ini memungkinkan Anda menyempurnakan izin dan peran untuk klien MQTT Anda berdasarkan kebutuhan dan kasus penggunaan mereka.

Petunjuk / Saran

Penyebaran broker MQTT default adalah layanan IP kluster yang mengharuskan klien untuk terhubung dengan protokol Keamanan Lapisan Transportasi (TLS) dan mengautentikasi dengan token akun layanan. Klien yang terhubung dari luar kluster memerlukan konfigurasi tambahan sebelum dapat terhubung.

Pendengar broker memiliki karakteristik berikut:

Untuk daftar semua pengaturan yang tersedia, lihat referensi Broker Listener API.

Default BrokerListener

Saat Anda menyebarkan Azure IoT Operations, penyebaran membuat sumber daya BrokerListener bernama default. Pendengar ini digunakan untuk komunikasi internal terenkripsi antara komponen Operasi IoT. Pendengar bawaan adalah bagian dari broker bawaan.

Perhatian

Untuk menghindari gangguan komunikasi Operasi IoT internal, jaga agar pendengar default tidak berubah dan didedikasikan untuk penggunaan internal. Untuk komunikasi eksternal, buat pendengar baru. Jika Anda perlu menggunakan ClusterIp layanan, tambahkan lebih banyak port ke pendengar default tanpa mengubah pengaturan yang ada.

Untuk melihat atau mengedit pendengar default, ikuti langkah-langkah ini.

  1. Di portal Azure, buka instans Operasi IoT Anda.

  2. Di bawah Komponen, pilih MQTT Broker.

    Cuplikan layar yang memperlihatkan penggunaan portal Microsoft Azure untuk melihat konfigurasi Azure IoT Operations MQTT.

  3. Dari daftar listener broker, pilih listener default.

    Cuplikan layar yang memperlihatkan penggunaan portal Microsoft Azure untuk melihat atau mengedit pendengar broker default.

  4. Tinjau pengaturan pendengar, tetapi hindari memodifikasi salah satu pengaturan yang ada. Sebagai gantinya, buat port baru dan konfigurasikan sesuai kebutuhan.

Hindari memodifikasi pendengar broker default

Untuk mencegah gangguan komunikasi Operasi IoT internal, jaga agar pendengar default tidak berubah dan didedikasikan untuk penggunaan internal. Untuk komunikasi eksternal, buat pendengar baru.

Karena pendengar broker default menggunakan jenis ClusterIplayanan , dan Anda hanya dapat memiliki satu pendengar per jenis layanan, tambahkan lebih banyak port ke pendengar default tanpa mengubah salah satu pengaturan yang ada jika Anda perlu menggunakan ClusterIp layanan.

Membuat pendengar broker baru

Untuk membuat pendengar baru, tentukan pengaturan berikut:

  • Nama: Nama pendengar. Nama ini juga merupakan nama layanan Kubernetes kecuali digantikan.
  • Jenis layanan: Jenis layanan Kubernetes. Lihat Jenis layanan.
  • Port: Daftar port untuk didengarkan. Lihat Port.
  • Nama layanan (opsional): Ambil alih nama layanan Kubernetes. Lihat Nama layanan.

Contoh: Membuat pendengar baru dengan dua port

Contoh ini menunjukkan cara membuat pendengar baru dengan LoadBalancer jenis layanan. Sumber daya BrokerListener mendefinisikan dua port yang menerima koneksi MQTT dari klien.

  1. Di portal Azure, buka instans Operasi IoT Anda.

  2. Di bawah Komponen, pilih MQTT Broker.

  3. Pilih pendengar broker MQTT untuk LoadBalancer>Create.

    Masukkan pengaturan berikut:

    Pengaturan Deskripsi
    Nama Nama sumber daya BrokerListener.
    Nama layanan Nama layanan Kubernetes. Biarkan kosong untuk menggunakan nama pendengar sebagai nama layanan.
    Jenis layanan LoadBalancer sudah dipilih.
  4. Di bawah Port, masukkan pengaturan berikut untuk port pertama:

    Pengaturan Deskripsi
    Pelabuhan Masukkan 1883.
    Autentikasi Pilih Tidak Ada.
    Otorisasi Pilih Tidak Ada.
    Protokol Pilih MQTT.
    TLS Jangan tambahkan.
  5. Pilih Tambahkan entri port untuk menambahkan port kedua dan masukkan pengaturan berikut:

    Pengaturan Deskripsi
    Pelabuhan Masukkan 8883.
    Autentikasi Pilih default.
    Otorisasi Pilih Tidak Ada.
    Protokol Pilih MQTT.
    TLS Pilih Tambahkan.
  6. Pada panel konfigurasi TLS , masukkan pengaturan berikut:

    Pengaturan Deskripsi
    Mode TLS Pilih Otomatis.
    Nama pengeluar sertifikat Memasuki azure-iot-operations-aio-certificate-issuer.
    Jenis pengeluar sertifikat Pilih ClusterIssuer.

    Biarkan pengaturan lain sebagai default, dan pilih Terapkan.

  7. Pilih Buat pendengar.

    Cuplikan layar yang menunjukkan penggunaan portal Microsoft Azure untuk membuat broker MQTT untuk pendengar load balancer.

Jenis layanan

Setiap sumber daya BrokerListener tersebut memetakan ke layanan Kubernetes. Jenis layanan menentukan bagaimana broker diekspos ke jaringan. Jenis layanan yang didukung adalah:

  • ClusterIp: Mengekspos broker pada IP kluster-internal. Klien dapat terhubung ke broker dari dalam kluster. Jenis layanan default ini adalah untuk pendengar default.
  • NodePort: Mengekspos broker pada IP setiap node di port statis. Klien dapat terhubung ke broker dari luar kluster. Jenis layanan ini berguna untuk pengembangan dan pengujian.
  • LoadBalancer: Mengekspos broker secara eksternal. Layanan ini diberi alamat IP eksternal yang dapat digunakan klien untuk terhubung ke broker. Jenis layanan ini adalah yang paling umum untuk penyebaran produksi.

Hanya satu pendengar per jenis layanan

Hanya satu pendengar per jenis layanan yang diizinkan. Jika Anda memerlukan lebih banyak konektivitas dari jenis layanan yang sama, tambahkan lebih banyak port ke pendengar yang ada dari jenis layanan tersebut.

Nama layanan

Nama layanan adalah nama layanan Kubernetes yang terkait dengan broker. Jika tidak ditentukan, nama pendengar broker digunakan sebagai nama layanan. Nama layanan harus unik dalam namespace layanan.

Petunjuk / Saran

Untuk mencegah overhead manajemen, kami sarankan Anda membiarkan nama layanan kosong. Nama pendengar unik, dan Anda dapat menggunakannya untuk mengidentifikasi layanan. Gunakan nama layanan sebagai penimpaan hanya saat Anda tidak dapat memberi nama layanan setelah pendengar.

Port

Setiap pendengar dapat memiliki beberapa port, dan setiap port dapat memiliki pengaturannya sendiri untuk autentikasi, otorisasi, protokol, dan TLS.

Untuk menggunakan pengaturan autentikasi atau otorisasi Anda sendiri untuk port, Anda harus membuat sumber daya yang sesuai sebelum menggunakannya dengan pendengar. Untuk informasi selengkapnya, lihat Mengonfigurasi autentikasi broker MQTT dan Mengonfigurasi otorisasi broker MQTT.

Untuk menggunakan TLS, lihat bagian Mengonfigurasi TLS dengan manajemen sertifikat otomatis atau Mengonfigurasi TLS dengan manajemen sertifikat manual .

Menggunakan port yang sama di seluruh listener

Menggunakan nomor port yang sama di pendengar yang berbeda tidak didukung. Setiap nomor port harus unik dalam broker IoT Operations MQTT.

Misalnya, jika Anda memiliki pendengar menggunakan port 1883, Anda tidak dapat membuat pendengar lain dengan port 1883. Demikian pula, pendengar default menggunakan port 18883, sehingga Anda tidak dapat membuat pendengar lain dengan port 18883.

Dukungan WebSockets

Broker MQTT Operasi IoT mendukung MQTT melalui WebSocket. Untuk mengaktifkan WebSockets, atur protokol ke WebSockets untuk port.

Mengonfigurasi TLS dengan manajemen sertifikat otomatis

Untuk mengaktifkan TLS dengan manajemen sertifikat otomatis, tentukan pengaturan TLS pada port pendengar.

Memverifikasi penginstalan cert-manager

Dengan manajemen sertifikat otomatis, Anda menggunakan cert-manager untuk mengelola sertifikat server TLS. Secara default, cert-manager sudah diinstal bersama Operasi IoT di cert-manager namespace layanan. Verifikasi penginstalan sebelum Anda melanjutkan.

  1. Gunakan kubectl untuk memeriksa pod yang cocok dengan label aplikasi cert-manager.

    kubectl get pods --namespace cert-manager -l 'app in (cert-manager,cainjector,webhook)'
    
    NAME                                           READY   STATUS    RESTARTS       AGE
    aio-cert-manager-64f9548744-5fwdd              1/1     Running   4 (145m ago)   4d20h
    aio-cert-manager-cainjector-6c7c546578-p6vgv   1/1     Running   4 (145m ago)   4d20h
    aio-cert-manager-webhook-7f676965dd-8xs28      1/1     Running   4 (145m ago)   4d20h
    
  2. Jika Anda melihat pod yang ditampilkan sebagai siap dan berjalan, cert-manager diinstal dan siap digunakan.

Petunjuk / Saran

Untuk memverifikasi penginstalan lebih lanjut, periksa dokumentasi cert-manager untuk memverifikasi penginstalan. Ingatlah untuk menggunakan cert-manager namespace layanan.

Membuat penerbit untuk sertifikat server TLS

Sumber daya penerbit cert-manager menentukan bagaimana sertifikat dikeluarkan secara otomatis. Cert-manager mendukung beberapa jenis pengeluar sertifikat secara asli. Ini juga mendukung jenis eksternalissuer untuk memperluas fungsionalitas di luar penerbit yang didukung secara asli. Anda dapat menggunakan broker MQTT dengan semua jenis penerbit cert-manager.

Penting

Selama penyebaran awal, Operasi IoT diinstal dengan penerbit default untuk sertifikat server TLS. Anda dapat menggunakan penerbit ini untuk pengembangan dan pengujian. Untuk informasi selengkapnya, lihat Otoritas Sertifikat (CA) Root Default dan Penerbit dengan Operasi Azure IoT. Langkah-langkah berikut diperlukan hanya jika Anda ingin menggunakan penerbit yang berbeda.

Pendekatan untuk membuat penerbit berbeda tergantung pada skenario Anda. Bagian berikut mencantumkan contoh untuk membantu Anda memulai.

Penerbit CA berguna untuk pengembangan dan pengujian. Ini harus dikonfigurasi dengan sertifikat dan kunci privat yang disimpan dalam rahasia Kubernetes.

Menyiapkan sertifikat akar sebagai rahasia Kubernetes

Jika Anda memiliki sertifikat CA yang ada, buat rahasia Kubernetes dengan sertifikat CA dan file PEM kunci privat CA. Jalankan perintah berikut untuk mengimpor sertifikat CA sebagai rahasia Kubernetes dan lewati bagian berikutnya.

kubectl create secret tls test-ca --cert tls.crt --key tls.key -n azure-iot-operations

Jika Anda tidak memiliki sertifikat CA, cert-manager dapat menghasilkan sertifikat CA untuk Anda. Menggunakan cert-manager untuk menghasilkan sertifikat CA dikenal sebagai bootstrapping penerbit CA dengan sertifikat yang ditandatangani sendiri.

  1. Mulailah dengan membuat ca.yaml:

    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: selfsigned-ca-issuer
      namespace: azure-iot-operations
    spec:
      selfSigned: {}
    ---
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: selfsigned-ca-cert
      namespace: azure-iot-operations
    spec:
      isCA: true
      commonName: test-ca
      secretName: test-ca
      issuerRef:
        # Must match Issuer name above
        name: selfsigned-ca-issuer
        # Must match Issuer kind above
        kind: Issuer
        group: cert-manager.io
      # Override default private key config to use an EC key
      privateKey:
        rotationPolicy: Always
        algorithm: ECDSA
        size: 256
    
  2. Buat sertifikat CA yang ditandatangani sendiri dengan perintah berikut:

    kubectl apply -f ca.yaml
    

Cert-manager membuat sertifikat CA dengan menggunakan defaultnya. Anda dapat mengubah properti sertifikat ini dengan memodifikasi spesifikasi Sertifikat. Untuk daftar opsi yang valid, lihat dokumentasi cert-manager.

Mendistribusikan sertifikat akar

Contoh sebelumnya menyimpan sertifikat CA dalam rahasia Kubernetes yang disebut test-ca. Anda dapat mengambil sertifikat dalam format PEM dari rahasia dan menyimpannya dalam file ca.crt dengan perintah berikut:

kubectl get secret test-ca -n azure-iot-operations -o json | jq -r '.data["tls.crt"]' | base64 -d > ca.crt

Sertifikat ini harus didistribusikan dan dipercaya oleh semua klien. Misalnya, gunakan --cafile bendera untuk klien Mosquitto.

Membuat penerbit berdasarkan sertifikat CA

Cert-manager memerlukan penerbit berdasarkan sertifikat CA yang dihasilkan atau diimpor pada langkah sebelumnya. Buat file berikut sebagai issuer-ca.yaml:

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: my-issuer
  namespace: azure-iot-operations
spec:
  ca:
    # Must match secretName of generated or imported CA cert
    secretName: test-ca

Buat pengeluar sertifikat dengan perintah berikut:

kubectl apply -f issuer-ca.yaml

Perintah sebelumnya membuat penerbit untuk mengeluarkan sertifikat server TLS. Perhatikan nama dan jenis penerbit. Dalam contoh, nama adalah my-issuer dan jenisnya adalah Issuer. Nilai-nilai ini diatur dalam sumber daya BrokerListener nanti.

Mengaktifkan manajemen sertifikat otomatis TLS untuk port

Contoh berikut adalah sumber daya BrokerListener yang memungkinkan TLS pada port 8884 dengan manajemen sertifikat otomatis.

  1. Di portal Azure, buka instans Operasi IoT Anda.

  2. Di bawah Komponen, pilih MQTT Broker.

  3. Pilih atau buat listener. 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.

  4. Anda dapat menambahkan pengaturan TLS ke pendengar dengan memilih TLS pada port yang ada atau dengan menambahkan port baru.

    Cuplikan layar yang menunjukkan penggunaan portal Microsoft Azure untuk membuat broker MQTT untuk pendengar load balancer dengan sertifikat TLS otomatis.

    Masukkan pengaturan berikut:

    Pengaturan Deskripsi
    Nama Nama sumber daya BrokerListener. Memasuki aio-broker-loadbalancer-tls.
    Pelabuhan Nomor port tempat BrokerListener mendengarkan koneksi MQTT. Masukkan 8884.
    Autentikasi Referensi sumber daya autentikasi.
    Otorisasi Referensi sumber daya otorisasi.
    TLS Pilih tombol Tambahkan .
    Nama pengeluar sertifikat Nama penerbit cert-manager. Harus diisi.
    Jenis pengeluar sertifikat Jenis penerbit cert-manager. Harus diisi.
    Grup pengeluar sertifikat Grup penerbit cert-manager. Harus diisi.
    Algoritma kunci privat Algoritma untuk kunci privat.
    Kebijakan rotasi kunci privat Kebijakan untuk memutar kunci privat.
    Nama DNS Nama alternatif subjek DNS untuk sertifikat.
    Alamat IP Alamat IP nama alternatif subjek untuk sertifikat.
    Nama rahasia Rahasia Kubernetes yang berisi sertifikat klien X.509.
    Durasi Total masa pakai sertifikat server TLS default menjadi 90 hari.
    Perpanjang sebelum Kapan harus mulai memperbarui sertifikat.
  5. Pilih Terapkan untuk menyimpan pengaturan TLS.

Setelah sumber daya BrokerListener dikonfigurasi, broker MQTT secara otomatis membuat layanan baru dengan port dan TLS yang ditentukan diaktifkan.

Opsional: Mengonfigurasi parameter sertifikat server

Satu-satunya parameter yang diperlukan adalah Issuer nama dan Issuer jenis. Semua properti lain dari sertifikat server TLS yang dihasilkan dipilih secara otomatis. Namun, broker MQTT memungkinkan properti tertentu untuk disesuaikan mengikuti sintaks yang sama dengan sertifikat cert-manager. Misalnya, Anda dapat menentukan algoritma kunci privat dan kebijakan rotasi. Pengaturan ini berada di bawah tls.certManagerCertificateSpec atau di panel konfigurasi TLS di portal Microsoft Azure.

Untuk daftar lengkap pengaturan ini, lihat Referensi API Broker Listener CertManagerCertificateSpec.

Verifikasi penyebaran

Gunakan kubectl untuk memeriksa apakah layanan yang terkait dengan sumber daya BrokerListener sedang berjalan. Dari contoh sebelumnya, nama layanan adalah aio-broker-loadbalancer-tls dan namespace adalah azure-iot-operations. Perintah berikut memeriksa status layanan:

$ kubectl get service my-new-tls-listener -n azure-iot-operations
NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
aio-broker-loadbalancer-tls    LoadBalancer   10.X.X.X        172.X.X.X     8884:32457/TCP   33s

Menyambungkan ke broker dengan TLS

Setelah sertifikat server dikonfigurasi, TLS diaktifkan. Untuk menguji dengan Mosquitto:

mosquitto_pub -h $HOST -p 8884 -V mqttv5 -i "test" -t "test" -m "test" --cafile ca.crt

Argumen memungkinkan --cafile TLS pada klien Mosquitto dan menentukan bahwa klien harus mempercayai semua sertifikat server yang dikeluarkan oleh file tertentu. Anda harus menentukan file yang berisi penerbit sertifikat server TLS yang dikonfigurasi.

Ganti $HOST dengan host yang sesuai:

  • Jika Anda terhubung dari dalam kluster yang sama, ganti dengan nama layanan yang diberikan (my-new-tls-listener misalnya) atau layanan CLUSTER-IP.
  • Jika Anda terhubung dari luar kluster, gunakan layanan EXTERNAL-IP.

Ingatlah untuk menentukan metode autentikasi jika diperlukan.

CA akar default dan pengeluar sertifikat

Untuk membantu Anda memulai, Operasi IoT disebarkan dengan sertifikat CA "mulai cepat" default dan penerbit untuk sertifikat server TLS. Anda dapat menggunakan penerbit ini untuk pengembangan dan pengujian. Untuk informasi selengkapnya, lihat CA akar default dan penerbit untuk sertifikat server TLS.

Untuk produksi, Anda harus mengonfigurasi penerbit CA dengan sertifikat dari CA tepercaya, seperti yang dijelaskan di bagian sebelumnya.

Mengonfigurasi TLS dengan manajemen sertifikat manual

Untuk mengonfigurasi broker MQTT secara manual untuk menggunakan sertifikat TLS tertentu, tentukan di sumber daya BrokerListener dengan referensi ke rahasia Kubernetes dan sebarkan menggunakan kubectl. Artikel ini memperlihatkan contoh yang mengonfigurasi TLS dengan sertifikat yang ditandatangani sendiri untuk pengujian.

Membuat otoritas sertifikat dengan Langkah CLI

Step adalah manajer sertifikat yang dapat dengan cepat mengaktifkan dan menjalankan Anda ketika Anda membuat dan mengelola CA pribadi milik Anda sendiri.

  1. Pasang Step CLI dan buat sertifikat dan kunci CA root.

    step certificate create --profile root-ca "Example Root CA" root_ca.crt root_ca.key
    
  2. Buat sertifikat CA perantara dan kunci yang ditandatangani oleh CA akar.

    step certificate create --profile intermediate-ca "Example Intermediate CA" intermediate_ca.crt intermediate_ca.key \
    --ca root_ca.crt --ca-key root_ca.key
    

Buat sertifikat server

Gunakan Langkah CLI untuk membuat sertifikat server dari sertifikat dan kunci OS perantara.

step certificate create mqtts-endpoint mqtts-endpoint.crt mqtts-endpoint.key \
--profile leaf \
--not-after 8760h \
--san mqtts-endpoint \
--san localhost \
--ca intermediate_ca.crt --ca-key intermediate_ca.key \
--no-password --insecure

Di sini, mqtts-endpoint dan localhost adalah Subject Alternative Names (SAN) untuk frontend broker MQTT di Kubernetes dan klien lokal, masing-masing. Untuk terhubung melalui internet, tambahkan --san dengan IP eksternal. Bendera --no-password --insecure digunakan untuk pengujian untuk melewati permintaan kata sandi dan menonaktifkan perlindungan kata sandi untuk kunci privat karena disimpan dalam rahasia Kubernetes. Untuk produksi, gunakan kata sandi dan simpan kunci privat di lokasi yang aman seperti Azure Key Vault.

Persyaratan algoritma kunci sertifikat

Kunci EC dan RSA didukung, tetapi semua sertifikat dalam rantai harus menggunakan algoritma kunci yang sama. Jika Anda mengimpor sertifikat CA Anda sendiri, pastikan bahwa sertifikat server menggunakan algoritma kunci yang sama dengan CA.

Mengimpor rantai sertifikat server sebagai rahasia Kubernetes

  1. Buat rantai sertifikat server lengkap, di mana urutan sertifikat penting. Sertifikat server adalah yang pertama dalam file, dan perantara adalah yang kedua.

    cat  mqtts-endpoint.crt intermediate_ca.crt  > server_chain.crt
    
  2. Buat rahasia Kubernetes dengan rantai sertifikat server dan kunci server dengan menggunakan kubectl.

    kubectl create secret tls server-cert-secret -n azure-iot-operations \
    --cert server_chain.crt \
    --key mqtts-endpoint.key
    

Mengaktifkan manajemen sertifikat manual TLS untuk port

Contoh berikut menunjukkan sumber daya BrokerListener yang memungkinkan TLS pada port 8884 dengan manajemen sertifikat manual.

  1. Di portal Azure, buka instans Operasi IoT Anda.

  2. Di bawah Komponen, pilih MQTT Broker.

  3. Pilih atau buat listener. 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. Untuk mengikuti contoh, tentukan nama layanan pendengar sebagai mqtts-endpoint.

  4. Anda dapat menambahkan pengaturan TLS ke pendengar dengan memilih TLS pada port yang ada atau dengan menambahkan port baru.

    Cuplikan layar yang menunjukkan penggunaan portal Microsoft Azure untuk membuat broker MQTT untuk pendengar load balancer dengan sertifikat TLS manual.

    Masukkan pengaturan berikut:

    Pengaturan Deskripsi
    Pelabuhan Nomor port tempat BrokerListener mendengarkan koneksi MQTT. Harus diisi.
    Autentikasi Referensi sumber daya autentikasi.
    Otorisasi Referensi sumber daya otorisasi.
    TLS Pilih tombol Tambahkan .
    Nama rahasia Rahasia Kubernetes yang berisi sertifikat klien X.509.
  5. Pilih Terapkan untuk menyimpan pengaturan TLS.

Menyambungkan ke broker dengan TLS

Untuk menguji koneksi TLS dengan klien Mosquitto, terbitkan pesan dan berikan sertifikat CA akar dalam parameter --cafile.

mosquitto_pub -d -h localhost -p 8885 -i "my-client" -t "test-topic" -m "Hello" --cafile root_ca.crt

Ingatlah untuk menentukan item seperti nama pengguna dan kata sandi jika autentikasi broker MQTT diaktifkan.

Client my-client sending CONNECT
Client my-client received CONNACK (0)
Client my-client sending PUBLISH (d0, q0, r0, m1, 'test-topic', ... (5 bytes))
Client my-client sending DISCONNECT

Petunjuk / Saran

Untuk menggunakan localhost, port harus tersedia di komputer host. Contohnya kubectl port-forward svc/mqtts-endpoint 8885:8885 -n azure-iot-operations. Dengan beberapa distribusi Kubernetes seperti K3d, Anda dapat menambahkan port yang diteruskan dengan k3d cluster edit $CLUSTER_NAME --port-add 8885:8885@loadbalancer.

Untuk terhubung ke broker, Anda perlu mendistribusikan akar kepercayaan, juga dikenal sebagai bundel kepercayaan, ke semua klien. Dalam hal ini, akar kepercayaan adalah CA akar yang ditandatangani sendiri yang dibuat oleh Langkah CLI. Distribusi akar kepercayaan diperlukan bagi klien untuk memverifikasi rantai sertifikat server. Jika klien MQTT Anda adalah beban kerja pada kluster Kubernetes, Anda juga perlu membuat ConfigMap dengan CA akar dan memasangnya di pod Anda.

Menggunakan IP eksternal untuk sertifikat server

Untuk terhubung dengan TLS melalui internet, sertifikat server broker MQTT harus memiliki nama host eksternal atau alamat IP sebagai SAN. Dalam produksi, informasi ini biasanya merupakan nama DNS atau alamat IP terkenal. Selama dev/test, Anda mungkin tidak tahu nama host atau IP eksternal apa yang ditetapkan sebelum penyebaran. Untuk mengatasi masalah ini, sebarkan pendengar tanpa sertifikat server terlebih dahulu, buat sertifikat server dan rahasia dengan IP eksternal, dan impor rahasia ke pendengar.

Jika Anda mencoba menyebarkan contoh listener manual-tls-listener TLS tetapi rahasia server-cert-secret Kubernetes yang direferensikan tidak ada, layanan terkait akan dibuat, tetapi pod tidak dimulai. Layanan dibuat karena operator perlu memesan IP eksternal untuk pendengar.

kubectl get svc mqtts-endpoint -n azure-iot-operations
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
mqtts-endpoint         LoadBalancer   10.X.X.X        172.X.X.X     8885:30674/TCP      1m15s

Perilaku ini diharapkan saat kami mengimpor sertifikat server. Log manajer kesehatan menyebutkan bahwa broker MQTT sedang menunggu sertifikat server.

kubectl logs -l app=health-manager -n azure-iot-operations
...
<6>2023-11-06T21:36:13.634Z [INFO] [1] - Server certificate server-cert-secret not found. Awaiting creation of secret.

Catatan

Umumnya, dalam sistem terdistribusi, log pod tidak deterministik dan harus digunakan dengan hati-hati. Cara yang tepat untuk informasi seperti ini muncul adalah melalui peristiwa Kubernetes dan status sumber daya kustom, yang ada di backlog. Pertimbangkan langkah sebelumnya sebagai solusi sementara.

Meskipun pod frontend tidak aktif, IP eksternal sudah tersedia.

kubectl get svc mqtts-endpoint -n azure-iot-operations
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
mqtts-endpoint         LoadBalancer   10.X.X.X        172.X.X.X     8885:30674/TCP      1m15s

Dari sini, ikuti langkah-langkah yang sama seperti yang ditunjukkan sebelumnya untuk membuat sertifikat server dengan IP eksternal ini di --san dan membuat rahasia Kubernetes dengan cara yang sama. Setelah rahasia dibuat, rahasia secara otomatis diimpor ke pendengar.