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 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:

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.

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:

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

  2. Selecteer onder Onderdelen de optie MQTT Broker.

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

  1. Navigeer 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 MQTT kiezen
    TLS Niet toevoegen
  5. 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
  6. 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 invoeren
    Soort verlener ClusterIssuer kiezen

    Laat andere instellingen standaard staan en selecteer Toepassen.

  7. Selecteer Listener maken.

    Schermopname van Azure Portal om MQTT-broker te maken voor load balancer-listener.

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.

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

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

  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 de TLS op een bestaande poort te selecteren of door een nieuwe poort toe te voegen.

    Schermopname van Azure Portal om MQTT-broker te maken voor 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.

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 service CLUSTER-IP.
  • Als er verbinding wordt gemaakt van buiten het cluster, wordt de service EXTERNAL-IPgebruikt.

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.

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

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

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

Hier volgt een voorbeeld van een BrokerListener-resource die TLS inschakelt op poort 8884 met handmatig certificaatbeheer.

  1. Navigeer 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 de TLS op een bestaande poort te selecteren of door een nieuwe poort toe te voegen.

    Schermopname van Azure Portal om MQTT-broker te maken voor 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 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.