Skip to content

Access EMQX Cluster through LoadBalancer

Objective

Access the EMQX cluster through a Service of type LoadBalancer.

Configure EMQX Cluster

EMQX CRD apps.emqx.io/v2beta1 supports:

  • Configuring the EMQX Dashboard Service through .spec.dashboardServiceTemplate.
  • Configuring the EMQX cluster listener Service through .spec.listenersServiceTemplate.

Refer to the respective documentation for more details.

  1. Save the following as a YAML file and deploy it using kubectl apply.
yaml
apiVersion: apps.emqx.io/v2beta1 kind: EMQX metadata:  name: emqx spec:  image: emqx/emqx:6.0.1  config:  data: |  license {  key = "..."  }  listenersServiceTemplate:  spec:  type: LoadBalancer  dashboardServiceTemplate:  spec:  type: LoadBalancer

TIP

By default, EMQX starts an MQTT TCP listener tcp-default on port 1883 and a Dashboard HTTP listener on port 18083.

Users can configure new or existing listeners through .spec.config.data, or manage them through the EMQX Dashboard.

EMQX Operator automatically reflects the default listener information in the Service resources. When there is a conflict between the Service configured by the user and the listener configured by EMQX (name or port fields are repeated), EMQX Operator prioritizes the user configuration.

  1. Wait for the EMQX cluster to become ready.

Check the status of the EMQX cluster with kubectl get and make sure that STATUS is Ready. This may take some time.

bash
$ kubectl get emqx emqx NAME STATUS AGE emqx Ready 10m

Add New Listener through EMQX Dashboard

  1. Add a new listener.

Open the EMQX Dashboard and navigate to ConfigurationListeners.

Click the Add Listener button to add a listener with the name test and port 1884, as shown in the following figure:

Then click the Add button to create the listener, as shown in the following figure:

As seen in the figure, the new listener has been created.

  1. Check if the new listener is reflected in the Service.
bash
kubectl get svc  NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE emqx-dashboard NodePort 10.105.110.235 <none> 18083:32012/TCP 13m emqx-listeners NodePort 10.106.1.58 <none> 1883:32010/TCP,1884:30763/TCP 12m

From this output, we can see that the newly added listener on port 1884 has been reflected in the emqx-listeners Service resource.

Connect to the New Listener Using MQTTX

  1. Obtain the external IP of the EMQX listeners service.
bash
external_ip=$(kubectl get svc emqx-listeners -o json | jq -r '.status.loadBalancer.ingress[0].ip')
  1. Connect to the new listener using MQTTX CLI.
bash
$ mqttx conn -h ${external_ip} -p 1884  [4/17/2023] [5:17:31 PM] › … Connecting... [4/17/2023] [5:17:31 PM] › ✔ Connected