Testování připojení ke zprostředkovateli MQTT pomocí klientů MQTT
Důležité
Tato stránka obsahuje pokyny ke správě komponent operací Azure IoT pomocí manifestů nasazení Kubernetes, které jsou ve verzi Preview. Tato funkce je poskytována s několika omezeními a neměla by se používat pro produkční úlohy.
Právní podmínky, které platí pro funkce Azure, které jsou ve verzi beta, verzi Preview nebo které zatím nejsou veřejně dostupné, najdete v Dodatečných podmínkách použití pro Microsoft Azure verze Preview.
Tento článek ukazuje různé způsoby testování připojení ke zprostředkovateli MQTT s klienty MQTT v neprodukčním prostředí.
Ve výchozím nastavení zprostředkovatele MQTT:
- Nasadí naslouchací proces protokolu TLS (Transport Layer Security) na portu 18883 s typem
ClusterIp
služby.ClusterIp
znamená, že zprostředkovatel je přístupný jenom z clusteru Kubernetes. Pokud chcete získat přístup ke zprostředkovateli mimo cluster, musíte nakonfigurovat službu typuLoadBalancer
neboNodePort
. - Přijímá účty služby Kubernetes pro ověřování pro připojení z clusteru. Pokud se chcete připojit mimo cluster, musíte nakonfigurovat jinou metodu ověřování.
Upozornění
V produkčních scénářích použijte ověřování účtů TLS a služeb k zabezpečení vašeho řešení IoT. Další informace naleznete v tématu:
- Nakonfigurujte protokol TLS s automatickou správou certifikátů pro zabezpečení komunikace MQTT ve zprostředkovateli MQTT.
- Nakonfigurujte ověřování v zprostředkovateli MQTT.
- Zpřístupnění služeb Kubernetes externím zařízením pomocí přesměrování portů nebo virtuálního přepínače se službou Azure Kubernetes Services (AKS) Edge Essentials
Než začnete, nainstalujte nebo nakonfigurujte operace Azure IoT. Pomocí následujících možností otestujte připojení ke zprostředkovateli MQTT s klienty MQTT v neprodukčním prostředí.
Připojení k výchozímu naslouchacímu procesu v clusteru
První možností je připojit se z clusteru. Tato možnost používá výchozí konfiguraci a nevyžaduje žádné další aktualizace. Následující příklady ukazují, jak se připojit z clusteru pomocí prostého Alpine Linuxu a běžně používaného klienta MQTT pomocí účtu služby a výchozího kořenového certifikátu certifikační autority (CA).
mqtt-client.yaml
Stáhněte nasazení z ukázkového úložiště GitHubu.
Důležité
Nepoužívejte klienta MQTT v produkčním prostředí. Klient je určen pouze pro účely testování.
wget https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml -O mqtt-client.yaml
Použijte soubor nasazení s kubectl:
kubectl apply -f mqtt-client.yaml
pod/mqtt-client created
Po spuštění podu použijte kubectl exec
příkazy uvnitř podu.
Pokud chcete například publikovat zprávu do zprostředkovatele, otevřete prostředí uvnitř podu:
kubectl exec --stdin --tty mqtt-client --namespace azure-iot-operations -- sh
V prostředí podu spusťte následující příkaz, který publikuje zprávu do zprostředkovatele:
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)
Výstup by měl vypadat zhruba jako v tomto příkladu:
Client (null) sending CONNECT
Client (null) received CONNACK (0)
Client (null) sending PUBLISH (d0, q0, r0, m1, 'world', ... (5 bytes))
Client (null) sending DISCONNECT
Klient Mosquitto používá token účtu služby připojený /var/run/secrets/tokens/broker-sat
k ověření u zprostředkovatele. Token je platný 24 hodin. Klient také používá výchozí kořenový certifikát certifikační autority připojený k /var/run/certs/ca.crt
ověření řetězu certifikátů TLS zprostředkovatele.
Tip
Pomocí kubectl si můžete stáhnout výchozí kořenový certifikát certifikační autority, který se má použít s jinými klienty. Pokud chcete například stáhnout výchozí kořenový certifikát certifikační autority do souboru s názvem ca.crt
:
kubectl get configmap azure-iot-operations-aio-ca-trust-bundle -n azure-iot-operations -o jsonpath='{.data.ca\.crt}' > ca.crt
Pokud se chcete přihlásit k odběru tématu, spusťte následující příkaz:
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)
Výstup by měl vypadat zhruba jako v tomto příkladu:
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
Klient Mosquitto používá stejný token účtu služby a kořenový certifikát certifikační autority k ověření u zprostředkovatele a přihlášení k odběru tématu.
Pokud chcete pod odebrat, spusťte kubectl delete pod mqtt-client -n azure-iot-operations
příkaz .
Připojení klientů mimo cluster
Vzhledem k tomu, že výchozí naslouchací proces zprostředkovatele je nastavený na ClusterIp
typ služby, nemůžete se k zprostředkovateli připojit přímo mimo cluster. Pokud chcete zabránit neúmyslnému přerušení komunikace mezi interními komponentami operací IoT, doporučujeme ponechat výchozí naslouchací proces nezměněný a vyhrazený pro interní komunikaci operací IoT. I když je možné vytvořit samostatnou službu Kubernetes LoadBalancer
pro zveřejnění služby IP clusteru, je lepší vytvořit samostatný naslouchací proces s různými nastaveními, jako jsou běžnější porty MQTT 1883 a 8883, abyste se vyhnuli nejasnostem a potenciálním bezpečnostním rizikům.
Port uzlu
Nejjednodušší způsob, jak otestovat připojení, je použít NodePort
typ služby v naslouchacím procesu. Pomocí této metody se můžete <nodeExternalIP>:<NodePort>
připojit, jak je znázorněno v dokumentaci Kubernetes.
Pokud například chcete vytvořit nový naslouchací proces zprostředkovatele s typem NodePort
služby, názvem aio-broker-nodeport
služby a nasloucháním na portu 1884 (port 31884 uzlu), postupujte takto.
Na webu Azure Portal přejděte do vaší instance ioT Operations.
V části Součásti vyberte Zprostředkovatele MQTT.
Vyberte naslouchací proces zprostředkovatele MQTT pro vytvoření NodePortu>. Pro každý typ služby můžete vytvořit pouze jeden naslouchací proces. Pokud už máte naslouchací proces stejného typu služby, můžete do existujícího naslouchacího procesu přidat další porty.
Upozornění
Nastavení ověřování na None (Žádné ) a ne konfigurace protokolu TLS vypne ověřování a TLS pouze pro účely testování.
Zadejte následující nastavení:
Nastavení Hodnota Name aio-broker-nodeport
Service name Nechte prázdné nebo používejte aio-broker-nodeport
.Port 1884 Ověřování Vyberte možnost z existujícího nebo žádného. Autorizace Vyberte možnost z existujícího nebo žádného. Protokol Zvolte MQTT. Port uzlu 31884 Nastavení protokolu TLS přidejte do naslouchacího procesu tak, že na portu vyberete Přidat protokol TLS>. Tento krok se nevyžaduje, pokud pro testování nepotřebujete protokol TLS. Další informace naleznete v tématu BrokerListener.
Vyberte Vytvořit a vytvořte naslouchací proces.
Poznámka:
Ve výchozím nastavení Kubernetes musí být číslo portu uzlu v rozsahu 3 0000 až 32767.
Získejte externí IP adresu uzlu:
kubectl get nodes -o yaml | grep ExternalIP -C 1
Výstup by měl vypadat zhruba jako v tomto příkladu:
- address: 104.197.41.11
type: ExternalIP
allocatable:
--
- address: 23.251.152.56
type: ExternalIP
allocatable:
...
Pro připojení ke zprostředkovateli použijte externí IP adresu a port uzlu. Pokud chcete například publikovat zprávu do zprostředkovatele:
mosquitto_pub --host <EXTERNAL_IP> --port 31884 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings
Pokud ve výstupu není žádná externí IP adresa, můžete použít nastavení Kubernetes, které ve výchozím nastavení nezpřístupňuje externí IP adresu uzlu, například mnoho nastavení k3s, k3d nebo minikube. V takovém případě můžete k zprostředkovateli přistupovat s interní IP adresou spolu s portem uzlu z počítačů ve stejné síti. Pokud například chcete získat interní IP adresu uzlu:
kubectl get nodes -o yaml | grep InternalIP -C 1
Výstup by měl vypadat zhruba jako v tomto příkladu:
- address: 172.19.0.2
type: InternalIP
allocatable:
Pak se pomocí interní IP adresy a portu uzlu připojte ke zprostředkovateli z počítače v rámci stejného clusteru. Pokud je Kubernetes spuštěný na místním počítači, například s k3s s jedním uzlem, můžete místo interní IP adresy často používat localhost
. Pokud kubernetes běží v kontejneru Dockeru, jako je k3d, interní IP adresa odpovídá IP adrese kontejneru a měla by být dostupná z hostitelského počítače.
Load Balancer
Dalším způsobem, jak zpřístupnit zprostředkovatele na internetu, je použít LoadBalancer
typ služby. Tato metoda je složitější a může vyžadovat více konfigurace, například nastavení přesměrování portů.
Pokud například chcete vytvořit nový naslouchací proces zprostředkovatele s typem LoadBalancer
služby, názvem aio-broker-loadbalancer
služby a nasloucháním na portu 1883, postupujte takto.
Na webu Azure Portal přejděte do vaší instance ioT Operations.
V části Součásti vyberte Zprostředkovatele MQTT.
Vyberte naslouchací proces zprostředkovatele MQTT pro vytvoření NodePortu>. Pro každý typ služby můžete vytvořit pouze jeden naslouchací proces. Pokud už máte naslouchací proces stejného typu služby, můžete do existujícího naslouchacího procesu přidat další porty.
Upozornění
Nastavení ověřování na None (Žádné ) a ne konfigurace protokolu TLS vypne ověřování a TLS pouze pro účely testování.
Zadejte následující nastavení:
Nastavení Hodnota Name aio-broker-loadbalancer
Service name Nechte prázdné nebo používejte aio-broker-loadbalancer
.Port 1883 Ověřování Vyberte možnost z existujícího nebo žádného. Autorizace Vyberte možnost z existujícího nebo žádného. Protokol Zvolte MQTT. Nastavení protokolu TLS přidejte do naslouchacího procesu tak, že na portu vyberete Přidat protokol TLS>. Tento krok se nevyžaduje, pokud pro testování nepotřebujete protokol TLS. Další informace naleznete v tématu BrokerListener.
Vyberte Vytvořit a vytvořte naslouchací proces.
Vyberte Vytvořit a vytvořte naslouchací proces.
Získejte externí IP adresu pro službu zprostředkovatele:
kubectl get service aio-broker-loadbalancer --namespace azure-iot-operations
Pokud výstup vypadá podobně jako v následujícím příkladu:
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
Pak se službě nástroje pro vyrovnávání zatížení přiřadila externí IP adresa. Můžete použít externí IP adresu a port pro připojení ke zprostředkovateli. Pokud chcete například publikovat zprávu do zprostředkovatele:
mosquitto_pub --host <EXTERNAL_IP> --port 1883 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings
Pokud externí IP adresa není přiřazená, možná budete muset pro přístup ke zprostředkovateli použít přesměrování portů nebo virtuální přepínač.
Použití přesměrování portů
U systémů minikube, kind a jiných emulací clusteru nemusí být externí IP adresa přiřazena automaticky. Například stav se může zobrazit jako Čeká na vyřízení.
Pokud chcete získat přístup ke zprostředkovateli, přesměrujte port naslouchacího procesu zprostředkovatele hostiteli.
# 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
Nechte příkaz pro přesměrování portů spuštěný v terminálu.
Připojte se ke zprostředkovateli na portu hostitele se stejnou konfigurací ověřování a protokolu TLS jako v příkladu bez přesměrování portů.
Další informace o minikube naleznete v tématu Použití přesměrování portů pro přístup k aplikacím v clusteru.
Předávání portů v AKS Edge Essentials
V případě AKS Edge Essentials musíte provést několik dalších kroků. S AKS Edge Essentials nemusí být získání externí IP adresy dostatečné pro připojení ke zprostředkovateli. Možná budete muset nastavit přesměrování portů a otevřít port v bráně firewall, aby se umožnil provoz do služby zprostředkovatele.
Nejprve získejte externí IP adresu naslouchacího procesu nástroje pro vyrovnávání zatížení zprostředkovatele:
kubectl get service broker-loadbalancer --namespace azure-iot-operations
Výstup by měl vypadat podobně jako v následujícím příkladu:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE broker-loadbalancer LoadBalancer 10.x.x.x 192.168.0.4 1883:30366/TCP 14h
Nastavte přesměrování portů do
broker-loadbalancer
služby na externí IP adrese192.168.0.4
a portu1883
:netsh interface portproxy add v4tov4 listenport=1883 connectport=1883 connectaddress=192.168.0.4
Otevřete port v bráně firewall a povolte provoz do služby zprostředkovatele:
New-NetFirewallRule -DisplayName "AIO MQTT Broker" -Direction Inbound -Protocol TCP -LocalPort 1883 -Action Allow
Pomocí veřejné IP adresy hostitele se připojte ke zprostředkovateli MQTT.
Další informace o předávání portů najdete v tématu Zveřejnění služeb Kubernetes externím zařízením.
Přístup přes localhost
Některé distribuce Kubernetes můžou v rámci konfigurace clusteru vystavit zprostředkovatele MQTT na port v hostitelském systému (localhost
). Tento přístup usnadňuje klientům na stejném hostiteli přístup ke zprostředkovateli MQTT.
Pokud například chcete vytvořit cluster k3d, který mapuje výchozí port MQTT zprostředkovatele MQTT 1883 na localhost:1883
:
k3d cluster create --port '1883:1883@loadbalancer'
Nebo aktualizovat existující cluster:
k3d cluster edit <CLUSTER_NAME> --port-add '1883:1883@loadbalancer'
Pak se pomocí localhost
portu připojte ke zprostředkovateli. Pokud chcete například publikovat zprávu do zprostředkovatele:
mosquitto_pub --host localhost --port 1883 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings
Vypněte pouze protokol TLS a ověřování pro testování.
Důvodem, proč zprostředkovatel MQTT ve výchozím nastavení používá ověřování účtů TLS a služeb, je poskytnout zabezpečené výchozí prostředí, které minimalizuje neúmyslné vystavení vašeho řešení IoT útočníkům. V produkčním prostředí byste neměli vypínat protokol TLS a ověřování. Zveřejnění zprostředkovatele MQTT na internet bez ověřování a tls může vést k neoprávněnému přístupu a dokonce i k distribuovaným útokům na dostupnost služby.
Upozorňující
Pokud rozumíte rizikům a potřebujete používat nezabezpečený port v dobře řízeném prostředí, můžete pro účely testování vypnout protokol TLS a ověřování odebráním tls
nastavení authenticationRef
z konfigurace naslouchacího procesu.
Na webu Azure Portal přejděte do vaší instance ioT Operations.
V části Součásti vyberte Zprostředkovatele MQTT.
Pro naslouchací proces zprostředkovatele NodePort nebo MQTT vyberte naslouchací proces Zprostředkovatele MQTT pro vytvoření loadbalanceru>. Pro každý typ služby můžete vytvořit pouze jeden naslouchací proces. Pokud už máte naslouchací proces stejného typu služby, můžete do existujícího naslouchacího procesu přidat další porty.
Upozornění
Nastavení ověřování na None (Žádné ) a ne konfigurace protokolu TLS vypne ověřování a TLS pouze pro účely testování.
Zadejte následující nastavení:
Nastavení Hodnota Name Zadejte název naslouchacího procesu. Service name Zadejte název služby. Port Zadejte číslo portu. Ověřování Zvolte Žádné. Autorizace Zvolte Žádné. Protokol Zvolte MQTT. Port uzlu Zadejte číslo od 30000 do 32767, pokud používáte port uzlu. Vyberte Vytvořit a vytvořte naslouchací proces.