Communicatie tussen MQTT-brokers beveiligen met BrokerListener
Belangrijk
Deze pagina bevat instructies voor het beheren van Azure IoT Operations-onderdelen met behulp van Kubernetes-implementatiemanifesten, die in preview zijn. Deze functie is voorzien van verschillende beperkingen en mag niet worden gebruikt voor productieworkloads.
Raadpleeg de Aanvullende voorwaarden voor Microsoft Azure-previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta of preview zijn of die anders nog niet algemeen beschikbaar zijn.
Een BrokerListener komt overeen met een netwerkeindpunt dat de broker beschikbaar maakt voor clients via het netwerk. U kunt een of meer BrokerListener-resources voor elke Broker hebben, met meerdere poorten en ander toegangsbeheer op elk.
Elke BrokerListener-poort kan zijn eigen verificatie- en autorisatieregels hebben die bepalen wie verbinding kan maken op die listenerpoort en welke acties ze op de broker kunnen uitvoeren. U kunt BrokerAuthentication- en BrokerAuthorization-resources gebruiken om het toegangsbeheerbeleid voor elke listenerpoort op te geven. Dankzij deze flexibiliteit kunt u de machtigingen en rollen voor uw MQTT-clients verfijnen op basis van hun behoeften en use cases.
Tip
De standaardImplementatie van MQTT Broker is een CLUSTER-IP-service waarvoor clients verbinding moeten maken met TLS en verificatie met serviceaccounttokens. Clients die verbinding maken van buiten het cluster , hebben extra configuratie nodig voordat ze verbinding kunnen maken.
Broker-listeners hebben de volgende kenmerken:
- Naam: naam van de listener. Deze naam is ook de Kubernetes-servicenaam , tenzij deze wordt overschreven.
- Servicetype: U kunt maximaal drie listeners hebben, één per servicetype. De standaardlistener is servicetype
ClusterIp
. - Poorten: elke listener ondersteunt meerdere poorten. Poorten kunnen niet conflicteren over verschillende listeners.
- Verificatie- en autorisatieverwijzingen: BrokerAuthentication en BrokerAuthorization worden per poort geconfigureerd.
- TLS: Handmatige of automatische TLS-configuratie wordt per poort toegepast.
- Protocol: MQTT via WebSockets kan per poort worden ingeschakeld.
Zie de naslaginformatie over de Broker Listener-API voor een lijst met alle beschikbare instellingen.
Default BrokerListener
Wanneer u Azure IoT Operations implementeert, maakt de implementatie een BrokerListener-resource met de naam default
. Deze listener wordt gebruikt voor versleutelde interne communicatie tussen Azure IoT Operations-onderdelen. De standaardlistener maakt deel uit van de standaardbroker.
- Er wordt een ClusterIp-service beschikbaar gesteld op poort 18883
- Voor clients is verificatie van kubernetes-serviceaccounts vereist
- Het heeft een automatisch beheerd TLS-certificaat
- Er worden geen beleidsregels voor clientautorisatie geconfigureerd
Let op
Om te voorkomen dat interne Communicatie met Azure IoT-bewerkingen wordt onderbroken, houdt u de standaardlistener ongewijzigd en toegewezen voor intern gebruik. Maak voor externe communicatie een nieuwe listener. Als u de ClusterIp-service wilt gebruiken, voegt u meer poorten toe aan de standaardlistener zonder de bestaande instellingen te wijzigen.
De standaardlistener weergeven of bewerken:
Navigeer in Azure Portal naar uw IoT Operations-exemplaar.
Selecteer onder Onderdelen de optie MQTT Broker.
Selecteer in de lijst met brokerlisteners de standaardlistener .
Controleer de listenerinstellingen, maar vermijd het wijzigen van een van de bestaande instellingen. Maak in plaats daarvan een nieuwe poort en configureer deze indien nodig.
Voorkomen dat u de standaard broker-listener wijzigt
Om te voorkomen dat interne Communicatie tussen Azure IoT-bewerkingen wordt onderbroken, moet u de standaardlistener ongewijzigd en toegewezen houden voor intern gebruik. Maak voor externe communicatie een nieuwe listener.
Aangezien de standaard brokerlistener gebruikmaakt van het servicetype ClusterIp en u slechts één listener per servicetype kunt hebben, voegt u meer poorten toe aan de standaardlistener zonder dat u een van de bestaande instellingen hoeft te wijzigen als u de ClusterIp-service wilt gebruiken.
Nieuwe broker-listeners maken
Als u een nieuwe listener wilt maken, geeft u de volgende instellingen op:
- Naam: naam van de listener. Deze naam is ook de Kubernetes-servicenaam , tenzij deze wordt overschreven.
- Servicetype: Type van de Kubernetes-service. Zie Servicetype.
- Poorten: Lijst met poorten waarop moet worden geluisterd. Zie poorten.
- (Optioneel) Servicenaam: overschrijven van de Kubernetes-servicenaam. Zie de servicenaam.
Voorbeeld: Een nieuwe listener maken met twee poorten
In dit voorbeeld ziet u hoe u een nieuwe listener maakt met het servicetype load balancer. De BrokerListener-resource definieert twee poorten die MQTT-verbindingen van clients accepteren.
- De eerste poort luistert op poort 1883 zonder TLS en verificatie. Deze installatie is alleen geschikt voor testen. Gebruik deze configuratie niet in productie.
- De tweede poort luistert op poort 8883 met TLS en verificatie ingeschakeld. Alleen geverifieerde clients met een Kubernetes-serviceaccounttoken kunnen verbinding maken. TLS is ingesteld op de automatische modus, met behulp van certificaatbeheer voor het beheren van het servercertificaat van de standaardverlener. Deze installatie is dichter bij een productieconfiguratie.
Navigeer in Azure Portal naar uw IoT Operations-exemplaar.
Selecteer onder Onderdelen de optie MQTT Broker.
Selecteer MQTT Broker-listener voor LoadBalancer>Create.
Geef de volgende instellingen op:
Instelling Omschrijving Naam Naam van de BrokerListener-resource. Servicenaam Naam van de Kubernetes-service. Laat leeg om de naam van de listener als servicenaam te gebruiken. Servicetype LoadBalancer is al geselecteerd. Voer onder Poorten de volgende instellingen in voor de eerste poort:
Instelling Beschrijving Poort Voer 1883 in Verificatie Kies Geen Autorisatie Kies Geen Protocol MQTT kiezen TLS Niet toevoegen Selecteer Poortvermelding toevoegen om een tweede poort toe te voegen en voer de volgende instellingen in:
Instelling Beschrijving Poort Voer 8883 in Verificatie Standaard kiezen Autorisatie Kies Geen Protocol MQTT kiezen TLS Selecteer Toevoegen Voer in het deelvenster TLS-configuratie de volgende instellingen in:
Instelling Beschrijving TLS-modus Kies Automatisch Naam van verlener azure-iot-operations-aio-certificate-issuer
invoerenSoort verlener ClusterIssuer kiezen Laat andere instellingen standaard staan en selecteer Toepassen.
Selecteer Listener maken.
Servicetype
Elke BrokerListener wordt toegewezen aan een Kubernetes-service. Het servicetype bepaalt hoe de broker beschikbaar wordt gesteld aan het netwerk. De ondersteunde servicetypen zijn:
- ClusterIp: geeft de broker weer op een intern IP-adres van een cluster. Clients kunnen vanuit het cluster verbinding maken met de broker. Dit is het standaardservicetype voor de standaardlistener.
- NodePort: stelt de broker beschikbaar op het IP-adres van elk knooppunt op een statische poort. Clients kunnen verbinding maken met de broker van buiten het cluster. Dit servicetype is handig voor ontwikkeling en testen.
- LoadBalancer: maakt de broker extern beschikbaar. De service krijgt een extern IP-adres toegewezen dat clients kunnen gebruiken om verbinding te maken met de broker. Dit is het meest voorkomende servicetype voor productie-implementaties.
Slechts één listener per servicetype
Er is slechts één listener per servicetype toegestaan. Als u meer connectiviteit van hetzelfde servicetype nodig hebt, voegt u meer poorten toe aan de bestaande listener van dat servicetype.
Servicenaam
De servicenaam is de naam van de Kubernetes-service die is gekoppeld aan de broker. Als dit niet is opgegeven, wordt de naam van de brokerlist gebruikt als de servicenaam. De servicenaam moet uniek zijn binnen de naamruimte.
Tip
Om beheeroverhead te voorkomen, raden we u aan de servicenaam leeg te laten. De naam van de listener is uniek en kan worden gebruikt om de service te identificeren. Gebruik de servicenaam alleen als onderdrukking wanneer u de service niet na de listener kunt noemen.
Poorten
Elke listener kan meerdere poorten hebben en elke poort kan eigen instellingen hebben voor verificatie, autorisatie, protocol en TLS.
Als u uw eigen verificatie- of autorisatie-instelling voor een poort wilt gebruiken, moet u de bijbehorende resources maken voordat u deze gebruikt met een listener. Zie MQTT-brokerverificatie configureren en MQTT-brokerautorisatie configureren voor meer informatie.
Zie TLS configureren met automatisch certificaatbeheer of TLS configureren met handmatig certificaatbeheersecties als u TLS wilt gebruiken.
Dezelfde poort gebruiken voor listeners
Het gebruik van hetzelfde poortnummer voor verschillende listeners wordt niet ondersteund. Elk poortnummer moet uniek zijn binnen de Azure IoT Operations MQTT-broker.
Als u bijvoorbeeld een listener hebt met poort 1883, kunt u geen andere listener maken met poort 1883. Op dezelfde manier gebruikt de standaardlistener poort 18883, zodat u geen andere listener kunt maken met poort 18883.
Ondersteuning voor WebSockets
Azure IoT Operations MQTT Broker ondersteunt MQTT via WebSockets. Als u WebSockets wilt inschakelen, stelt u het protocol WebSockets
in op de poort.
TLS configureren met automatisch certificaatbeheer
Als u TLS wilt inschakelen met automatisch certificaatbeheer, geeft u de TLS-instellingen op een listenerpoort op.
De installatie van certificaatbeheer controleren
Met automatisch certificaatbeheer gebruikt u certificaatbeheer om het TLS-servercertificaat te beheren. Certificaatbeheer wordt standaard geïnstalleerd naast Azure IoT Operations in de cert-manager
naamruimte. Controleer de installatie voordat u doorgaat.
Gebruik
kubectl
dit om te controleren op de pods die overeenkomen met de app-labels voor certificaatbeheer.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
Als u ziet dat de pods gereed en actief zijn, is certificaatbeheer geïnstalleerd en klaar voor gebruik.
Tip
Als u de installatie verder wilt controleren, controleert u de documentatie van cert-manager om de installatie te controleren. Vergeet niet om de cert-manager
naamruimte te gebruiken.
Een verlener maken voor het TLS-servercertificaat
De cert-manager Issuer-resource definieert hoe certificaten automatisch worden uitgegeven. Cert-manager ondersteunt verschillende typen verleners die systeemeigen zijn. Het ondersteunt ook een extern verlenertype voor het uitbreiden van functionaliteit buiten de systeemeigen ondersteunde verleners. MQTT-broker kan worden gebruikt met elk type certificaatbeheerderverlener.
Belangrijk
Tijdens de eerste implementatie wordt Azure IoT Operations geïnstalleerd met een standaardverlener voor TLS-servercertificaten. U kunt deze verlener gebruiken voor ontwikkeling en testen. Zie Standaardhoofd-CA en verlener met Azure IoT Operations voor meer informatie. De onderstaande stappen zijn alleen vereist als u een andere verlener wilt gebruiken.
De benadering voor het maken van de verlener verschilt, afhankelijk van uw scenario. De volgende secties bevatten voorbeelden om u te helpen aan de slag te gaan.
De CA-verlener is handig voor ontwikkeling en testen. Deze moet worden geconfigureerd met een certificaat en een persoonlijke sleutel die is opgeslagen in een Kubernetes-geheim.
Het basiscertificaat instellen als een Kubernetes-geheim
Als u een bestaand CA-certificaat hebt, maakt u een Kubernetes-geheim met het CA-certificaat en PEM-bestanden met persoonlijke CA-sleutels. Voer de volgende opdracht uit om het CA-certificaat te importeren als een Kubernetes-geheim en sla de volgende sectie over.
kubectl create secret tls test-ca --cert tls.crt --key tls.key -n azure-iot-operations
Als u geen CA-certificaat hebt, kan certificaatbeheer een CA-certificaat voor u genereren. Het gebruik van certificaatbeheer voor het genereren van een CA-certificaat wordt bootstrapping genoemd van een CA-verlener met een zelfondertekend certificaat.
Begin met het maken van
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
Maak het zelfondertekende CA-certificaat met de volgende opdracht:
kubectl apply -f ca.yaml
Certificaatbeheer maakt een CA-certificaat met de standaardinstellingen. De eigenschappen van dit certificaat kunnen worden gewijzigd door de certificaatspecificatie te wijzigen. Zie de documentatie voor certificaatbeheer voor een lijst met geldige opties.
Het basiscertificaat distribueren
In het vorige voorbeeld wordt het CA-certificaat opgeslagen in een Kubernetes-geheim met de naam test-ca
. Het certificaat in PEM-indeling kan worden opgehaald uit het geheim en worden opgeslagen in een bestand ca.crt
met de volgende opdracht:
kubectl get secret test-ca -n azure-iot-operations -o json | jq -r '.data["tls.crt"]' | base64 -d > ca.crt
Dit certificaat moet worden gedistribueerd en vertrouwd door alle clients. Gebruik bijvoorbeeld de --cafile
vlag voor een mosquitto-client.
Verlener maken op basis van CA-certificaat
Certificaatbeheer heeft een verlener nodig op basis van het CA-certificaat dat in de vorige stap is gegenereerd of geïmporteerd. Maak het volgende bestand als 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
Maak de verlener met de volgende opdracht:
kubectl apply -f issuer-ca.yaml
Met de voorgaande opdracht maakt u een verlener voor het uitgeven van TLS-servercertificaten. Noteer de naam en het type van de uitgever. In het voorbeeld is my-issuer
de naam en het soort.Issuer
Deze waarden worden later ingesteld in de BrokerListener-resource.
Automatisch TLS-certificaatbeheer voor een poort inschakelen
Hier volgt een voorbeeld van een BrokerListener-resource die TLS inschakelt op poort 8884 met automatisch certificaatbeheer.
Ga in Azure Portal naar uw IoT Operations-exemplaar.
Selecteer onder Onderdelen de optie MQTT Broker.
Selecteer of maak een listener. U kunt slechts één listener per servicetype maken. Als u al een listener van hetzelfde servicetype hebt, kunt u meer poorten toevoegen aan de bestaande listener.
U kunt TLS-instellingen toevoegen aan de listener door de TLS op een bestaande poort te selecteren of door een nieuwe poort toe te voegen.
Geef de volgende instellingen op:
Instelling Omschrijving Naam Naam van de BrokerListener-resource. Voer aio-broker-loadbalancer-tls
in.Poort Poortnummer waarop de BrokerListener luistert naar MQTT-verbindingen. Voer 8884 in. Verificatie De referentie voor verificatieresources. Autorisatie De naslaginformatie over autorisatieresources. TLS Selecteer de knop Toevoegen. Naam van verlener Naam van de cert-manager-uitgever. Vereist. Soort verlener Soort certificaatbeheerder. Vereist. Groep Verleners Groep van de certificaatbeheerderverlener. Vereist. Algoritme voor persoonlijke sleutel Algoritme voor de persoonlijke sleutel. Beleid voor rotatie van persoonlijke sleutels Beleid voor het roteren van de persoonlijke sleutel. DNS-namen Alternatieve dns-onderwerpnamen voor het certificaat. IP-adressen IP-adressen van de alternatieve onderwerpnamen voor het certificaat. Geheime naam Kubernetes-geheim met een X.509-clientcertificaat. Duur De totale levensduur van het TLS-servercertificaat is standaard ingesteld op 90 dagen. Verlengen voor Wanneer moet het certificaat worden vernieuwd. Selecteer Toepassen om de TLS-instellingen op te slaan.
Zodra de BrokerListener-resource is geconfigureerd, maakt MQTT Broker automatisch een nieuwe service met de opgegeven poort en TLS ingeschakeld.
Optioneel: servercertificaatparameters configureren
De enige vereiste parameters zijn de naam van de uitgever en het type Verlener. Alle andere eigenschappen van de gegenereerde TLS-servercertificaten worden automatisch gekozen. Met MQTT-broker kunnen bepaalde eigenschappen echter worden aangepast volgens dezelfde syntaxis als certificaten van certificaatbeheer. U kunt bijvoorbeeld het algoritme en het rotatiebeleid voor persoonlijke sleutels opgeven. Deze instellingen bevinden zich onder tls.certManagerCertificateSpec
of in het deelvenster TLS-configuratie in Azure Portal.
Zie Broker Listener CertManagerCertIficateSpec API-naslaginformatie voor een volledige lijst met deze instellingen.
Implementatie verifiëren
Gebruik kubectl om te controleren of de service die is gekoppeld aan de BrokerListener-resource wordt uitgevoerd. In het bovenstaande voorbeeld is aio-broker-loadbalancer-tls
de servicenaam en de naamruimte .azure-iot-operations
Met de volgende opdracht wordt de servicestatus gecontroleerd:
$ 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
Verbinding maken met de broker met TLS
Zodra het servercertificaat is geconfigureerd, is TLS ingeschakeld. Testen met mosquitto:
mosquitto_pub -h $HOST -p 8884 -V mqttv5 -i "test" -t "test" -m "test" --cafile ca.crt
Het --cafile
argument schakelt TLS in op de mosquitto-client en geeft aan dat de client alle servercertificaten moet vertrouwen die zijn uitgegeven door het opgegeven bestand. U moet een bestand opgeven dat de uitgever van het geconfigureerde TLS-servercertificaat bevat.
Vervang $HOST
door de juiste host:
- Als u verbinding maakt vanuit hetzelfde cluster, vervangt u de servicenaam (
my-new-tls-listener
bijvoorbeeld) of de serviceCLUSTER-IP
. - Als er verbinding wordt gemaakt van buiten het cluster, wordt de service
EXTERNAL-IP
gebruikt.
Vergeet niet om indien nodig verificatiemethoden op te geven.
Standaardhoofd-CA en verlener
Om u te helpen aan de slag te gaan, wordt Azure IoT Operations geïmplementeerd met een standaard 'quickstart' CA-certificaat en verlener voor TLS-servercertificaten. U kunt deze verlener gebruiken voor ontwikkeling en testen. Zie De standaard-basis-CA en verlener voor TLS-servercertificaten voor meer informatie.
Voor productie moet u een CA-verlener configureren met een certificaat van een vertrouwde CERTIFICERINGsinstantie, zoals beschreven in de vorige secties.
TLS configureren met handmatig certificaatbeheer
Als u MQTT Broker handmatig wilt configureren voor het gebruik van een specifiek TLS-certificaat, geeft u dit op in een BrokerListener-resource met een verwijzing naar een Kubernetes-geheim en implementeert u het met kubectl. In dit artikel ziet u een voorbeeld waarin TLS wordt geconfigureerd met zelfondertekende certificaten voor testen.
Certificeringsinstantie maken met stap CLI
Stap is een certificaatbeheerder waarmee u snel aan de slag kunt bij het maken en beheren van uw eigen privé-CA.
Installeer stap CLI en maak een CA-certificaat (root certificate authority) en -sleutel.
step certificate create --profile root-ca "Example Root CA" root_ca.crt root_ca.key
Maak een tussenliggend CA-certificaat en een sleutel die is ondertekend door de basis-CA.
step certificate create --profile intermediate-ca "Example Intermediate CA" intermediate_ca.crt intermediate_ca.key \ --ca root_ca.crt --ca-key root_ca.key
Servercertificaat maken
Gebruik stap CLI om een servercertificaat te maken op basis van de ondertekende door de tussenliggende CA.
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
Hier en localhost
zijn de alternatieve onderwerpnamen (SAN's) voor respectievelijk de front-end van de MQTT-broker in Kubernetes en lokale clients. Als u verbinding wilt maken via internet, voegt u een --san
met een extern IP-adres toe. De --no-password --insecure
vlaggen worden gebruikt voor het testen om wachtwoordprompts over te slaan en wachtwoordbeveiliging voor de persoonlijke sleutel uit te schakelen, omdat deze is opgeslagen in een Kubernetes-geheim. Voor productie gebruikt u een wachtwoord en slaat u de persoonlijke sleutel op een veilige locatie op, zoals Azure Key Vault.
Vereisten voor certificaatsleutelalgoritmen
Zowel EC- als RSA-sleutels worden ondersteund, maar alle certificaten in de keten moeten hetzelfde sleutelalgoritmen gebruiken. Als u uw eigen CA-certificaten importeert, moet u ervoor zorgen dat het servercertificaat hetzelfde sleutelalgoritme gebruikt als de CA's.
Servercertificaatketen importeren als een Kubernetes-geheim
Maak een volledige servercertificaatketen, waarbij de volgorde van de certificaten van belang is: het servercertificaat is de eerste in het bestand, het tussenliggende certificaat is de tweede.
cat mqtts-endpoint.crt intermediate_ca.crt > server_chain.crt
Maak een Kubernetes-geheim met de servercertificaatketen en serversleutel met behulp van kubectl.
kubectl create secret tls server-cert-secret -n azure-iot-operations \ --cert server_chain.crt \ --key mqtts-endpoint.key
TLS-handmatig certificaatbeheer voor een poort inschakelen
Hier volgt een voorbeeld van een BrokerListener-resource die TLS inschakelt op poort 8884 met handmatig certificaatbeheer.
Navigeer in Azure Portal naar uw IoT Operations-exemplaar.
Selecteer onder Onderdelen de optie MQTT Broker.
Selecteer of maak een listener. U kunt slechts één listener per servicetype maken. Als u al een listener van hetzelfde servicetype hebt, kunt u meer poorten toevoegen aan de bestaande listener. Als u het voorbeeld wilt volgen, geeft u de naam van de listenerservice op als
mqtts-endpoint
.U kunt TLS-instellingen toevoegen aan de listener door de TLS op een bestaande poort te selecteren of door een nieuwe poort toe te voegen.
Geef de volgende instellingen op:
Instelling Beschrijving Poort Poortnummer waarop de BrokerListener luistert naar MQTT-verbindingen. Vereist. Verificatie De referentie voor verificatieresources. Autorisatie De naslaginformatie over autorisatieresources. TLS Selecteer de knop Toevoegen. Geheime naam Kubernetes-geheim met een X.509-clientcertificaat. Selecteer Toepassen om de TLS-instellingen op te slaan.
Verbinding maken met de broker met TLS
Als u de TLS-verbinding met mosquitto-client wilt testen, publiceert u een bericht en geeft u het basis-CA-certificaat door in de parameter --cafile
.
mosquitto_pub -d -h localhost -p 8885 -i "my-client" -t "test-topic" -m "Hello" --cafile root_ca.crt
Vergeet niet om gebruikersnaam, wachtwoord, enzovoort op te geven als MQTT-brokerverificatie is ingeschakeld.
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
Als u localhost wilt gebruiken, moet de poort beschikbaar zijn op de hostcomputer. Bijvoorbeeld: kubectl port-forward svc/mqtts-endpoint 8885:8885 -n azure-iot-operations
. Met sommige Kubernetes-distributies zoals K3d kunt u een doorgestuurde poort toevoegen met k3d cluster edit $CLUSTER_NAME --port-add 8885:8885@loadbalancer
.
Notitie
Als u verbinding wilt maken met de broker, moet u de hoofdmap van de vertrouwensrelatie, ook wel vertrouwensbundel genoemd, distribueren naar alle clients. In dit geval is de basis van vertrouwen de zelfondertekende basis-CA die is gemaakt met stap CLI. Distributie van de basis van vertrouwen is vereist voor de client om de servercertificaatketen te verifiëren. Als uw MQTT-clients workloads zijn in het Kubernetes-cluster, moet u ook een ConfigMap maken met de basis-CA en deze koppelen in uw Pod.
Extern IP-adres gebruiken voor het servercertificaat
Als u via internet verbinding wilt maken met TLS, moet het servercertificaat van MQTT Broker zijn externe hostnaam of IP-adres hebben als san. In productie is dit meestal een DNS-naam of een bekend IP-adres. Tijdens het ontwikkelen/testen weet u echter mogelijk niet welke hostnaam of extern IP-adres is toegewezen vóór de implementatie. Als u dit wilt oplossen, implementeert u eerst de listener zonder het servercertificaat, maakt u het servercertificaat en geheim met het externe IP-adres en importeert u het geheim in de listener.
Als u de voorbeeld-TLS-listener manual-tls-listener
probeert te implementeren, maar het kubernetes-geheim server-cert-secret
waarnaar wordt verwezen niet bestaat, wordt de bijbehorende service gemaakt, maar de pods worden niet gestart. De service wordt gemaakt omdat de operator het externe IP-adres voor de listener moet reserveren.
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
Dit gedrag wordt echter verwacht tijdens het importeren van het servercertificaat. In de health manager-logboeken wordt vermeld dat MQTT Broker wacht op het servercertificaat.
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.
Notitie
Over het algemeen zijn podslogboeken in een gedistribueerd systeem niet deterministisch en moeten ze voorzichtig worden gebruikt. De juiste manier om informatie zoals deze weer te geven, is via Kubernetes-gebeurtenissen en aangepaste resourcestatus, die zich in de achterstand bevindt. Overweeg de vorige stap als tijdelijke tijdelijke oplossing.
Hoewel de front-endpods niet zijn ingeschakeld, is het externe IP-adres al beschikbaar.
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
Volg hier dezelfde stappen als eerder om een servercertificaat te maken met dit externe IP-adres in --san
en maak het Kubernetes-geheim op dezelfde manier. Zodra het geheim is gemaakt, wordt het automatisch geïmporteerd in de listener.