Partager via


Communication sécurisée du courtier MQTT à l'aide de BrokerListener

Important

Cette page inclut des instructions pour la gestion des composants Azure IoT Operations à l’aide des manifestes de déploiement Kubernetes, qui sont en version préliminaire. Cette fonctionnalité est fournie avec plusieurs limitations et ne doit pas être utilisée pour les charges de travail de production.

Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.

Une ressource BrokerListener correspond à un point de terminaison réseau qui expose le courtier aux clients sur le réseau. Vous pouvez avoir une ou plusieurs ressources BrokerListener pour chaque courtier, avec plusieurs ports et un contrôle d'accès différent sur chacun.

Chaque port BrokerListener peut avoir ses propres règles d’authentification et d’autorisation qui définissent qui peut se connecter sur ce port d’écouteur et quelles actions il peut effectuer sur le répartiteur. Vous pouvez utiliser les ressources BrokerAuthentication et BrokerAuthorization pour spécifier les stratégies de contrôle d’accès pour chaque port d’écouteur. Cette flexibilité vous permet d’affiner les autorisations et les rôles de vos clients MQTT en fonction de leurs besoins et de leurs cas d’usage.

Conseil

Le déploiement du courtier MQTT par défaut est un service IP de cluster qui nécessite que les clients se connectent avec le protocole TLS (Transport Layer Security) et s'authentifient avec des jetons de compte de service. Les clients se connectant depuis l’extérieur du cluster ont besoin d’une configuration supplémentaire pour pouvoir se connecter.

Les écouteurs de répartiteur présentent les caractéristiques suivantes :

Pour obtenir la liste des paramètres disponibles, consultez les Informations de référence sur l’API Broker Listener.

BrokerListener par défaut

Lorsque vous déployez Azure IoT Operations, le déploiement crée une ressource BrokerListener nommée default. Cet écouteur est utilisé pour la communication interne cryptée entre les composants des opérations IoT. L'écouteur par défaut fait partie du courtier par défaut.

Attention

Pour éviter de perturber la communication interne des opérations IoT, conservez l'écouteur par défaut inchangé et dédié à un usage interne. Pour la communication externe, créez un écouteur. Si vous devez utiliser le service ClusterIp, ajoutez d’autres ports à l’écouteur par défaut sans modifier aucun des paramètres existants.

Pour afficher ou modifier l’écouteur par défaut, suivez ces étapes.

  1. Dans le Portail Azure, accédez à votre instance Opérations IoT.

  2. Sous Composants, sélectionnez Agent MQTT.

    Capture d’écran qui montre l’utilisation du Portail Microsoft Azure pour afficher la configuration MQTT d’Azure IoT Operations.

  3. Dans la liste des écouteurs du broker, sélectionnez l’écouteur par défaut.

    Capture d’écran qui montre l’utilisation du Portail Microsoft Azure pour afficher ou modifier l’écouteur du courtier par défaut.

  4. Passez en revue les paramètres de l’écouteur, mais évitez de modifier les paramètres existants. Au lieu de cela, créez un port et configurez-le en fonction des besoins.

Éviter de modifier l’écouteur de répartiteur par défaut

Pour éviter de perturber la communication interne des opérations IoT, conservez l'écouteur par défaut inchangé et dédié à un usage interne. Pour la communication externe, créez un écouteur.

Étant donné que l'écouteur de courtier par défaut utilise le type de service ClusterIp et que vous ne pouvez avoir qu'un seul écouteur par type de service, ajoutez d'autres ports à l'écouteur par défaut sans modifier aucun des paramètres existants si vous devez utiliser le service ClusterIp.

Créer des écouteurs de broker

Pour créer un écouteur, spécifiez les paramètres suivants :

  • Nom : nom de l’écouteur. Ce nom est également le nom du service Kubernetes, sauf substitution.
  • Type de service : type du service Kubernetes. Consultez Type de service.
  • Ports : Liste des ports à écouter. Consultez Ports.
  • Nom du service (facultatif) : remplacez le nom du service Kubernetes. Consultez Nom du service.

Exemple : Créer un écouteur avec deux ports

Cet exemple montre comment créer un nouvel écouteur avec le type de service LoadBalancer. La ressource BrokerListener définit deux ports qui acceptent les connexions MQTT venant des clients.

  1. Dans le Portail Azure, accédez à votre instance Opérations IoT.

  2. Sous Composants, sélectionnez Agent MQTT.

  3. Sélectionnez Écouteur de l’Agent MQTT pour LoadBalancer>Créer.

    Entrez les paramètres suivants :

    Setting Description
    Nom Nom de la ressource BrokerListener.
    Nom du service Nom du service Kubernetes. Laissez-le vide pour utiliser le nom de l’écouteur en tant que nom de service.
    Type de service LoadBalancer déjà sélectionné.
  4. Sous Ports, entrez les paramètres suivants pour le premier port :

    Setting Description
    Port Entrez 1883.
    Authentification Choisissez Aucun(e).
    Autorisation Choisissez Aucun(e).
    Protocol Choisissez MQTT.
    TLS N'ajoutez rien.
  5. Sélectionnez Ajouter une entrée de port pour ajouter un deuxième port et entrez les paramètres suivants :

    Setting Description
    Port Entrez 8883.
    Authentification Choisissez la valeur par défaut.
    Autorisation Choisissez Aucun(e).
    Protocol Choisissez MQTT.
    TLS Sélectionnez Ajouter.
  6. Dans le volet de configuration TLS, entrez les paramètres suivants :

    Setting Description
    Mode TLS Choisissez Automatique.
    Nom de l'émetteur Saisissez azure-iot-operations-aio-certificate-issuer.
    Type d’émetteur Choisissez ClusterIssuer.

    Conservez les valeurs par défaut pour les autres paramètres, puis sélectionnez Appliquer.

  7. Sélectionnez Créer un écouteur.

    Capture d’écran qui montre l’utilisation du Portail Microsoft Azure pour créer un courtier MQTT pour l’écouteur de l’équilibreur de charge.

Type de service

Chaque ressource BrokerListener est mappée à un service Kubernetes. Le type de service détermine la façon dont le répartiteur est exposé au réseau. Les types de service pris en charge sont les suivants :

  • ClusterIp : expose le répartiteur sur une adresse IP interne de cluster. Les clients peuvent se connecter au répartiteur à partir du cluster. Ce type de service par défaut est destiné à l'écouteur par défaut.
  • NodePort : expose le répartiteur sur l’adresse IP de chaque nœud à un port statique. Les clients peuvent se connecter au répartiteur à partir de l’extérieur du cluster. Ce type de service est utile pour le développement et les tests.
  • LoadBalancer : expose le répartiteur en externe. Le service reçoit une adresse IP externe que les clients peuvent utiliser pour se connecter au répartiteur. Ce type de service est le plus courant pour les déploiements de production.

Un seul écouteur par type de service

Un seul écouteur par type de service est autorisé. Si vous avez besoin d’une connectivité supplémentaire du même type de service, ajoutez d’autres ports à l’écouteur existant de ce type de service.

Nom du service

Le nom du service est le nom du service Kubernetes associé au répartiteur. S’il n’est pas spécifié, le nom de l’écouteur de répartiteur est utilisé comme nom de service. Le nom du service doit être unique dans l’espace de noms.

Conseil

Pour éviter toute surcharge de gestion, nous vous recommandons de laisser le nom du service vide. Le nom de l'auditeur est unique et vous pouvez l'utiliser pour identifier le service. Utilisez le nom du service comme remplacement uniquement lorsque vous ne pouvez pas nommer le service d’après l’écouteur.

Ports

Chaque écouteur peut avoir plusieurs ports, et chaque port peut avoir ses propres paramètres pour l’authentification, l’autorisation, le protocole et TLS.

Pour utiliser votre propre paramètre d’authentification ou d’autorisation pour un port, vous devez créer les ressources correspondantes avant de l’utiliser avec un écouteur. Pour plus d’informations, consultez Configurer l’authentification de l’Agent MQTT et Configurer l’autorisation de l’Agent MQTT.

Pour utiliser TLS, consultez les sections Configurer TLS avec la gestion automatique des certificats ou Configurer TLS avec la gestion manuelle des certificats.

Utiliser le même port pour tous les écouteurs

L’utilisation du même numéro de port sur différents écouteurs n’est pas prise en charge. Chaque numéro de port doit être unique au sein du courtier MQTT IoT Operations.

Par exemple, si vous avez un écouteur sur le port 1883, vous ne pouvez pas créer un autre écouteur avec le port 1883. De même, l’écouteur par défaut utilise le port 18883. Vous ne pouvez donc pas créer un autre écouteur avec le port 18883.

Prise en charge des WebSockets

Le courtier IoT Operations MQTT prend en charge MQTT sur WebSockets. Pour activer WebSockets, définissez le protocole sur WebSockets pour le port.

Configurer TLS avec la gestion automatique des certificats

Pour activer TLS avec la gestion automatique des certificats, spécifiez les paramètres TLS sur un port d’écouteur.

Vérifier l’installation du gestionnaire de certificats

Avec la gestion automatique des certificats, vous utilisez le gestionnaire de certificats pour gérer le certificat de serveur TLS. Par défaut, cert-manager est déjà installé aux côtés d’IoT Operations dans l’espace de noms cert-manager. Vérifiez l'installation avant de continuer.

  1. Utilisez kubectl pour vérifier les pods qui correspondent aux étiquettes de l’application 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
    
  2. Si vous voyez les pods affichés comme prêts et en cours d’exécution, le gestionnaire de certificats est installé et prêt à être utilisé.

Conseil

Pour vérifier davantage l'installation, consultez la documentation de cert-manager pour vérifier l'installation. N’oubliez pas d’utiliser l’espace de noms cert-manager.

Créer un émetteur pour le certificat du serveur TLS

La ressource d'émetteur cert-manager définit comment les certificats sont émis automatiquement. Cert-manager prend en charge nativement plusieurs types d'émetteurs. Il prend également en charge un type externeissuer pour étendre les fonctionnalités au-delà des émetteurs pris en charge nativement. Vous pouvez utiliser un courtier MQTT avec n’importe quel type d’émetteur de gestionnaire de certificats.

Important

Lors du déploiement initial, IoT Operations est installé avec un émetteur par défaut pour les certificats de serveur TLS. Vous pouvez utiliser cet émetteur pour le développement et le test. Pour plus d'informations, consultez Autorité de certification racine (CA) par défaut et émetteur avec Azure IoT Operations. Les étapes suivantes ne sont nécessaires que si vous souhaitez utiliser un autre émetteur.

L’approche de création de l’émetteur est différente en fonction de votre scénario. Les sections suivantes répertorient des exemples pour vous aider à commencer.

L’émetteur de l’autorité de certification est utile pour le développement et le test. Il doit être configuré avec un certificat et une clé privée stockés dans un secret Kubernetes.

Configurer le certificat racine en tant que secret Kubernetes

Si vous disposez d’un certificat d’autorité de certification existant, créez un secret Kubernetes avec le certificat d’autorité de certification et les fichiers PEM de clé privée d’autorité de certification. Exécutez la commande suivante pour importer le certificat d’autorité de certification en tant que secret Kubernetes et ignorez la section suivante.

kubectl create secret tls test-ca --cert tls.crt --key tls.key -n azure-iot-operations

Si vous n’avez pas de certificat d’autorité de certification, cert-manager peut générer un certificat d’autorité de certification pour vous. L’utilisation de cert-manager pour générer un certificat d’autorité de certification racine est connue sous le nom de démarrage d’un émetteur d’autorité de certification à l’aide d’un certificat auto-signé.

  1. Commencez par créer 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. Créez le certificat d’autorité de certification auto-signé avec la commande suivante :

    kubectl apply -f ca.yaml
    

Cert-manager crée un certificat CA en utilisant ses valeurs par défaut. Vous pouvez modifier les propriétés de ce certificat en modifiant la spécification du certificat. Pour une liste des options valides, consultez la documentation de cert-manager.

Distribuer le certificat racine

L’exemple précédent stocke le certificat d’autorité de certification dans un secret Kubernetes appelé test-ca. Vous pouvez récupérer le certificat au format PEM à partir du secret et le stocker dans le fichier ca.crt avec la commande suivante :

kubectl get secret test-ca -n azure-iot-operations -o json | jq -r '.data["tls.crt"]' | base64 -d > ca.crt

Ce certificat doit être distribué et approuvé par tous les clients. Par exemple, utilisez l’indicateur --cafile pour un client Mosquitto.

Créer un émetteur basé sur un certificat d’autorité de certification

Le gestionnaire de certificats a besoin d’un émetteur basé sur le certificat d’autorité de certification généré ou importé à l’étape précédente. Créez le fichier suivant en tant que 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

Créez l’émetteur avec la commande suivante :

kubectl apply -f issuer-ca.yaml

La commande précédente crée un émetteur pour émettre les certificats de serveur TLS. Notez le nom et le type de l’émetteur. Dans l’exemple, le nom est my-issuer et le type est Issuer. Ces valeurs sont définies dans la ressource BrokerListener ultérieurement.

Activer la gestion automatique des certificats TLS pour un port

L'exemple suivant est une ressource BrokerListener qui active TLS sur le port 8884 avec gestion automatique des certificats.

  1. Dans le Portail Azure, accédez à votre instance Opérations IoT.

  2. Sous Composants, sélectionnez Agent MQTT.

  3. Sélectionnez ou créez un écouteur. Vous ne pouvez créer qu'un seul écouteur par type de service. Si vous avez déjà un écouteur du même type de service, vous pouvez ajouter d’autres ports à l’écouteur existant.

  4. Vous pouvez ajouter des paramètres TLS à l'écouteur en sélectionnant TLS sur un port existant ou en ajoutant un nouveau port.

    Capture d’écran qui montre l’utilisation du Portail Microsoft Azure pour créer un courtier MQTT pour un écouteur d’équilibrage de charge avec des certificats TLS automatiques.

    Entrez les paramètres suivants :

    Setting Description
    Nom Nom de la ressource BrokerListener. Saisissez aio-broker-loadbalancer-tls.
    Port Numéro de port sur lequel BrokerListener écoute les connexions MQTT. Entrez 8884.
    Authentification Les informations de référence sur les ressources d’authentification.
    Autorisation Les informations de référence sur les ressources d’autorisation.
    TLS Cliquez sur le bouton Ajouter.
    Nom de l'émetteur Nom de l’émetteur du gestionnaire de certificats. Obligatoire.
    Type d’émetteur Type de l’émetteur du gestionnaire de certificats. Obligatoire.
    Groupe d’émetteurs Groupe de l’émetteur du gestionnaire de certificats. Obligatoire.
    Algorithme de clé privée Algorithme de la clé privée.
    Stratégie de rotation de clé privée Stratégie de rotation de la clé privée.
    Noms DNS Autres noms de l’objet DNS pour le certificat.
    Adresses IP Adresses IP des autres noms de l’objet pour le certificat.
    Nom du secret Secret Kubernetes contenant un certificat client X.509.
    Durée La durée de vie totale du certificat du serveur TLS est par défaut de 90 jours.
    Renouveler avant Quand commencer le renouvellement du certificat.
  5. Sélectionnez Appliquer pour enregistrer les paramètres TLS.

Une fois la ressource BrokerListener configurée, le courtier MQTT crée automatiquement un nouveau service avec le port spécifié et TLS activé.

Facultatif : Configurer les paramètres de certificat de serveur

Les seuls paramètres requis sont le nom Issuer et le type Issuer. Toutes les autres propriétés des certificats de serveur TLS générés sont choisies automatiquement. Cependant, le courtier MQTT permet de personnaliser certaines propriétés en suivant la même syntaxe que les certificats cert-manager. Par exemple, vous pouvez spécifier l’algorithme de clé privée et la stratégie de rotation. Ces paramètres se trouvent sous tls.certManagerCertificateSpec ou sur le volet de configuration TLS dans le Portail Microsoft Azure.

Pour obtenir la liste complète de ces paramètres, consultez les Informations de référence sur l’API CertManagerCertificateSpec de l’écouteur de répartiteur.

Vérifier le déploiement

Utilisez kubectl pour vérifier que le service associé à la ressource BrokerListener est en cours d’exécution. Dans l’exemple précédent, le nom du service est aio-broker-loadbalancer-tls et l’espace de noms est azure-iot-operations. La commande suivante vérifie l’état du service :

$ 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

Se connecter au répartiteur avec TLS

Une fois le certificat du serveur configuré, TLS est activé. Pour tester avec Mosquitto :

mosquitto_pub -h $HOST -p 8884 -V mqttv5 -i "test" -t "test" -m "test" --cafile ca.crt

L'argument --cafile active TLS sur le client Mosquitto et spécifie que le client doit faire confiance à tous les certificats de serveur émis par le fichier spécifique. Vous devez spécifier un fichier qui contient l’émetteur du certificat de serveur TLS configuré.

Remplacez $HOST par l’hôte approprié :

  • Si vous vous connectez depuis le même cluster, remplacez par le nom de service donné (my-new-tls-listener dans l'exemple) ou le service CLUSTER-IP.
  • Si vous vous connectez depuis l'extérieur du cluster, utilisez le service EXTERNAL-IP.

N’oubliez pas de spécifier les méthodes d’authentification si nécessaire.

Autorité de certification racine et émetteur par défaut

Pour vous aider à démarrer, IoT Operations est déployé avec un certificat CA « de démarrage rapide » par défaut et un émetteur pour les certificats de serveur TLS. Vous pouvez utiliser cet émetteur pour le développement et le test. Pour plus d’informations, voir AC racine par défaut et émetteur des certificats de serveur TLS.

Pour la production, vous devez configurer un émetteur d’autorité de certification avec un certificat d’une autorité de certification approuvée, comme décrit dans les sections précédentes.

Configurer TLS avec la gestion manuelle des certificats

Pour configurer manuellement un courtier MQTT pour utiliser un certificat TLS spécifique, spécifiez-le dans une ressource BrokerListener avec une référence à un secret Kubernetes et déployez-le à l'aide de kubectl. Cet article montre un exemple de configuration du protocole TLS avec des certificats auto-signés à des fins de test.

Créer une autorité de certification avec Step CLI

Step est un gestionnaire de certificats qui peut vous aider à démarrer rapidement lorsque vous créez et gérez votre propre autorité de certification privée.

  1. Installez Step CLI et créez un certificat et une clé d’autorité de certification racine.

    step certificate create --profile root-ca "Example Root CA" root_ca.crt root_ca.key
    
  2. Créez un certificat d’autorité de certification intermédiaire et une clé signés par l’autorité de certification racine.

    step certificate create --profile intermediate-ca "Example Intermediate CA" intermediate_ca.crt intermediate_ca.key \
    --ca root_ca.crt --ca-key root_ca.key
    

Créer un certificat de serveur

Utilisez l’étape CLI pour créer un certificat de serveur à partir du certificat et de la clé de l’autorité de certification intermédiaire.

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

Voici les noms alternatifs de sujet (SAN) mqtts-endpoint et localhost pour le frontend du courtier MQTT dans Kubernetes et les clients locaux, respectivement. Pour vous connecter via Internet, ajoutez un --san avec une adresse IP externe. Les indicateurs --no-password --insecure sont utilisés pour le test pour ignorer les invites de mot de passe et désactiver la protection par mot de passe pour la clé privée, car elles sont stockées dans un secret Kubernetes. Pour la production, utilisez un mot de passe et stockez la clé privée dans un emplacement sécurisé comme Azure Key Vault.

Exigences relatives à l’algorithme de clé de certificat

Les clés EC et RSA sont prises en charge, mais tous les certificats de la chaîne doivent utiliser le même algorithme de clé. Si vous importez vos propres certificats d’autorité de certification, vérifiez que le certificat de serveur utilise le même algorithme de clé que les autorités de certification.

Importer une chaîne de certificats de serveur en tant que secret Kubernetes

  1. Créez une chaîne de certificats de serveur complète, où l’ordre des certificats est important. Le certificat du serveur est le premier du fichier et le certificat intermédiaire est le deuxième.

    cat  mqtts-endpoint.crt intermediate_ca.crt  > server_chain.crt
    
  2. Créez un secret Kubernetes avec la chaîne de certificats du serveur et la clé du serveur à l'aide de kubectl.

    kubectl create secret tls server-cert-secret -n azure-iot-operations \
    --cert server_chain.crt \
    --key mqtts-endpoint.key
    

Activer la gestion manuelle des certificats TLS pour un port

L'exemple suivant montre une ressource BrokerListener qui active TLS sur le port 8884 avec une gestion manuelle des certificats.

  1. Dans le Portail Azure, accédez à votre instance Opérations IoT.

  2. Sous Composants, sélectionnez Agent MQTT.

  3. Sélectionnez ou créez un écouteur. Vous ne pouvez créer qu'un seul écouteur par type de service. Si vous avez déjà un écouteur du même type de service, vous pouvez ajouter d’autres ports à l’écouteur existant. Pour suivre l’exemple, spécifiez le nom du service d’écouteur en tant que mqtts-endpoint.

  4. Vous pouvez ajouter des paramètres TLS à l'écouteur en sélectionnant TLS sur un port existant ou en ajoutant un nouveau port.

    Capture d’écran qui montre l’utilisation du Portail Microsoft Azure pour créer un courtier MQTT pour l’écouteur d’équilibrage de charge avec des certificats TLS manuels.

    Entrez les paramètres suivants :

    Setting Description
    Port Numéro de port sur lequel BrokerListener écoute les connexions MQTT. Obligatoire.
    Authentification Les informations de référence sur les ressources d’authentification.
    Autorisation Les informations de référence sur les ressources d’autorisation.
    TLS Cliquez sur le bouton Ajouter.
    Nom du secret Secret Kubernetes contenant un certificat client X.509.
  5. Sélectionnez Appliquer pour enregistrer les paramètres TLS.

Se connecter au répartiteur avec TLS

Pour tester la connexion TLS avec le client Mosquitto, publiez un message et transmettez le certificat CA racine dans le paramètre --cafile.

mosquitto_pub -d -h localhost -p 8885 -i "my-client" -t "test-topic" -m "Hello" --cafile root_ca.crt

N'oubliez pas de spécifier des éléments tels que le nom d'utilisateur et le mot de passe si l'authentification du courtier MQTT est activée.

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

Conseil

Pour utiliser localhost, le port doit être disponible sur l’ordinateur hôte. par exemple kubectl port-forward svc/mqtts-endpoint 8885:8885 -n azure-iot-operations. Avec certaines distributions Kubernetes comme K3d, vous pouvez ajouter un port transféré avec k3d cluster edit $CLUSTER_NAME --port-add 8885:8885@loadbalancer.

Pour vous connecter au répartiteur, vous devez distribuer la racine de confiance, également connu sous le nom de pack d’approbation, à tous les clients. Dans ce cas, la racine de confiance est l’autorité de certification racine auto-signée créée par Step CLI. La distribution de la racine de confiance est requise pour que le client puisse vérifier la chaîne de certificats de serveur. Si vos clients MQTT sont des charges de travail sur le cluster Kubernetes, vous devez également créer un ConfigMap avec l'autorité de certification racine et le monter dans votre pod.

Utiliser une adresse IP externe pour le certificat de serveur

Pour se connecter à TLS sur Internet, le certificat du serveur du courtier MQTT doit avoir son nom d'hôte externe ou son adresse IP en tant que SAN. En production, ces informations sont généralement un nom DNS ou une adresse IP bien connue. Pendant le développement/test, vous ne savez peut-être pas quel nom d’hôte ou quelle adresse IP externe est attribué avant le déploiement. Pour résoudre ce problème, déployez d’abord l’écouteur sans le certificat du serveur, créez le certificat du serveur et le secret avec l’IP externe, puis importez le secret dans l’écouteur.

Si vous essayez de déployer l’exemple d’écouteur TLS manual-tls-listener mais que le secret Kubernetes référencé server-cert-secret n’existe pas, le service associé est créé, mais les pods ne démarrent pas. Le service est créé, car l’opérateur doit réserver l’adresse IP externe pour l’écouteur.

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

Ce comportement est attendu lors de l'importation du certificat du serveur. Les journaux du gestionnaire de santé mentionnent que le courtier MQTT attend le certificat du serveur.

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.

Remarque

En règle générale, dans un système distribué, les journaux des pods ne sont pas déterministes et doivent être utilisés avec précaution. La bonne façon d’obtenir des informations comme celle-ci consiste à utiliser des événements Kubernetes et l’état des ressources personnalisées, qui se trouve dans le backlog. Considérez l’étape précédente comme solution de contournement temporaire.

Même si les pods frontaux ne sont pas en cours, l’adresse IP externe est déjà disponible.

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

À partir de là, suivez les mêmes étapes que celles indiquées précédemment pour créer un certificat de serveur avec cette adresse IP externe --san et créer le secret Kubernetes de la même manière. Une fois le secret créé, il est automatiquement importé dans l'écouteur.