Zabezpečení komunikace zprostředkovatele MQTT pomocí BrokerListener
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.
BrokerListener odpovídá koncovému bodu sítě, který zprostředkovatele zpřístupňuje klientům přes síť. Pro každého zprostředkovatele můžete mít jeden nebo více prostředků BrokerListener s více porty a jiným řízením přístupu.
Každý port BrokerListener může mít vlastní ověřovací a autorizační pravidla, která definují, kdo se může připojit na daném portu naslouchacího procesu a jaké akce můžou u zprostředkovatele provádět. Prostředky BrokerAuthentication a BrokerAuthorization můžete použít k určení zásad řízení přístupu pro každý port naslouchacího procesu. Tato flexibilita umožňuje jemně vyladit oprávnění a role pro klienty MQTT na základě jejich potřeb a případů použití.
Tip
Výchozí nasazení zprostředkovatele MQTT je služba IP clusteru, která vyžaduje, aby se klienti připojili pomocí protokolu TLS a ověřili pomocí tokenů účtu služby. Klienti, kteří se připojují mimo cluster , potřebují před připojením další konfiguraci .
Naslouchací procesy zprostředkovatele mají následující charakteristiky:
- Název: Název naslouchacího procesu. Tento název je také název služby Kubernetes, pokud ho nepřepíšete.
- Typ služby: Můžete mít až tři naslouchací procesy, jeden na typ služby. Výchozí naslouchací proces je typ
ClusterIp
služby . - Porty: Každý naslouchací proces podporuje více portů. Porty nemůžou kolidovat s různými naslouchacími procesy.
- Odkazy na ověřování a autorizaci: BrokerAuthentication a BrokerAuthorization se konfigurují na port.
- TLS: Ruční nebo automatická konfigurace protokolu TLS se použije na port.
- Protokol: Pro každý port je možné povolit MQTT přes WebSockets .
Seznam všech dostupných nastavení najdete v referenčních informacích k rozhraní API naslouchacího procesu zprostředkovatele.
Výchozí brokerListener
Když nasadíte operace Azure IoT, nasazení vytvoří prostředek BrokerListener s názvem default
. Tento naslouchací proces se používá k šifrované interní komunikaci mezi komponentami operací Azure IoT. Výchozí naslouchací proces je součástí výchozího zprostředkovatele.
- Zveřejňuje službu ClusterIp na portu 18883.
- Vyžaduje, aby klienti používali ověřování účtu služby Kubernetes.
- Má automaticky spravovaný certifikát TLS.
- Nekonfiguruje žádné zásady autorizace klientů.
Upozornění
Aby nedošlo k narušení interní komunikace operací Azure IoT, ponechejte výchozí naslouchací proces beze změny a vyhrazený pro interní použití. Pro externí komunikaci vytvořte nový naslouchací proces. Pokud potřebujete použít službu ClusterIp, přidejte do výchozího naslouchacího procesu další porty beze změny jakéhokoli existujícího nastavení.
Zobrazení nebo úprava výchozího naslouchacího procesu:
Na webu Azure Portal přejděte k vaší instanci ioT Operations.
V části Součásti vyberte Zprostředkovatele MQTT.
V seznamu naslouchacího procesu zprostředkovatele vyberte výchozí naslouchací proces.
Zkontrolujte nastavení naslouchacího procesu, ale vyhněte se úpravám některého z existujících nastavení. Místo toho vytvořte nový port a podle potřeby ho nakonfigurujte.
Vyhněte se úpravám výchozího naslouchacího procesu zprostředkovatele.
Pokud chcete zabránit narušení interní komunikace operací Azure IoT, ponechejte výchozí naslouchací proces beze změny a vyhrazený pro interní použití. Pro externí komunikaci vytvořte nový naslouchací proces.
Vzhledem k tomu, že výchozí naslouchací proces zprostředkovatele používá typ ClusterIp a pro každý typ služby můžete mít pouze jeden naslouchací proces, přidejte do výchozího naslouchacího procesu další porty, aniž byste museli měnit některá existující nastavení, pokud potřebujete použít službu ClusterIp.
Vytvoření nových naslouchacích procesů zprostředkovatele
Pokud chcete vytvořit nový naslouchací proces, zadejte následující nastavení:
- Název: Název naslouchacího procesu. Tento název je také název služby Kubernetes, pokud ho nepřepíšete.
- Typ služby: Typ služby Kubernetes. Viz Typ služby.
- Porty: Seznam portů, které se mají naslouchat. Viz Porty.
- (Volitelné) Název služby: Přepište název služby Kubernetes. Viz Název služby.
Příklad: Vytvoření nového naslouchacího procesu se dvěma porty
Tento příklad ukazuje, jak vytvořit nový naslouchací proces s typem služby nástroje pro vyrovnávání zatížení. Prostředek BrokerListener definuje dva porty, které přijímají připojení MQTT z klientů.
- První port naslouchá na portu 1883 bez protokolu TLS a ověřování. Toto nastavení je vhodné jenom pro testování. Tuto konfiguraci nepoužívejte v produkčním prostředí.
- Druhý port naslouchá na portu 8883 s povoleným protokolem TLS a ověřováním. Připojit se můžou jenom ověření klienti s tokenem účtu služby Kubernetes. Protokol TLS je nastavený na automatický režim, pomocí nástroje cert-manager ke správě certifikátu serveru od výchozího vystavitele. Toto nastavení je blíže produkční konfiguraci.
Na webu Azure Portal přejděte k vaší instanci ioT Operations.
V části Součásti vyberte Zprostředkovatele MQTT.
Vyberte naslouchací proces zprostředkovatele MQTT pro vytvoření loadbalanceru>.
Zadejte následující nastavení:
Nastavení Description Name Název prostředku BrokerListener. Service name Název služby Kubernetes Ponechte prázdný název naslouchacího procesu jako název služby. Typ služby LoadBalancer už je vybraný. V části Porty zadejte následující nastavení pro první port:
Nastavení Popis Port Zadejte 1883 Ověřování Zvolte Žádná. Autorizace Zvolte Žádná. Protokol Volba MQTT Protokol TLS Nepřidávejte Vyberte Přidat položku portu a přidejte druhý port a zadejte následující nastavení:
Nastavení Popis Port Zadejte 8883 Ověřování Volba výchozího nastavení Autorizace Zvolte Žádná. Protokol Volba MQTT Protokol TLS Vyberte Přidat. V podokně konfigurace protokolu TLS zadejte následující nastavení:
Nastavení Popis Režim TLS Zvolit automaticky Název vystavitele Zadejte azure-iot-operations-aio-certificate-issuer
Druh vystavitele Volba ClusterIssuer U ostatních nastavení ponechte výchozí nastavení a vyberte Použít.
Vyberte Vytvořit naslouchací proces.
Typ služby
Každý BrokerListener se mapuje na službu Kubernetes. Typ služby určuje, jak je zprostředkovatel vystaven v síti. Mezi podporované typy služeb patří:
- ClusterIp: Zveřejňuje zprostředkovatele na interní IP adrese clusteru. Klienti se můžou ke zprostředkovateli připojit z clusteru. Toto je výchozí typ služby pro výchozí naslouchací proces.
- NodePort: Zpřístupňuje zprostředkovatele na IP adrese každého uzlu na statickém portu. Klienti se můžou připojit ke zprostředkovateli mimo cluster. Tento typ služby je užitečný pro vývoj a testování.
- LoadBalancer: Zpřístupňuje zprostředkovatele externě. Služba má přiřazenou externí IP adresu, kterou můžou klienti použít pro připojení ke zprostředkovateli. Toto je nejběžnější typ služby pro produkční nasazení.
Pouze jeden naslouchací proces na typ služby
Je povolen pouze jeden naslouchací proces na jeden typ služby. Pokud potřebujete více připojení stejného typu služby, přidejte do existujícího naslouchacího procesu tohoto typu služby další porty.
Service name
Název služby je název služby Kubernetes přidružené ke zprostředkovateli. Pokud není zadaný, název naslouchacího procesu zprostředkovatele se použije jako název služby. Název služby musí být jedinečný v rámci oboru názvů.
Tip
Pokud chcete zabránit režijním nákladům na správu, doporučujeme ponechat název služby prázdný. Název naslouchacího procesu je jedinečný a dá se použít k identifikaci služby. Název služby použijte jako přepsání pouze v případech, kdy nemůžete službu pojmenovat po naslouchacím procesu.
Porty
Každý naslouchací proces může mít více portů a každý port může mít vlastní nastavení pro ověřování, autorizaci, protokol a TLS.
Pokud chcete pro port použít vlastní nastavení ověřování nebo autorizace, musíte před použitím s naslouchacím procesem vytvořit odpovídající prostředky. Další informace najdete v tématu Konfigurace ověřování zprostředkovatele MQTT a konfigurace autorizace zprostředkovatele MQTT.
Pokud chcete použít protokol TLS, přečtěte si téma Konfigurace protokolu TLS s automatickou správou certifikátů nebo konfigurace protokolu TLS s ručně zadanými oddíly správy certifikátů.
Použití stejného portu mezi naslouchacími procesy
Použití stejného čísla portu napříč různými naslouchacími procesy se nepodporuje. Každé číslo portu musí být jedinečné v rámci zprostředkovatele Azure IoT Operations MQTT.
Pokud máte například naslouchací proces pomocí portu 1883, nemůžete vytvořit další naslouchací proces s portem 1883. Podobně výchozí naslouchací proces používá port 18883, takže nemůžete vytvořit další naslouchací proces s portem 18883.
Podpora pro WebSockets
Zprostředkovatel Azure IoT Operations MQTT podporuje MQTT přes WebSockets. Pokud chcete povolit protokol WebSockets, nastavte pro WebSockets
port protokol.
Konfigurace protokolu TLS s automatickou správou certifikátů
Pokud chcete povolit protokol TLS s automatickou správou certifikátů, zadejte nastavení protokolu TLS na portu naslouchacího procesu.
Ověření instalace nástroje cert-manager
Pomocí automatické správy certifikátů můžete ke správě certifikátu serveru TLS použít nástroj cert-manager. Ve výchozím nastavení je nástroj cert-manager nainstalovaný společně s operacemi Azure IoT v cert-manager
oboru názvů. Než budete pokračovat, ověřte instalaci.
Slouží
kubectl
ke kontrole podů odpovídajících popiskům aplikací nástroje 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
Pokud se zobrazí pody, které jsou připravené a spuštěné, nainstaluje se cert-manager a je připravený k použití.
Tip
Pokud chcete instalaci dále ověřit, zkontrolujte instalaci v dokumentaci nástroje cert-manager. Nezapomeňte použít cert-manager
obor názvů.
Vytvoření vystavitele pro certifikát serveru TLS
Prostředek vystavitele cert-manager definuje, jak se certifikáty vydávají automaticky. Cert-manager podporuje několik typů vystavitelů nativně. Podporuje také externí typ vystavitele pro rozšíření funkčnosti nad rámec nativně podporovaných vystavitelů. Zprostředkovatel MQTT lze použít s jakýmkoli typem vystavitele cert-manageru.
Důležité
Během počátečního nasazení se operace Azure IoT nainstalují s výchozím vystavitelem pro certifikáty serveru TLS. Tento vystavitel můžete použít pro vývoj a testování. Další informace najdete v tématu Výchozí kořenová certifikační autorita a vystavitel s využitím operací Azure IoT. Následující postup se vyžaduje jenom v případě, že chcete použít jiného vystavitele.
Přístup k vytvoření vystavitele se liší v závislosti na vašem scénáři. Následující části obsahují příklady, které vám pomůžou začít.
Vystavitel certifikační autority je užitečný pro vývoj a testování. Musí být nakonfigurovaný s certifikátem a privátním klíčem uloženým v tajném kódu Kubernetes.
Nastavení kořenového certifikátu jako tajného kódu Kubernetes
Pokud máte existující certifikát certifikační autority, vytvořte tajný klíč Kubernetes s certifikátem certifikační autority a soubory PEM privátního klíče certifikační autority. Spuštěním následujícího příkazu naimportujte certifikát certifikační autority jako tajný klíč Kubernetes a přeskočte další část.
kubectl create secret tls test-ca --cert tls.crt --key tls.key -n azure-iot-operations
Pokud certifikát certifikační autority nemáte, může certifikát certifikační autority vygenerovat správce certifikační autority za vás. Použití nástroje cert-manager k vygenerování certifikátu certifikační autority se označuje jako bootstrapping vystavitele certifikační autority s certifikátem podepsaným svým držitelem.
Začněte vytvořením
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
Vytvořte certifikát certifikační autority podepsaný svým držitelem pomocí následujícího příkazu:
kubectl apply -f ca.yaml
Cert-manager vytvoří certifikát certifikační autority pomocí jeho výchozích hodnot. Vlastnosti tohoto certifikátu lze změnit úpravou specifikace certifikátu. Seznam platných možností najdete v dokumentaci k nástroji cert-manager.
Distribuce kořenového certifikátu
Předchozí příklad ukládá certifikát certifikační autority do tajného kódu Kubernetes s názvem test-ca
. Certifikát ve formátu PEM lze načíst z tajného kódu a uložit do souboru ca.crt
pomocí následujícího příkazu:
kubectl get secret test-ca -n azure-iot-operations -o json | jq -r '.data["tls.crt"]' | base64 -d > ca.crt
Tento certifikát musí být distribuovaný a důvěryhodný všemi klienty. Například použijte --cafile
příznak pro klienta mosquitto.
Vytvoření vystavitele na základě certifikátu certifikační autority
Cert-manager potřebuje vystavitele na základě certifikátu certifikační autority vygenerovaného nebo importovaného v předchozím kroku. Vytvořte následující soubor takto 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
Vytvořte vystavitele pomocí následujícího příkazu:
kubectl apply -f issuer-ca.yaml
Předchozí příkaz vytvoří vystavitele pro vystavování certifikátů serveru TLS. Poznamenejte si název a druh vystavitele. V příkladu je my-issuer
název a druh je Issuer
. Tyto hodnoty se později nastaví v prostředku BrokerListener.
Povolení automatické správy certifikátů TLS pro port
Následuje příklad prostředku BrokerListener, který umožňuje protokol TLS na portu 8884 s automatickou správou certifikátů.
Na webu Azure Portal přejděte do vaší instance ioT Operations.
V části Součásti vyberte Zprostředkovatele MQTT.
Vyberte nebo vytvořte naslouchací proces. 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.
Nastavení protokolu TLS můžete do naslouchacího procesu přidat tak, že vyberete protokol TLS na existujícím portu nebo přidáte nový port.
Zadejte následující nastavení:
Nastavení Description Name Název prostředku BrokerListener. Zadejte aio-broker-loadbalancer-tls
.Port Číslo portu, na kterém BrokerListener naslouchá připojení MQTT. Zadejte 8884. Ověřování Referenční informace k prostředkům ověřování. Autorizace Referenční informace k prostředkům autorizace. Protokol TLS Vyberte tlačítko Přidat. Název vystavitele Název vystavitele cert-manageru Povinný: Druh vystavitele Druh vystavitele cert-manageru Povinný: Skupina vystavitelů Skupina vystavitele cert-manageru Povinný: Algoritmus privátního klíče Algoritmus pro privátní klíč Zásady obměně privátních klíčů Zásady pro obměně privátního klíče Názvy DNS Alternativní názvy subjektu DNS pro certifikát Adresy IP IP adresy alternativních názvů subjektu pro certifikát. Název tajného klíče Tajný klíč Kubernetes obsahující klientský certifikát X.509 Doba trvání Celková životnost certifikátu serveru TLS je výchozí hodnota 90 dnů. Prodloužit před Kdy začít obnovovat certifikát. Výběrem možnosti Použít uložíte nastavení protokolu TLS.
Jakmile je prostředek BrokerListener nakonfigurovaný, zprostředkovatel MQTT automaticky vytvoří novou službu se zadaným portem a povoleným protokolem TLS.
Volitelné: Konfigurace parametrů certifikátu serveru
Jedinými požadovanými parametry jsou název vystavitele a druh vystavitele. Všechny ostatní vlastnosti vygenerovaných certifikátů serveru TLS se vyberou automaticky. Zprostředkovatel MQTT však umožňuje přizpůsobit určité vlastnosti podle stejné syntaxe jako certifikáty nástroje cert-manager. Můžete například zadat algoritmus privátního klíče a zásady obměně. Tato nastavení jsou v tls.certManagerCertificateSpec
podokně konfigurace protokolu TLS na webu Azure Portal.
Úplný seznam těchto nastavení naleznete v tématu Zprostředkovatel listener CertManagerCertificateSpec ROZHRANÍ API.
Ověření nasazení
Pomocí kubectl zkontrolujte, jestli je spuštěná služba přidružená k prostředku BrokerListener. V příkladu výše je aio-broker-loadbalancer-tls
název služby a obor názvů je azure-iot-operations
. Následující příkaz zkontroluje stav služby:
$ 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
Připojení ke zprostředkovateli pomocí protokolu TLS
Po nakonfigurování certifikátu serveru je povolený protokol TLS. Testování pomocí moskvitu:
mosquitto_pub -h $HOST -p 8884 -V mqttv5 -i "test" -t "test" -m "test" --cafile ca.crt
Argument --cafile
povolí protokol TLS na klientovi mosquitto a určuje, že klient by měl důvěřovat všem certifikátům serveru vydaným daným souborem. Musíte zadat soubor, který obsahuje vystavitele nakonfigurovaného certifikátu serveru TLS.
Nahraďte $HOST
příslušným hostitelem:
- Pokud se připojujete ze stejného clusteru, nahraďte názvem služby zadaným (
my-new-tls-listener
například) nebo službouCLUSTER-IP
. - Pokud se připojujete mimo cluster, služba
EXTERNAL-IP
.
Nezapomeňte v případě potřeby zadat metody ověřování.
Výchozí kořenová certifikační autorita a vystavitel
Aby vám to pomohlo začít, nasadí se operace Azure IoT s výchozím certifikátem certifikační autority pro rychlý start a vystavitelem pro certifikáty serveru TLS. Tento vystavitel můžete použít pro vývoj a testování. Další informace najdete v tématu Výchozí kořenová certifikační autorita a vystavitel pro certifikáty serveru TLS.
V produkčním prostředí musíte nakonfigurovat vystavitele certifikační autority s certifikátem od důvěryhodné certifikační autority, jak je popsáno v předchozích částech.
Konfigurace protokolu TLS s ruční správou certifikátů
Pokud chcete ručně nakonfigurovat zprostředkovatele MQTT tak, aby používal konkrétní certifikát TLS, zadejte ho v prostředku BrokerListener s odkazem na tajný klíč Kubernetes a nasaďte ho pomocí kubectl. Tento článek ukazuje příklad, který konfiguruje protokol TLS s certifikáty podepsanými svým držitelem pro testování.
Vytvoření certifikační autority pomocí rozhraní příkazového řádku kroku
Krok je správce certifikátů, který vás rychle zprovozní při vytváření a správě vlastní privátní certifikační autority.
Nainstalujte rozhraní příkazového řádku kroku a vytvořte certifikát a klíč kořenové certifikační autority (CA).
step certificate create --profile root-ca "Example Root CA" root_ca.crt root_ca.key
Vytvořte certifikát a klíč zprostředkující certifikační autority podepsaný kořenovou certifikační autoritou.
step certificate create --profile intermediate-ca "Example Intermediate CA" intermediate_ca.crt intermediate_ca.key \ --ca root_ca.crt --ca-key root_ca.key
Vytvoření certifikátu serveru
Pomocí rozhraní příkazového řádku krok vytvořte certifikát serveru z podepsaného zprostředkující certifikační autoritou.
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
mqtts-endpoint
Tady jsou localhost
alternativní názvy subjektu (SANs) pro front-end zprostředkovatele MQTT v Kubernetes a místních klientech. Pokud se chcete připojit přes internet, přidejte --san
externí IP adresu. Příznaky --no-password --insecure
se používají k testování, aby se přeskočí výzvy k zadání hesla a zakázala ochranu heslem pro privátní klíč, protože je uložená v tajném kódu Kubernetes. V produkčním prostředí použijte heslo a privátní klíč uložte do zabezpečeného umístění, jako je Azure Key Vault.
Požadavky na algoritmus klíče certifikátu
Podporují se klíče EC i RSA, ale všechny certifikáty v řetězu musí používat stejný algoritmus klíče. Pokud importujete vlastní certifikáty certifikační autority, ujistěte se, že certifikát serveru používá stejný algoritmus klíče jako certifikační autority.
Import řetězu certifikátů serveru jako tajného kódu Kubernetes
Vytvořte úplný řetěz certifikátů serveru, ve kterém záleží na pořadí certifikátů: certifikát serveru je první certifikát v souboru, zprostředkující je druhý.
cat mqtts-endpoint.crt intermediate_ca.crt > server_chain.crt
Vytvořte tajný klíč Kubernetes s řetězem certifikátů serveru a klíčem serveru pomocí kubectl.
kubectl create secret tls server-cert-secret -n azure-iot-operations \ --cert server_chain.crt \ --key mqtts-endpoint.key
Povolení ruční správy certifikátů TLS pro port
Následuje příklad prostředku BrokerListener, který umožňuje protokol TLS na portu 8884 s ruční správou certifikátů.
Na webu Azure Portal přejděte k vaší instanci ioT Operations.
V části Součásti vyberte Zprostředkovatele MQTT.
Vyberte nebo vytvořte naslouchací proces. 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. Pokud chcete postupovat podle příkladu, zadejte název služby naslouchacího procesu jako
mqtts-endpoint
.Nastavení protokolu TLS můžete do naslouchacího procesu přidat tak, že vyberete protokol TLS na existujícím portu nebo přidáte nový port.
Zadejte následující nastavení:
Nastavení Popis Port Číslo portu, na kterém BrokerListener naslouchá připojení MQTT. Povinný: Ověřování Referenční informace k prostředkům ověřování. Autorizace Referenční informace k prostředkům autorizace. Protokol TLS Vyberte tlačítko Přidat. Název tajného klíče Tajný klíč Kubernetes obsahující klientský certifikát X.509 Výběrem možnosti Použít uložíte nastavení protokolu TLS.
Připojení ke zprostředkovateli pomocí protokolu TLS
Pokud chcete otestovat připojení TLS s klientem mosquitto, publikujte zprávu a předejte kořenový certifikát certifikační autority v parametru --cafile
.
mosquitto_pub -d -h localhost -p 8885 -i "my-client" -t "test-topic" -m "Hello" --cafile root_ca.crt
Nezapomeňte zadat uživatelské jméno, heslo atd. pokud je povolené ověřování zprostředkovatele MQTT.
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
Tip
Pokud chcete použít localhost, musí být port dostupný na hostitelském počítači. Například kubectl port-forward svc/mqtts-endpoint 8885:8885 -n azure-iot-operations
. S některými distribucemi Kubernetes, jako je K3d, můžete přidat přesměrovaný port s k3d cluster edit $CLUSTER_NAME --port-add 8885:8885@loadbalancer
.
Poznámka:
Pokud se chcete připojit ke zprostředkovateli, musíte distribuovat kořen důvěryhodnosti, označovaný také jako sada důvěryhodnosti, všem klientům. V tomto případě je kořenem vztahu důvěryhodnosti kořenová certifikační autorita podepsaná svým držitelem vytvořená pomocí podrobného rozhraní příkazového řádku. Aby klient ověřil řetěz certifikátů serveru, vyžaduje se distribuce kořenového adresáře důvěryhodnosti. Pokud jsou klienti MQTT úlohami v clusteru Kubernetes, musíte také vytvořit objekt ConfigMap s kořenovou certifikační autoritou a připojit ho do podu.
Použití externí IP adresy pro certifikát serveru
Pokud se chcete připojit pomocí protokolu TLS přes internet, musí mít certifikát serveru zprostředkovatele MQTT svůj externí název hostitele nebo IP adresu jako síť SAN. V produkčním prostředí se obvykle jedná o název DNS nebo dobře známou IP adresu. Během vývoje/testování ale možná nevíte, jaký název hostitele nebo externí IP adresa je přiřazená před nasazením. Pokud chcete tento problém vyřešit, nasaďte nejprve naslouchací proces bez certifikátu serveru, vytvořte certifikát serveru a tajný klíč s externí IP adresou a naimportujte tajný kód do naslouchacího procesu.
Pokud se pokusíte nasadit ukázkový naslouchací proces manual-tls-listener
TLS, ale odkazovaný tajný klíč server-cert-secret
Kubernetes neexistuje, vytvoří se přidružená služba, ale pody se nespustí. Služba se vytvoří, protože operátor musí rezervovat externí IP adresu pro naslouchací proces.
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
Toto chování se však očekává při importu certifikátu serveru. Protokoly správce stavu zmíní, že zprostředkovatel MQTT čeká na certifikát serveru.
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.
Poznámka:
Obecně platí, že v distribuovaném systému nejsou protokoly podů deterministické a měly by se používat s opatrností. Správný způsob, jak se dostat k informacím, je prostřednictvím událostí Kubernetes a stavu vlastních prostředků, které jsou v backlogu. Představte si předchozí krok jako dočasné alternativní řešení.
I když front-endové pody nejsou vzhůru, externí IP adresa je už dostupná.
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
Odsud postupujte stejným postupem jako předtím a vytvořte certifikát serveru s touto externí IP adresou --san
a stejným způsobem vytvořte tajný klíč Kubernetes. Po vytvoření tajného kódu se automaticky naimportuje do naslouchacího procesu.