Protección de la comunicación de agente MQTT mediante BrokerListener
Importante
En esta página se incluyen instrucciones para administrar componentes de Operaciones de IoT de Azure mediante manifiestos de implementación de Kubernetes, que se encuentra en versión preliminar. Esta característica se proporciona con varias limitacionesy no se debe usar para cargas de trabajo de producción.
Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.
BrokerListener corresponde a un punto de conexión de red que expone el agente a los clientes a través de la red. Puede tener uno o varios recursos BrokerListener para cada agente, con varios puertos y control de acceso diferente en cada uno.
Cada puerto BrokerListener puede tener sus propias reglas de autenticación y autorización que definen quién puede conectarse en ese puerto del agente de escucha y qué acciones pueden realizar en el agente. Puede usar BrokerAuthentication y BrokerAuthorization recursos para especificar las directivas de control de acceso para cada puerto de escucha. Esta flexibilidad le permite ajustar los permisos y roles de los clientes MQTT en función de sus necesidades y casos de uso.
Sugerencia
La implementación predeterminada del corredor MQTT es un servicio IP de clúster que requiere que los clientes se conecten con TLS y se autentiquen con tokens de cuenta de servicio. Los clientes que se conectan desde fuera del clúster necesitan de configuración adicionales para poder conectarse.
Los agentes de escucha tienen las siguientes características:
- Nombre: nombre del agente de escucha. Este nombre también es el nombre del servicio Kubernetes a menos que se invalide.
- Tipo de servicio: puede tener hasta tres agentes de escucha, uno por tipo de servicio. El agente de escucha predeterminado es el tipo de servicio
ClusterIp
. - Puertos: cada agente de escucha admite varios puertos. Los puertos no pueden entrar en conflicto con distintos agentes de escucha.
- Referencias de autenticación y autorización: BrokerAuthentication y BrokerAuthorization están configurados por puerto.
- TLS: se aplica Manual o configuración de TLS automática por puerto.
- Protocolo: MQTT sobre WebSockets se puede habilitar por puerto.
Para obtener una lista de todas las opciones disponibles, consulte la Referencia de API de agente de escucha.
BrokerListener predeterminado
Al implementar operaciones de IoT de Azure, la implementación crea un recurso BrokerListener denominado default
. Este agente de escucha se usa para la comunicación interna cifrada entre los componentes de operaciones de IoT de Azure. El agente de escucha predeterminado forma parte del agente predeterminado.
- Expone un Servicio ClusterIp en el puerto 18883
- Requiere que los clientes usen Autenticación de cuenta de servicio de Kubernetes
- Tiene un certificado TLS administrado automáticamente.
- No configura ninguna directiva de autorización de cliente.
Precaución
Para evitar interrumpir la comunicación interna de operaciones de IoT de Azure, mantenga el agente de escucha predeterminado sin cambios y dedicado para su uso interno. Para la comunicación externa, crear un nuevo agente de escucha. Si necesita usar el servicio ClusterIp, agregue más puertos al agente de escucha predeterminado sin cambiar ninguna de las configuraciones existentes.
Para ver o editar el agente de escucha predeterminado:
En Azure Portal, vaya a su instancia de IoT Hub.
En Componentes, seleccione MQTT Broker.
En la lista cliente de escucha del corredor, seleccione el cliente de escucha predeterminado.
Revise la configuración del agente de escucha, pero evite modificar cualquiera de las configuraciones existentes. En su lugar, cree un puerto y configúrelo según sea necesario.
Evitar modificar el agente de escucha de agente predeterminado
Para evitar la interrupción de la comunicación interna de operaciones de IoT de Azure, mantenga el agente de escucha predeterminado sin cambios y dedicado para su uso interno. Para la comunicación externa, crear un nuevo agente de escucha.
Dado que el agente de escucha predeterminado usa el tipo de servicio ClusterIp y puede tener solo un agente de escucha por tipo de servicio, agregue más puertos al cliente de escucha predeterminado sin cambiar ninguna de las configuraciones existentes si necesita usar el servicio ClusterIp.
Crear nuevos clientes de escucha del corredor
Para crear un nuevo agente de escucha, especifique la siguiente configuración:
- Nombre: nombre del agente de escucha. Este nombre también es el nombre del servicio Kubernetes a menos que se invalide.
- Tipo de servicio: tipo del servicio Kubernetes. Consulte Tipo de servicio.
- Puertos: lista de puertos en los que se va a escuchar. Vea Puertos.
- (Opcional) Nombre del servicio: invalide el nombre del servicio de Kubernetes. Consulte Nombre del servicio.
Ejemplo: Creación de un nuevo agente de escucha con dos puertos
En este ejemplo se muestra cómo crear un nuevo agente de escucha con el tipo de servicio del equilibrador de carga. El recurso BrokerListener define dos puertos que aceptan conexiones MQTT de clientes.
- El primer puerto escucha en el puerto 1883 sin TLS y autenticación. Esta configuración es adecuada solo para pruebas. No use esta configuración en producción.
- El segundo puerto escucha en el puerto 8883 con TLS y la autenticación habilitada. Solo clientes autenticados con un token de cuenta de servicio de Kubernetes pueden conectarse. TLS se establece en modo automático, mediante cert-manager para administrar el certificado de servidor desde la emisor predeterminado. Esta configuración está más cerca de una configuración de producción.
En Azure Portal, vaya a su instancia de IoT Hub.
En Componentes, seleccione MQTT Broker.
Seleccione cliente de escucha de corredor MQTT para LoadBalancer>Crear.
Escriba la siguiente configuración:
Configuración Descripción Nombre Nombre del recurso BrokerListener. Nombre del servicio Nombre del servicio Kubernetes. Déjelo vacío para usar el nombre del cliente de escucha como nombre del servicio. Tipo de servicio. LoadBalancer ya seleccionado. En Puertos, escriba la siguiente configuración para el primer puerto:
Configuración Descripción Port Escriba 1883 Autenticación Elija Ninguno. Authorization Elija Ninguno. Protocolo Elegir MQTT TLS No agregue Seleccione Agregar entrada de puerto para agregar un segundo puerto y escriba la siguiente configuración:
Configuración Descripción Port Escriba 8883 Autenticación Elegir el valor predeterminado Autorización Elija Ninguno. Protocolo Elegir MQTT TLS Seleccione Agregar. En el panel configuración de TLS , escriba los valores siguientes:
Configuración Descripción Modo TLS Elija Automático Nombre del emisor Escriba azure-iot-operations-aio-certificate-issuer
.Tipo de emisor Elija ClusterIssuer Deje otra configuración como predeterminada y seleccione Aplicar.
Seleccione Crear cliente de escucha.
Tipo de servicio.
Cada BrokerListener se asigna a un Servicio de Kubernetes. El tipo de servicio determina cómo se expone el agente a la red. Los tipos de servicio admitidos son:
- ClusterIp: expone el agente en una dirección IP interna del clúster. Los clientes pueden conectarse al agente desde el clúster. Este es el tipo de servicio predeterminado para el agente de escucha predeterminado.
- NodePort: expone el agente en la dirección IP de cada nodo en un puerto estático. Los clientes pueden conectarse al agente desde fuera del clúster. Este tipo de servicio es útil para el desarrollo y las pruebas.
- LoadBalancer: expone el agente externamente. Al servicio se le asigna una dirección IP externa que los clientes pueden usar para conectarse al agente. Este es el tipo de servicio más común para las implementaciones de producción.
Solo un agente de escucha por tipo de servicio
Solo se permite un agente de escucha por tipo de servicio. Si necesita más conectividad del mismo tipo de servicio, agregue más puertos al agente de escucha existente de ese tipo de servicio.
Nombre del servicio
El nombre del servicio es el nombre del servicio de Kubernetes asociado al agente. Si no se especifica, el nombre del agente de escucha se usa como nombre del servicio. El nombre del servicio debe ser único dentro del espacio de nombres.
Sugerencia
Para evitar la sobrecarga de administración, se recomienda dejar vacío el nombre del servicio. El nombre del agente de escucha es único y se puede usar para identificar el servicio. Use el nombre del servicio como invalidación solo cuando no pueda asignar un nombre al servicio después del agente de escucha.
Puertos
Cada agente de escucha puede tener varios puertos y cada puerto puede tener su propia configuración para la autenticación, autorización, protocolo y TLS.
Para usar su propia configuración de autenticación o autorización para un puerto, debe crear los recursos correspondientes antes de usarlos con un agente de escucha. Para obtener más información, consulte Configuración de la autenticación de agente MQTT y Configuración de la autorización del corredor MQTT.
Para usar TLS, consulte la sección Configuración de TLS con administración automática de certificados o Configuración de TLS con administración manual de certificados.
Uso del mismo puerto entre agentes de escucha
No se admite el uso del mismo número de puerto en diferentes agentes de escucha. Cada número de puerto debe ser único dentro del agente MQTT de Azure IoT Operations.
Por ejemplo, si tiene un agente de escucha mediante el puerto 1883, no puede crear otro agente de escucha con el puerto 1883. Del mismo modo, el agente de escucha predeterminado usa el puerto 18883, por lo que no puede crear otro agente de escucha con el puerto 18883.
Compatibilidad con WebSockets
El corredor MQTT de Operaciones de IoT de Azure admite MQTT a través de WebSockets. Para habilitar WebSockets, establezca el protocolo en WebSockets
para el puerto.
Configuración de TLS con administración automática de certificados
Para habilitar TLS con administración automática de certificados, especifique la configuración de TLS en un puerto de escucha.
Compruebe la instalación de cert-manager
Con la administración automática de certificados, se usa cert-manager para administrar el certificado de servidor TLS. De manera predeterminada, cert-manager ya está instalado junto con las Operaciones de IoT de Azure en el espacio de nombres cert-manager
. Compruebe la instalación antes de continuar.
Use
kubectl
para comprobar si los pods coinciden con las etiquetas de la aplicación 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
Si ve que los pods se muestran como listos y en ejecución, cert-manager está instalado y listo para usarse.
Sugerencia
Para comprobar aún más la instalación, consulte la documentación de cert-manager para comprobar la instalación. Recuerde usar el espacio de nombres cert-manager
.
Creación de un emisor para el certificado de servidor TLS
El recurso emisor cert-manager define cómo se emiten automáticamente los certificados. Cert-manager admite varios tipos de emisores de forma nativa. También admite un tipo de emisor externo para ampliar la funcionalidad más allá de los emisores admitidos de forma nativa. El broker MQTT puede utilizarse con cualquier tipo de emisor de cert-manager.
Importante
Durante la implementación inicial, las Operaciones de IoT de Azure se instala con un emisor predeterminado para los certificados de servidor TLS. Puede usar este emisor para desarrollo y pruebas. Para más información, consulte Entidad de certificación raíz predeterminada y emisor con Operaciones de loT de Azure. Los pasos siguientes solo son necesarios si desea usar otro emisor.
El enfoque para crear el emisor es diferente en función del escenario. En las secciones siguientes se enumeran ejemplos para ayudarle a empezar.
El emisor de CA es útil para el desarrollo y las pruebas. Debe configurarse con un certificado y una clave privada almacenadas en un secreto de Kubernetes.
Configuración del certificado raíz como un secreto de Kubernetes
Si tiene un certificado de entidad de certificación existente, cree un secreto de Kubernetes con el certificado de entidad de certificación y los archivos PEM de clave privada de entidad de certificación. Ejecute el siguiente comando para importar el certificado de entidad de certificación como un secreto de Kubernetes y omitir la sección siguiente.
kubectl create secret tls test-ca --cert tls.crt --key tls.key -n azure-iot-operations
Si no tiene un certificado CA, cert-manager puede generar un certificado CA raíz para usted. El uso de cert-manager para generar un certificado de entidad de certificación se conoce como arranque de un emisor CA con un certificado autofirmado.
Empiece por crear
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
Cree el certificado CA con firma propia con el siguiente comando:
kubectl apply -f ca.yaml
Cert-manager crea un certificado CA utilizando sus valores predeterminados. Las propiedades de este certificado pueden cambiarse modificando la especificación del certificado. Consulte Documentación de cert-manager para obtener una lista de opciones válidas.
Distribuir el certificado raíz
El ejemplo anterior almacena el certificado CA en un secreto de Kubernetes llamado test-ca
. El certificado en formato PEM se puede recuperar del secreto y almacenar en un archivo ca.crt
con el siguiente comando:
kubectl get secret test-ca -n azure-iot-operations -o json | jq -r '.data["tls.crt"]' | base64 -d > ca.crt
Todos los clientes deben distribuir y confiar en este certificado. Por ejemplo, use la marca --cafile
para un cliente de mosquitto.
Crear emisor basado en certificado CA
Cert-manager necesita un emisor basado en el certificado CA generado o importado en el paso anterior. Cree el siguiente archivo como 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
Cree el emisor con el siguiente comando:
kubectl apply -f issuer-ca.yaml
El comando anterior crea un emisor para emitir certificados de servidor TLS. Anote el nombre y el tipo del emisor. En el ejemplo, el nombre es my-issuer
y el tipo es Issuer
. Estos valores se establecen en el recurso BrokerListener más adelante.
Habilitar la administración automática de certificados TLS para un puerto
A continuación se muestra un ejemplo de un recurso BrokerListener que habilita TLS en el puerto 8884 con administración automática de certificados.
En Azure Portal, vaya a la instancia de operaciones de IoT.
En Componentes, seleccione MQTT Broker.
Seleccione o cree un cliente de escucha. Solo puede crear un cliente de escucha por tipo de servicio. Si ya tiene un cliente de escucha del mismo tipo de servicio, puede agregar más puertos al cliente de escucha existente.
Puede agregar la configuración de TLS al cliente de escucha seleccionando TLS en un puerto existente o agregando un puerto nuevo.
Escriba la siguiente configuración:
Configuración Descripción Nombre Nombre del recurso BrokerListener. Escriba aio-broker-loadbalancer-tls
.Port Número de puerto en el que BrokerListener escucha las conexiones MQTT. Escriba 8884. Autenticación La referencia de recursos de autenticación. Authorization La referencia del recurso de autorización. TLS Selecciona el botón Agregar. Nombre del emisor Nombre del emisor del administrador de certificados. Necesario. Tipo de emisor Tipo de emisor de cert-manager. Necesario. Grupo de emisores Grupo del emisor de cert-manager. Necesario. Algoritmo de clave privada Algoritmo para la clave privada. Directiva de rotación de claves privadas Directiva para rotar la clave privada. Nombres DNS Nombres alternativos del firmante DNS para el certificado. Direcciones IP Direcciones IP de los nombres alternativos del firmante para el certificado. Nombre secreto Secreto de Kubernetes que contiene un certificado de cliente X.509. Duration Duración total del certificado de servidor TLS Por defecto, 90 días. Renovar antes Cuándo empezar a renovar el certificado. Seleccione Aplicar para guardar la configuración de TLS.
Una vez configurado el recurso BrokerListener, el broker MQTT crea automáticamente un nuevo servicio con el puerto especificado y TLS habilitado.
Opcional: Configurar parámetros de certificado de servidor
Los únicos parámetros necesarios son el nombre del emisor y el tipo de emisor. Todas las demás propiedades de los certificados de servidor TLS generados se eligen automáticamente. Sin embargo, el corredor MQTT permite personalizar determinadas propiedades siguiendo la misma sintaxis que los Certificados cert-manager. Por ejemplo, puede especificar el algoritmo de clave privada y la directiva de rotación. Estas opciones se encuentran en tls.certManagerCertificateSpec
o en el panel configuración de TLS en Azure Portal.
Para obtener una lista completa de estas opciones de configuración, consulte referencia de la API de agente de escucha de Broker CertManagerCertificateSpec.
Comprobación de la implementación
Use kubectl para comprobar que el servicio asociado al recurso BrokerListener se está ejecutando. En el ejemplo anterior, el nombre del servicio es aio-broker-loadbalancer-tls
y el espacio de nombres es azure-iot-operations
. El comando siguiente comprueba el estado del servicio:
$ 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
Conexión al agente con TLS
Una vez configurado el certificado de servidor, TLS está habilitado. Para probar con mosquitto:
mosquitto_pub -h $HOST -p 8884 -V mqttv5 -i "test" -t "test" -m "test" --cafile ca.crt
El argumento--cafile
habilita TLS en el cliente mosquitto y especifica que el cliente debe confiar en todos los certificados de servidor emitidos por el archivo especificado. Debe especificar un archivo que contenga el emisor del certificado de servidor TLS configurado.
Reemplace por $HOST
el host adecuado:
- Si se conecta desde dentro del mismo clúster, reemplace por el nombre de servicio especificado (
my-new-tls-listener
por ejemplo) o el servicioCLUSTER-IP
. - Si se conecta desde fuera del clúster, el servicio
EXTERNAL-IP
.
Recuerde especificar métodos de autenticación si es necesario.
Entidad de certificación raíz predeterminada y emisor
Para ayudarle a empezar, operaciones de IoT de Azure se implementa con un certificado de entidad de certificación de "inicio rápido" predeterminado y un emisor para certificados de servidor TLS. Puede usar este emisor para desarrollo y pruebas. Para obtener más información, consulte Entidad de certificación raíz predeterminada y emisor para certificados TLS de servidor.
Para la producción, debe configurar un emisor de CA con un certificado de una CA de confianza, como se describe en las secciones anteriores.
Configuración de TLS con administración manual de certificados
Para configurar manualmente el corredor MQTT para que use un certificado TLS específico, especifíquelo en un recurso BrokerListener con una referencia a un secreto de Kubernetes e impleméntelo mediante kubectl. En este artículo se muestra un ejemplo que configura TLS con certificados autofirmados para las pruebas.
Creación de una entidad de certificación con la CLI de Step
Step es un administrador de certificados que puede ayudarle a ponerse en marcha rápidamente cuando vaya a crear y administrar su propia entidad de certificación (CA) privada.
Instale la CLI de Step y cree un certificado y una clave de entidad de certificación raíz.
step certificate create --profile root-ca "Example Root CA" root_ca.crt root_ca.key
Cree un certificado y una clave de entidad de certificación intermedia firmados por la entidad de certificación raíz.
step certificate create --profile intermediate-ca "Example Intermediate CA" intermediate_ca.crt intermediate_ca.key \ --ca root_ca.crt --ca-key root_ca.key
Creación de un certificado de servidor
Use la CLI de Step para crear un certificado de servidor a partir del firmado por la entidad de certificación intermedia.
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
Aquí, mqtts-endpoint
y localhost
son los nombres alternativos del firmante (SAN) para el front-end del corredor MQTT en Kubernetes y los clientes locales, respectivamente. Para conectarse a través de Internet, agregue un --san
con una dirección IP externa. Las marcas --no-password --insecure
se usan para la realización de pruebas a fin de omitir las solicitudes de contraseña y deshabilitar la protección de contraseñas para la clave privada debido a que se almacena en un secreto de Kubernetes. En producción, use una contraseña y almacene la clave privada en una ubicación segura, como Azure Key Vault.
Requisitos del algoritmo de clave de certificado
Se admiten claves EC y RSA, pero todos los certificados de la cadena deben usar el mismo algoritmo de clave. Si importa sus propios certificados de CA, asegúrese de que el certificado de servidor use el mismo algoritmo de clave que las entidades de certificación.
Importación de cadena del certificado raíz como secreto de Kubernetes
Cree una cadena de certificados de servidor completa, donde el orden de los certificados es importante: el certificado de servidor es el primero del archivo, el intermedio es el segundo.
cat mqtts-endpoint.crt intermediate_ca.crt > server_chain.crt
Cree un secreto de Kubernetes con la cadena de certificados de servidor y la clave de servidor mediante kubectl.
kubectl create secret tls server-cert-secret -n azure-iot-operations \ --cert server_chain.crt \ --key mqtts-endpoint.key
Habilitar la administración manual de certificados TLS para un puerto
A continuación se muestra un ejemplo de un recurso BrokerListener que habilita TLS en el puerto 8884 con la administración manual de certificados.
En Azure Portal, vaya a su instancia de IoT Hub.
En Componentes, seleccione MQTT Broker.
Seleccione o cree un cliente de escucha. Solo puede crear un cliente de escucha por tipo de servicio. Si ya tiene un cliente de escucha del mismo tipo de servicio, puede agregar más puertos al cliente de escucha existente. Para seguir el ejemplo, especifique el nombre del servicio de escucha como
mqtts-endpoint
.Puede agregar la configuración de TLS al cliente de escucha seleccionando TLS en un puerto existente o agregando un puerto nuevo.
Escriba la siguiente configuración:
Configuración Descripción Port Número de puerto en el que BrokerListener escucha las conexiones MQTT. Necesario. Autenticación La referencia de recursos de autenticación. Authorization La referencia del recurso de autorización. TLS Selecciona el botón Agregar. Nombre secreto Secreto de Kubernetes que contiene un certificado de cliente X.509. Seleccione Aplicar para guardar la configuración de TLS.
Conexión al agente con TLS
Para probar la conexión TLS con el cliente mosquitto, publique un mensaje y pase el certificado de CA raíz en el parámetro --cafile
.
mosquitto_pub -d -h localhost -p 8885 -i "my-client" -t "test-topic" -m "Hello" --cafile root_ca.crt
Recuerde especificar el nombre de usuario, la contraseña etc. Si la autenticación del corredor MQTT está habilitada.
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
Sugerencia
Para usar localhost, el puerto debe estar disponible en la máquina host. Por ejemplo, kubectl port-forward svc/mqtts-endpoint 8885:8885 -n azure-iot-operations
. Con algunas distribuciones de Kubernetes como K3d, puede agregar un puerto reenviado con k3d cluster edit $CLUSTER_NAME --port-add 8885:8885@loadbalancer
.
Nota:
Para conectarse al agente, debe distribuir la raíz de confianza, también conocida como agrupación de confianza, a todos los clientes. En este caso, la raíz de confianza es la CA raíz autofirmada creada por la CLI paso a paso. La distribución de la raíz de confianza es necesaria para que el cliente compruebe la cadena de certificados del servidor. Si los clientes MQTT son cargas de trabajo en el clúster de Kubernetes, también debe crear un ConfigMap con la entidad de certificación raíz y montarlo en el pod.
Uso de una dirección IP externa para el certificado de servidor
Para conectarse con TLS a través de Internet, el certificado de servidor del corredor MQTT debe tener su nombre de host externo o su dirección IP como SAN. En producción, este suele ser un nombre DNS o una dirección IP conocida. Sin embargo, durante la fase de desarrollo/pruebas, es posible que no sepa qué nombre de host o dirección IP externa se ha asignado antes de la implementación. Para resolverlo, implemente primero el agente de escucha sin el certificado de servidor, cree el certificado de servidor y el secreto con la dirección IP externa e importe el secreto al agente de escucha.
Si intenta implementar el cliente de escucha TLS de ejemplo manual-tls-listener
pero el secreto de Kubernetes al que se hace referencia server-cert-secret
no existe, se crea el servicio asociado, pero los pods no se inician. El servicio se crea porque el operador necesita reservar la dirección IP externa para el cliente de escucha.
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
Sin embargo, se espera este comportamiento mientras importamos el certificado de servidor. Los registros del administrador de mantenimiento mencionan que el corredor MQTT está esperando el certificado de servidor.
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.
Nota:
Por lo general, en un sistema distribuido, los registros de los pods no son deterministas y se deben usar con precaución. La forma correcta para mostrar información como esta es a través de eventos de Kubernetes y del estado de los recursos personalizados, que se encuentra en el trabajo pendiente. Considere el paso anterior como solución temporal.
Aunque los pods del front-end no estén en uso, la dirección IP externa ya está 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
A partir de aquí, siga los mismos pasos que antes para crear un certificado de servidor con esta dirección IP externa en --san
y cree el secreto de Kubernetes de la misma forma. Una vez creado el secreto, este se importa automáticamente en el cliente de escucha.