Cómo configurar Mosquitto MQTT Broker en Kubernetes

Cómo configurar Mosquitto MQTT Broker en Kubernetes

He estado intentando configurar ChirpStack en un espacio de Kubernetes, pero no parece funcionar para mí y no puedo encontrar ningún recurso en línea que haya sido la solución.

**chirpstack-application-server-6d6f8d699c-nlrmx   1/1     Running            0          44s\
chirpstack-gateway-bridge-5454b7f9f-fm5wl          1/1     Running            0          73s\
chirpstack-mosquitto-646899d74d-d7bhl              0/1     CrashLoopBackOff   3          85s\
chirpstack-network-server-66cdf9bdf7-rhzg5         1/1     Running            0          55s**

Arriba están todas las cápsulas que tengo en un cajero automático. El servidor de aplicaciones, el servidor de red y el puente de puerta de enlace se activan y ejecutan, sin embargo, el corredor Mosquitto pasa a 'Completo' y va directamente a CrashLoopBackOff.

Pensé que podría tener algo que ver con la falta de configuración, así que pasé unos días armando el archivo mosquitto.conf con "allow_anonymous true" con la esperanza de obtener una conexión desde cualquiera de mis componentes de ChirpStack, pero los registros simplemente indique un error de conexión mqtt rechazada.

Salida de registros de kubectl chirpstack-application-server

time="2020-12-10T15:01:41Z" level=error msg="integration/mqtt: connecting to broker error, will retry in 2s: Network Error : dial tcp 10.244.146.236:1883: i/o timeout"

Como no se pudo establecer ninguna conexión, supuse que era lo contrario y necesitaba agregar el archivo de contraseña y hacer que enable_anonymous fuera falso. A continuación se muestra mi configuración actual por si alguien tiene una idea de lo que está mal.

configMap-1.yml

kind: ConfigMap
metadata:
  name: mosquitto-password
  namespace: ****
  labels:
    app: chirpstack-mosquitto  
data:
  password_file.txt: |
    admin:admin
    user:user
    app-server:app-server
    net-server:net-server
    gateway-bridge:gateway-bridge

configMap.yml

kind: ConfigMap
metadata:
  name: mosquitto-config
  namespace: ****
  labels:
    app: chirpstack-mosquitto  
data:
  mosquitto.conf: |    
    persistence true
    persistence_location /mosquitto/data/
    # per_listener_settings false
    log_dest stdout
    # listener 1886
    listener 1883
    protocol mqtt
    # Defaults to false, unless there are no listeners defined in the configuration
    # file, in which case it is set to true, but connections are only allowed from
    # the local machine.
    allow_anonymous false
    password_file /.config/mosquitto/auth/password_file.txt
    #    cafile: /mosquitto/config/certs/ca.crt
    #    certfile: /mosquitto/config/certs/server.crt
    #    keyfile: /mosquitto/config/certs/server.key
    require_certificate false
    use_identity_as_username false

implementación.yml

kind: Deployment
metadata:
  name: chirpstack-mosquitto
  namespace: ****  
spec:
  replicas: 1
  selector:
    matchLabels:
      app: chirpstack-mosquitto
  template:
    metadata:
      labels:
        app: chirpstack-mosquitto
    spec:
      containers:
      - name: chirpstack-mosquitto
        image: ****/chirpstack/eclipse-mosquitto:1.6.12
        ports:
        - containerPort: 1883
        volumeMounts:
        - name: password-file
          mountPath: /.config/mosquitto/auth/password_file.txt
          subPath: password_file.txt
        - name: mosquitto-data
          mountPath: /mosquitto/data
        - name: mosquitto-log
          mountPath: /mosquitto/log
        - name: config-file
          mountPath: /.config/mosquitto/mosquitto.conf
          subPath: mosquitto.conf         
      securityContext:
        runAsNonRoot: true
        fsGroup: 1
        runAsGroup: 1000
        runAsUser: 1000
        supplementalGroups:
        - 1    
      volumes:
      - name: config-file
        configMap:
          name: mosquitto-config
      - name: password-file
        configMap:
          name: mosquitto-password        
      - name: mosquitto-data
        emptyDir: {}
      - name: mosquitto-log
        emptyDir: {}   

servicio.yml

kind: Service
metadata:
  name: chirpstack-mosquitto
  namespace: 186215-poc  
spec:
  type: ClusterIP
  ports:
    - name: mqtt 
      port: 1883
      targetPort: 1883
      protocol: TCP  
  selector:
    app: chirpstack-mosquitto    

Respuesta1

mosquito/configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: mosquitto-config
data:
  mosquitto.conf: |-
    # Ip/hostname to listen to.
    # If not given, will listen on all interfaces
    #bind_address

    # Port to use for the default listener.
    port 1883

    # Allow anonymous users to connect?
    # If not, the password file should be created
    allow_anonymous true

    # The password file.
    # Use the `mosquitto_passwd` utility.
    # If TLS is not compiled, plaintext "username:password" lines bay be used
    # password_file /mosquitto/config/passwd

mosquito/deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mosquitto
spec:
  selector:
    matchLabels:
      app: mosquitto
  template:
    metadata:
      labels:
        app: mosquitto
    spec:
      containers:
      - name: mosquitto
        image: eclipse-mosquitto:2.0
        resources:
          requests:
            cpu: "50m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 1883
        volumeMounts:
            - name: mosquitto-config
              mountPath: /mosquitto/config/mosquitto.conf
              subPath: mosquitto.conf
      volumes:
        - name: mosquitto-config
          configMap:
            name: mosquitto-config

mosquito/servicio.yaml:

apiVersion: v1
kind: Service
metadata:
  name: mosquitto
spec:
  selector:
    app: mosquitto
  ports:
  - port: 1883
    targetPort: 1883

ahora:

$ kubectl apply -f mosquitto/
$ kubectl get pods,deployments,services -o wide
$ kubectl logs -l app=gateway-bridge -f --all-containers 

Respuesta2

Sigue estos pasos:

  1. clon de githttps://github.com/halkeye-helm-charts/mosquitto.git

  2. Modificarvalores.yamlarchivo, agregandoPuerto de nodooEquilibrador de cargay permitiendo laclase de almacenamiento.

    service:
       type: NodePort
    
    persistence:
       storageClass: "oci-bv"
    
  3. Implementar a través decarta de timón:helm install mosquitto --generate-name

  4. Ver elmosquitoregistros de pod: kubectl logs pod/mosquitto-service-name. P.ej:

    ingrese la descripción de la imagen aquí

  5. Pruebe el servicio:

    Abonado:

    docker run -it --rm --name mqtt-subscriber efrecon/mqtt-client sub -h ip_address -p port -t "/#" 
    

    Editor:

    docker run -it --rm --name mqtt-publisher efrecon/mqtt-client pub -h ip- address -m "SOOntestMessage" -p port -t "/test"
    
  6. Debería recibir mensajes sobre el suscriptor:

    ingrese la descripción de la imagen aquí

información relacionada