Sdílet prostřednictvím


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 typu LoadBalancer nebo NodePort.
  • 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:

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-operationspří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-nodeportslužby a nasloucháním na portu 1884 (port 31884 uzlu), postupujte takto.

  1. Na webu Azure Portal přejděte do vaší instance ioT Operations.

  2. V části Součásti vyberte Zprostředkovatele MQTT.

  3. 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
  4. 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.

  5. 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-loadbalancerslužby a nasloucháním na portu 1883, postupujte takto.

  1. Na webu Azure Portal přejděte do vaší instance ioT Operations.

  2. V části Součásti vyberte Zprostředkovatele MQTT.

  3. 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.
  4. 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.

  5. Vyberte Vytvořit a vytvořte naslouchací proces.

  6. 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í.

  1. 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
    
  2. Nechte příkaz pro přesměrování portů spuštěný v terminálu.

  3. 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.

  1. 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
    
  2. Nastavte přesměrování portů do broker-loadbalancer služby na externí IP adrese 192.168.0.4 a portu 1883:

    netsh interface portproxy add v4tov4 listenport=1883 connectport=1883 connectaddress=192.168.0.4
    
  3. 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
    
  4. 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.

  1. Na webu Azure Portal přejděte do vaší instance ioT Operations.

  2. V části Součásti vyberte Zprostředkovatele MQTT.

  3. 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.
  4. Vyberte Vytvořit a vytvořte naslouchací proces.