Megosztás a következőn keresztül:


MQTT-közvetítőhöz való kapcsolódás tesztelése MQTT-ügyfelekkel

Fontos

Ez a lap útmutatást tartalmaz az Azure IoT Operations-összetevők Kubernetes-alapú üzembehelyezési jegyzékek használatával történő kezeléséhez, amely előzetes verzióban érhető el. Ez a funkció számos korlátozással rendelkezik, és nem használható éles számítási feladatokhoz.

A bétaverziójú, előzetes verziójú vagy másként még általánosan nem elérhető Azure-szolgáltatások jogi feltételeit lásd: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Ez a cikk különböző módszereket mutat be az MQTT-közvetítőkkel való kapcsolat tesztelésére egy nem gyártási környezetben lévő MQTT-ügyfelekkel.

Alapértelmezés szerint egy MQTT-közvetítő:

Figyelemfelhívás

Éles helyzetekben TLS- és szolgáltatásfiók-hitelesítéssel biztonságossá teheti az IoT-megoldást. További információk:

Mielőtt hozzákezdene, telepítse vagy konfigurálja az Azure IoT Operationst. Az alábbi beállításokkal tesztelje az MQTT-közvetítőhöz való kapcsolódást egy nem gyártási környezetben lévő MQTT-ügyfelekkel.

Csatlakozás az alapértelmezett figyelőhöz a fürtben

Az első lehetőség a fürtből való csatlakozás. Ez a beállítás az alapértelmezett konfigurációt használja, és nem igényel további frissítéseket. Az alábbi példák bemutatják, hogyan csatlakozhat a fürtből egyszerű Alpine Linux és egy gyakran használt MQTT-ügyfél használatával a szolgáltatásfiók és az alapértelmezett főtanúsítvány (CA) tanúsítvány használatával.

Töltse le az mqtt-client.yaml üzembe helyezést a GitHub-mintaadattárból.

Fontos

Ne használja az MQTT-ügyfelet éles környezetben. Az ügyfél csak tesztelési célokra szolgál.

wget https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml -O mqtt-client.yaml

Az üzembehelyezési fájl alkalmazása a kubectl használatával:

kubectl apply -f mqtt-client.yaml
pod/mqtt-client created

A pod futtatása kubectl exec után parancsokat futtathat a podon belül.

Ha például közzé szeretne tenni egy üzenetet a közvetítőnek, nyisson meg egy héjat a podon belül:

kubectl exec --stdin --tty mqtt-client --namespace azure-iot-operations -- sh

A pod héján belül futtassa a következő parancsot, hogy közzétegye az üzenetet a közvetítőnek:

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)

A kimenetnek a következőképpen kell kinéznie:

Client (null) sending CONNECT
Client (null) received CONNACK (0)
Client (null) sending PUBLISH (d0, q0, r0, m1, 'world', ... (5 bytes))
Client (null) sending DISCONNECT

A Mosquitto-ügyfél a csatlakoztatott szolgáltatásfiók-jogkivonatot /var/run/secrets/tokens/broker-sat használja a közvetítővel való hitelesítéshez. A jogkivonat 24 órán át érvényes. Az ügyfél az alapértelmezett legfelső szintű hitelesítésszolgáltatói tanúsítványt /var/run/certs/ca.crt is használja a közvetítő TLS-tanúsítványláncának ellenőrzéséhez.

Tipp.

A kubectl használatával letöltheti az alapértelmezett legfelső szintű hitelesítésszolgáltatói tanúsítványt más ügyfelekkel való használatra. Az alapértelmezett legfelső szintű hitelesítésszolgáltatói tanúsítvány letöltése például egy következő nevű ca.crtfájlba:

kubectl get configmap azure-iot-operations-aio-ca-trust-bundle -n azure-iot-operations -o jsonpath='{.data.ca\.crt}' > ca.crt

A témakörre való feliratkozáshoz futtassa a következő parancsot:

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)

A kimenetnek a következőképpen kell kinéznie:

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

A Mosquitto-ügyfél ugyanazt a szolgáltatásfiók-jogkivonatot és fő ca-tanúsítványt használja a közvetítővel való hitelesítéshez és a témakörre való feliratkozáshoz.

A pod eltávolításához futtassa a parancsot kubectl delete pod mqtt-client -n azure-iot-operations.

Ügyfelek csatlakoztatása a fürtön kívülről

Mivel az alapértelmezett közvetítőfigyelő a ClusterIp szolgáltatástípusra van állítva, közvetlenül nem csatlakozhat a közvetítőhöz a fürtön kívülről. A belső IoT Operations-összetevők közötti kommunikáció véletlen megszakadásának megakadályozása érdekében javasoljuk, hogy az alapértelmezett figyelőt ne módosítsa és dedikálta az IoT Operations belső kommunikációja számára. Bár létrehozhat egy külön Kubernetes-szolgáltatást LoadBalancer a fürt IP-szolgáltatásának elérhetővé tétele érdekében, jobb, ha egy különálló figyelőt hoz létre különböző beállításokkal, például az 1883-ban és 8883-ban használt gyakori MQTT-portokkal, hogy elkerülje a félreértéseket és a lehetséges biztonsági kockázatokat.

Csomópontport

A kapcsolat tesztelésének legegyszerűbb módja a NodePort szolgáltatástípus használata a figyelőben. Ezzel a módszerrel csatlakozhat a <nodeExternalIP>:<NodePort> Kubernetes dokumentációjában látható módon.

Ha például egy új közvetítőfigyelőt szeretne létrehozni az 1884-es porton (31884-es csomópontport) a szolgáltatástípussal, a NodePort szolgáltatásnévvel aio-broker-nodeportés a figyeléssel, kövesse az alábbi lépéseket.

  1. Az Azure Portalon nyissa meg az IoT Operations-példányt.

  2. Az Összetevők területen válassza az MQTT Broker lehetőséget.

  3. Válassza az MQTT-közvetítő figyelőt a NodePort>Létrehozáshoz. Szolgáltatástípusonként csak egy figyelőt hozhat létre. Ha már rendelkezik ugyanahhoz a szolgáltatástípushoz tartozó figyelővel, további portokat adhat hozzá a meglévő figyelőhöz.

    Adja meg a következő beállításokat:

    Beállítás Érték
    Név aio-broker-nodeport
    Szolgáltatás neve Hagyja üresen vagy használja aio-broker-nodeport.
    Kikötő 1884
    Hitelesítés Válasszon a meglévő vagy a Nincs lehetőség közül.
    Engedélyezés Válasszon a meglévő vagy a Nincs lehetőség közül.
    Protokoll Válassza az MQTT lehetőséget.
    Csomópontport 31884
  4. TLS-beállítások hozzáadása a figyelőhöz a TLS Ez a lépés nem szükséges, ha nincs szükség TLS-re a teszteléshez. További információ: BrokerListener.

  5. A figyelő létrehozásához válassza a Létrehozás lehetőséget .

Feljegyzés

A Kubernetes alapértelmezés szerint a csomópont portszámának 30000 és 32767 közötti tartományban kell lennie.

Kérje le a csomópont külső IP-címét:

kubectl get nodes -o yaml | grep ExternalIP -C 1

A kimenetnek a következőképpen kell kinéznie:

    - address: 104.197.41.11
      type: ExternalIP
    allocatable:
--
    - address: 23.251.152.56
      type: ExternalIP
    allocatable:
...

A közvetítőhöz való csatlakozáshoz használja a külső IP-címet és a csomópontportot. Ha például közzé szeretne tenni egy üzenetet a közvetítőnek:

mosquitto_pub --host <EXTERNAL_IP> --port 31884 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings

Ha nincs külső IP-cím a kimenetben, előfordulhat, hogy olyan Kubernetes-beállítást használ, amely alapértelmezés szerint nem teszi elérhetővé a csomópont külső IP-címét, például a k3s, a k3d vagy a minikube számos beállítását. Ebben az esetben elérheti a közvetítőt a belső IP-címmel és a csomópontporttal az ugyanazon a hálózaton lévő gépekről. Például a csomópont belső IP-címének lekéréséhez:

kubectl get nodes -o yaml | grep InternalIP -C 1

A kimenetnek a következőképpen kell kinéznie:

    - address: 172.19.0.2
      type: InternalIP
    allocatable:

Ezután használja a belső IP-címet és a csomópontportot a közvetítőhöz való csatlakozáshoz egy ugyanazon fürtben lévő gépről. Ha a Kubernetes helyi gépen fut, például egycsomópontos k3-ak esetén, gyakran használhatja localhost a belső IP-cím helyett. Ha a Kubernetes docker-tárolóban fut, például k3d-vel, a belső IP-cím a tároló IP-címének felel meg, és a gazdagépről elérhetőnek kell lennie.

Terheléselosztóval

Egy másik módja annak, hogy tegye közzé a közvetítő az interneten, hogy használja a LoadBalancer szolgáltatás típusát. Ez a módszer összetettebb, és több konfigurációt igényelhet, például a porttovábbítás beállítását.

Ha például egy új közvetítőfigyelőt szeretne létrehozni a szolgáltatástípussal, a szolgáltatásnévvel LoadBalancerés a aio-broker-loadbalancer figyeléssel az 1883-es porton, kövesse az alábbi lépéseket.

  1. Az Azure Portalon nyissa meg az IoT Operations-példányt.

  2. Az Összetevők területen válassza az MQTT Broker lehetőséget.

  3. Válassza az MQTT-közvetítő figyelőt a NodePort>Létrehozáshoz. Szolgáltatástípusonként csak egy figyelőt hozhat létre. Ha már rendelkezik ugyanahhoz a szolgáltatástípushoz tartozó figyelővel, további portokat adhat hozzá a meglévő figyelőhöz.

    Adja meg a következő beállításokat:

    Beállítás Érték
    Név aio-broker-loadbalancer
    Szolgáltatás neve Hagyja üresen vagy használja aio-broker-loadbalancer.
    Kikötő 1883
    Hitelesítés Válasszon a meglévő vagy a Nincs lehetőség közül.
    Engedélyezés Válasszon a meglévő vagy a Nincs lehetőség közül.
    Protokoll Válassza az MQTT lehetőséget.
  4. TLS-beállítások hozzáadása a figyelőhöz a TLS Ez a lépés nem szükséges, ha nincs szükség TLS-re a teszteléshez. További információ: BrokerListener.

  5. A figyelő létrehozásához válassza a Létrehozás lehetőséget .

  6. A figyelő létrehozásához válassza a Létrehozás lehetőséget .

Kérje le a közvetítő szolgáltatásának külső IP-címét:

kubectl get service aio-broker-loadbalancer --namespace azure-iot-operations

Ha a kimenet az alábbi példához hasonlóan néz ki:

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

Ezután egy külső IP-cím lett hozzárendelve a terheléselosztó szolgáltatáshoz. A külső IP-cím és a port használatával csatlakozhat a közvetítőhöz. Ha például közzé szeretne tenni egy üzenetet a közvetítőnek:

mosquitto_pub --host <EXTERNAL_IP> --port 1883 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings

Ha a külső IP-cím nincs hozzárendelve, előfordulhat, hogy porttovábbítást vagy virtuális kapcsolót kell használnia a közvetítő eléréséhez.

Porttovábbítás használata

Minikube, kind és egyéb fürtemulációs rendszerek esetén előfordulhat, hogy a külső IP-cím nem lesz automatikusan hozzárendelve. Előfordulhat például, hogy az állapot függőben van.

  1. A közvetítő eléréséhez továbbítja a közvetítő figyelőportot a gazdagépnek.

    # 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>:1883
    
  2. Hagyja futni a porttovábbítási parancsot a terminálon.

  3. Csatlakozzon a gazdagépporton lévő közvetítőhöz ugyanazzal a hitelesítéssel és TLS-konfigurációval, mint a példa porttovábbítás nélkül.

A minikube-ról további információt a Porttovábbítás használata fürtbeli alkalmazásokhoz című témakörben talál.

Porttovábbítás az AKS Edge Essentialsen

Az AKS Edge Essentials esetében még néhány lépést végre kell hajtania. Az AKS Edge Essentials használatával előfordulhat, hogy a külső IP-cím lekérése nem elegendő a közvetítőhöz való csatlakozáshoz. Előfordulhat, hogy be kell állítania a porttovábbítást, és meg kell nyitnia a portot a tűzfalon, hogy engedélyezze a közvetítő szolgáltatásának forgalmát.

  1. Először kérje le a közvetítő terheléselosztó figyelőjének külső IP-címét:

    kubectl get service broker-loadbalancer --namespace azure-iot-operations
    

    A kimenetnek a következő példához hasonlóan kell kinéznie:

    NAME                    TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
    broker-loadbalancer     LoadBalancer   10.x.x.x       192.168.0.4   1883:30366/TCP   14h
    
  2. Porttovábbítás beállítása a szolgáltatásnak a broker-loadbalancer külső IP-címen 192.168.0.4 és porton 1883:

    netsh interface portproxy add v4tov4 listenport=1883 connectport=1883 connectaddress=192.168.0.4
    
  3. Nyissa meg a portot a tűzfalon a közvetítő szolgáltatása felé történő forgalom engedélyezéséhez:

    New-NetFirewallRule -DisplayName "AIO MQTT Broker" -Direction Inbound -Protocol TCP -LocalPort 1883 -Action Allow
    
  4. A gazdagép nyilvános IP-címével csatlakozzon az MQTT-közvetítőhöz.

A porttovábbításról további információt a Kubernetes-szolgáltatások külső eszközöknek való elérhetővé tétele című témakörben talál.

Hozzáférés a localhoston keresztül

Egyes Kubernetes-disztribúciók a fürtkonfiguráció részeként elérhetővé tehetik az MQTT-közvetítőt a gazdarendszer (localhost) portján. Ezzel a módszerrel megkönnyítheti az ugyanazon gazdagépen lévő ügyfelek számára az MQTT-közvetítő elérését.

Létrehozhat például egy k3d-fürtöt, amely leképezi az MQTT-közvetítő alapértelmezett MQTT-portját 1883-ra localhost:1883:

k3d cluster create --port '1883:1883@loadbalancer'

Vagy meglévő fürt frissítése:

k3d cluster edit <CLUSTER_NAME> --port-add '1883:1883@loadbalancer'

Ezután használja localhost a portot a közvetítőhöz való csatlakozáshoz. Ha például közzé szeretne tenni egy üzenetet a közvetítőnek:

mosquitto_pub --host localhost --port 1883 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings

Csak a TLS és a hitelesítés kikapcsolása teszteléshez

Az MQTT-közvetítő alapértelmezés szerint TLS- és szolgáltatásfiók-hitelesítést használ, hogy olyan biztonságos, alapértelmezés szerinti élményt nyújtson, amely minimalizálja az IoT-megoldás véletlen kitettségét a támadók számára. Nem szabad kikapcsolnia a TLS-t és a hitelesítést éles környezetben. Ha az MQTT-közvetítőt hitelesítés és TLS nélkül teszi közzé az interneten, az jogosulatlan hozzáféréshez és akár elosztott szolgáltatásmegtagadási támadásokhoz is vezethet.

Figyelmeztetés

Ha tisztában van a kockázatokkal, és nem biztonságos portot kell használnia egy jól ellenőrzött környezetben, kikapcsolhatja a TLS-t és a hitelesítést tesztelési célokra, ha eltávolítja a tls beállításokat a authenticationRef figyelő konfigurációjából.

  1. Az Azure Portalon nyissa meg az IoT Operations-példányt.

  2. Az Összetevők területen válassza az MQTT Broker lehetőséget.

  3. Válassza az MQTT-közvetítő figyelőt a NodePort vagy az MQTT-közvetítő figyelője számára a LoadBalancer>Create esetében. Szolgáltatástípusonként csak egy figyelőt hozhat létre. Ha már rendelkezik ugyanahhoz a szolgáltatástípushoz tartozó figyelővel, további portokat adhat hozzá a meglévő figyelőhöz.

    Adja meg a következő beállításokat:

    Beállítás Érték
    Név Adja meg a figyelő nevét.
    Szolgáltatás neve Adjon meg egy szolgáltatásnevet.
    Kikötő Adjon meg egy portszámot.
    Hitelesítés Válassza a Nincs lehetőséget.
    Engedélyezés Válassza a Nincs lehetőséget.
    Protokoll Válassza az MQTT lehetőséget.
    Csomópontport Adjon meg egy 30000 és 32767 közötti számot csomópontport használata esetén.
  4. A figyelő létrehozásához válassza a Létrehozás lehetőséget .