Prequisite:
Access to a running HiveMQ Cluster using Kubectl
values.yaml file https://hivemq.atlassian.net/wiki/spaces/HMS/pages/2691039283/Install+HiveMQ+on+the+AKS+cluster#Add-Helm-repository
Using Loadbalancer
Exposing port 1883 using Load Balancer
Exposing ip via load balancer in the following steps makes it public. Please check out HiveMQ authentication and authorisation extensions to control client access and scope. https://www.hivemq.com/products/extensions/
Open values.yaml and search for port 1883 under hivemq.ports.port
ports: - name: "mqtt" port: 1883 expose: true patch: - '[{"op":"add","path":"/spec/selector/hivemq.com~1node-offline","value":"false"},{"op":"add","path":"/metadata/annotations","value":{"service.spec.externalTrafficPolicy":"Local"}}]' # If you want Kubernetes to expose the MQTT port to external traffic # - '[{"op":"add","path":"/spec/type","value":"LoadBalancer"}]'
Uncomment and expose the loadbalancer
ports: - name: "mqtt" port: 1883 expose: true patch: - '[{"op":"add","path":"/spec/selector/hivemq.com~1node-offline","value":"false"},{"op":"add","path":"/metadata/annotations","value":{"service.spec.externalTrafficPolicy":"Local"}}]' # If you want Kubernetes to expose the MQTT port to external traffic - '[{"op":"add","path":"/spec/type","value":"LoadBalancer"}]'
Save the file and apply the changes
helm upgrade hivemq --install hivemq/hivemq-operator --values values.yaml
Check if the service for port 1883 has an external IP address now (in our case its hivemq-hivemq-mqtt) and notice the external port IP.
kubectl get services
In case the external IP is not visible, you can uninstall hivemq and reinstall it again.
Uninstall HiveMQ
helm uninstall hivemq
Reapply the changes
helm upgrade hivemq --install hivemq/hivemq-operator --values values.yaml
Connect To Your HiveMQ Cluster using MQTT CLI
Once your HiveMQ cluster is up and running, you are ready to connect clients to the cluster with the MQTT-CLI. To obtain the exposed
ENDPOINT
of the created load balancer on which clients connect to your cluster, enter:
kubectl get hivemq-clusters
Output similar to the following displays: (20.79.151.169 in our case)
$ kubectl get hivemq-clusters NAME SIZE IMAGE VERSION STATUS ENDPOINT MESSAGE hivemq 3 hivemq/hivemq4 k8s-4.24.0 Running 20.79.151.169 Live updates completed successfully
Create a subscriber
mqtt sub -i SUB -h 20.79.151.169 -p 1883 -T -t '#'
Create a publisher and publish the message. This should send a message to the subscriber.
Test: Hello
mqtt publish --topic Test --message Hello --host 20.79.151.169 --port 1883
You have now successfully connected a new MQTT client to a HiveMQ cluster hosted on Azure.
Using Port Forwarding
Exposing port 1883 using Port Forwarding
Run the following command to get the services and look for the MQTT service (hivemq-hivemq-mqtt in our case)
kubectl get services
Run the port forwarding as follows
kubectl port-forward hivemq-hivemq-mqtt 1883:1883
After running this command, you can access your service on localhost:1883
Connect To Your HiveMQ Cluster using the MQTT CLI
Create a subscriber
mqtt sub -i SUB -h localhost -p 1883 -T -t '#'
Create a publisher and publish the message. This should send a message to the subscriber.
Test: Hello
mqtt publish --topic Test --message Hello --host localhost --port 1883
You have now successfully connected a new MQTT client to a HiveMQ cluster hosted on Azure.
To learn more ways to interact with HiveMQ, see the MQTT-CLI documentation.