Delen via


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-resource 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 elke broker.

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 het TLS-protocol (Transport Layer Security) en die moeten worden geverifieerd 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:

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 standaard. Deze listener wordt gebruikt voor versleutelde interne communicatie tussen IoT Operations-onderdelen. De standaardlistener maakt deel uit van de standaardbroker.

Let op

Om te voorkomen dat interne IoT Operations-communicatie 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.

Volg deze stappen om de standaardlistener weer te geven of te bewerken.

  1. Ga in Azure Portal naar uw IoT Operations-exemplaar.

  2. Selecteer onder Onderdelen de optie MQTT Broker.

    Schermopname van het gebruik van Azure Portal om de MQTT-configuratie van Azure IoT Operations weer te geven.

  3. Selecteer in de lijst met brokerlisteners de standaardlistener .

    Schermopname van het gebruik van Azure Portal om de standaard brokerlistener weer te geven of te bewerken.

  4. 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 IoT Operations-communicatie wordt onderbroken, houdt u de standaardlistener ongewijzigd en toegewezen voor intern gebruik. Maak voor externe communicatie een nieuwe listener.

Aangezien de standaard brokerlistener gebruikmaakt van het servicetype ClusterIpen 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.
  • Servicenaam (optioneel): Overschrijf 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 LoadBalancer servicetype. De BrokerListener-resource definieert twee poorten die MQTT-verbindingen van clients accepteren.

  1. Ga in Azure Portal naar uw IoT Operations-exemplaar.

  2. Selecteer onder Onderdelen de optie MQTT Broker.

  3. 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.
  4. Voer onder Poorten de volgende instellingen in voor de eerste poort:

    Instelling Beschrijving
    Poort Voer 1883 in.
    Verificatie Kies Geen.
    Autorisatie Kies Geen.
    Protocol Kies MQTT.
    TLS Voeg niet toe.
  5. Selecteer Poortvermelding toevoegen om een tweede poort toe te voegen en voer de volgende instellingen in:

    Instelling Beschrijving
    Poort Voer 8883 in.
    Verificatie Kies de standaardwaarde.
    Autorisatie Kies Geen.
    Protocol Kies MQTT.
    TLS Selecteer Toevoegen.
  6. Voer in het deelvenster TLS-configuratie de volgende instellingen in:

    Instelling Beschrijving
    TLS-modus Kies Automatisch.
    Naam van verlener Voer azure-iot-operations-aio-certificate-issuer in.
    Soort verlener Kies ClusterIssuer.

    Laat andere instellingen standaard staan en selecteer Toepassen.

  7. Selecteer Listener maken.

    Schermopname van het gebruik van Azure Portal voor het maken van een MQTT-broker voor een load balancer-listener.

Servicetype

Elke BrokerListener-resource 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 standaardservicetype is 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 servicetype is het meest gebruikelijk 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 u kunt deze gebruiken 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 met een listener gebruikt. Zie MQTT-brokerverificatie configureren en MQTT-brokerautorisatie configureren voor meer informatie.

Als u TLS wilt gebruiken, raadpleegt u TLS configureren met automatisch certificaatbeheer of TLS configureren met handmatig certificaatbeheersecties .

Dezelfde poort gebruiken voor listeners

Het gebruik van hetzelfde poortnummer voor verschillende listeners wordt niet ondersteund. Elk poortnummer moet uniek zijn binnen de 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

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 IoT Operations in de cert-manager naamruimte. Controleer de installatie voordat u doorgaat.

  1. Gebruik kubectl 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
    
  2. 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. Het biedt ook ondersteuning voor een extern issuer type voor het uitbreiden van functionaliteit buiten de systeemeigen ondersteunde verleners. U kunt een MQTT-broker gebruiken met elk type certificaatbeheerderverlener.

Belangrijk

Tijdens de eerste implementatie wordt IoT Operations geïnstalleerd met een standaardverlener voor TLS-servercertificaten. U kunt deze verlener gebruiken voor ontwikkeling en testen. Zie De standaardcertificeringsinstantie (CA) en verlener met Azure IoT-bewerkingen voor meer informatie. De volgende 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.

  1. 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
    
  2. Maak het zelfondertekende CA-certificaat met de volgende opdracht:

    kubectl apply -f ca.yaml
    

Certificaatbeheer maakt een CA-certificaat aan de hand van de standaardinstellingen. U kunt de eigenschappen van dit certificaat wijzigen 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. U kunt het certificaat in PEM-indeling ophalen uit het geheim en opslaan in het 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

Het volgende voorbeeld is een BrokerListener-resource die TLS inschakelt op poort 8884 met automatisch certificaatbeheer.

  1. Ga in Azure Portal naar uw IoT Operations-exemplaar.

  2. Selecteer onder Onderdelen de optie MQTT Broker.

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

  4. U kunt TLS-instellingen toevoegen aan de listener door TLS te selecteren op een bestaande poort of door een nieuwe poort toe te voegen.

    Schermopname van het gebruik van Azure Portal om een MQTT-broker te maken voor een load balancer-listener met automatische TLS-certificaten.

    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.
  5. Selecteer Toepassen om de TLS-instellingen op te slaan.

Nadat de BrokerListener-resource is geconfigureerd, maakt de MQTT-broker automatisch een nieuwe service met de opgegeven poort en TLS ingeschakeld.

Optioneel: servercertificaatparameters configureren

De enige vereiste parameters zijn Issuer naam en Issuer soort. Alle andere eigenschappen van de gegenereerde TLS-servercertificaten worden automatisch gekozen. Met de 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 voorgaande 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

Nadat 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 specifieke 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 opgegeven servicenaam (my-new-tls-listener in voorbeeld) of de service CLUSTER-IP.
  • Als u verbinding maakt van buiten het cluster, gebruikt u de service EXTERNAL-IP.

Vergeet niet om indien nodig verificatiemethoden op te geven.

Standaardhoofd-CA en verlener

Om u te helpen aan de slag te gaan, worden IoT-bewerkingen 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 een 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.

Een certificeringsinstantie maken met stap CLI

Stap is een certificaatbeheerder waarmee u snel aan de slag kunt wanneer u uw eigen privé-CA maakt en beheert.

  1. Installeer stap CLI en maak een basis-CA-certificaat en -sleutel.

    step certificate create --profile root-ca "Example Root CA" root_ca.crt root_ca.key
    
  2. 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
    

Een servercertificaat maken

Gebruik stap CLI om een servercertificaat te maken op basis van het tussenliggende CA-certificaat en de sleutel.

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

  1. Maak een volledige servercertificaatketen, waarbij de volgorde van de certificaten van belang is. Het servercertificaat is de eerste in het bestand en het tussenliggende certificaat is de tweede.

    cat  mqtts-endpoint.crt intermediate_ca.crt  > server_chain.crt
    
  2. 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

In het volgende voorbeeld ziet u een BrokerListener-resource die TLS inschakelt op poort 8884 met handmatig certificaatbeheer.

  1. Ga in Azure Portal naar uw IoT Operations-exemplaar.

  2. Selecteer onder Onderdelen de optie MQTT Broker.

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

  4. U kunt TLS-instellingen toevoegen aan de listener door TLS te selecteren op een bestaande poort of door een nieuwe poort toe te voegen.

    Schermopname van het gebruik van Azure Portal om een MQTT-broker te maken voor een load balancer-listener met handmatige TLS-certificaten.

    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.
  5. Selecteer Toepassen om de TLS-instellingen op te slaan.

Verbinding maken met de broker met TLS

Als u de TLS-verbinding met de 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 items zoals gebruikersnaam en wachtwoord 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. Een voorbeeld is 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.

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 door de stap-CLI is gemaakt. 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 de MQTT-broker zijn externe hostnaam of IP-adres hebben als san. In productie is deze informatie meestal een DNS-naam of een bekend IP-adres. Tijdens het ontwikkelen/testen weet u mogelijk niet welke hostnaam of extern IP-adres is toegewezen vóór de implementatie. Als u dit probleem 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 verwacht tijdens het importeren van het servercertificaat. In de health manager-logboeken wordt vermeld dat de 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 voorheen om een servercertificaat te maken met dit externe IP-adres in --san en maak het Kubernetes-geheim op dezelfde manier. Nadat het geheim is gemaakt, wordt het automatisch geïmporteerd in de listener.