Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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ő:
-
A Transport Layer Security (TLS) protokollbarát figyelőt helyez üzembe az 18883-as
ClusterIp
porton szolgáltatástípusként.ClusterIp
azt jelenti, hogy a közvetítő csak a Kubernetes-fürtből érhető el. Ha a közvetítőt a fürtön kívülről szeretné elérni, konfigurálnia kell egy vagy több típusúLoadBalancer
NodePort
szolgáltatást. - Elfogadja a Kubernetes-szolgáltatásfiókokat a fürtön belüli kapcsolatok hitelesítéséhez . Ha a fürtön kívülről szeretne csatlakozni, egy másik hitelesítési módszert kell konfigurálnia.
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:
- A TLS konfigurálása automatikus tanúsítványkezeléssel az MQTT-kommunikáció biztonságossá tételéhez az MQTT-közvetítőben.
- A hitelesítés konfigurálása az MQTT-közvetítőben.
- A Kubernetes-szolgáltatásokat külső eszközök számára teheti elérhetővé porttovábbítással vagy virtuális kapcsolóval az Azure Kubernetes Services (AKS) Edge Essentials használatával.
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.crt
fá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.
Az Azure Portalon nyissa meg az IoT Operations-példányt.
Az Összetevők területen válassza az MQTT Broker lehetőséget.
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.
Figyelemfelhívás
Ha a hitelesítést Nincs értékre állítja, és nem konfigurálja a TLS-t, kikapcsolja a hitelesítést és a TLS-t csak tesztelési célokra.
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 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.
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.
Az Azure Portalon nyissa meg az IoT Operations-példányt.
Az Összetevők területen válassza az MQTT Broker lehetőséget.
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.
Figyelemfelhívás
Ha a hitelesítést Nincs értékre állítja, és nem konfigurálja a TLS-t, kikapcsolja a hitelesítést és a TLS-t csak tesztelési célokra.
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. 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.
A figyelő létrehozásához válassza a Létrehozás lehetőséget .
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.
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
Hagyja futni a porttovábbítási parancsot a terminálon.
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.
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
Porttovábbítás beállítása a szolgáltatásnak a
broker-loadbalancer
külső IP-címen192.168.0.4
és porton1883
:netsh interface portproxy add v4tov4 listenport=1883 connectport=1883 connectaddress=192.168.0.4
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
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.
Az Azure Portalon nyissa meg az IoT Operations-példányt.
Az Összetevők területen válassza az MQTT Broker lehetőséget.
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.
Figyelemfelhívás
Ha a hitelesítést Nincs értékre állítja, és nem konfigurálja a TLS-t, kikapcsolja a hitelesítést és a TLS-t csak tesztelési célokra.
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. A figyelő létrehozásához válassza a Létrehozás lehetőséget .