Skip to main content
Version: 5.17

Tutorial: Connect to Hazelcast from outside Kubernetes

Learn how to connect to a Hazelcast cluster running in Kubernetes from outside of the Kubernetes environment.

Overview​

In this tutorial, you'll configure two available options for exposing your Hazelcast cluster to clients outside Kubernetes:

  • Unisocket - client requests are load balanced between Hazelcast members.
  • Smart - the client connects to all members and sends requests directly to the members owning the data.

The tutorial should take approximately 5 to 10 minutes to complete.

Prerequisites​

Before you begin, make sure that you have:

This tutorial uses load balancer services to connect to Hazelcast from outside of the Kubernetes cluster. Therefore, it is essential to ensure that your Kubernetes cluster can assign public IP addresses to load balancer services. This is particularly important if you are using a local Kubernetes cluster such as Minikube or Kind.

Unisocket​

The first option is to use the Unisocket type. This option uses the standard Kubernetes mechanism that automatically load balances the traffic to Hazelcast members.

Start the Hazelcast cluster​

Create the Hazelcast cluster and enable exposing externally using the unisocket type:

shell
kubectl apply -f - <<EOF
apiVersion: hazelcast.com/v1alpha1
kind: Hazelcast
metadata:
name: my-hazelcast-unisocket
spec:
licenseKeySecretName: hazelcast-license-key
exposeExternally:
type: Unisocket
discoveryServiceType: LoadBalancer
EOF

For discoveryServiceType you can use:

  • LoadBalancer - create an external LoadBalancer for discovery service;
  • NodePort - expose the discovery service via NodePort.

Verify the Hazelcast cluster​

Check the cluster status:

shell
kubectl get hazelcast my-hazelcast-unisocket
NAME STATUS MEMBERS
my-hazelcast Running 3/3

After verifying that the cluster is Running and all the members are ready (3/3), find the discovery address:

shell
kubectl get hazelcastendpoint my-hazelcast-unisocket
NAME TYPE ADDRESS
my-hazelcast-unisocket Discovery 192.0.2.0:5701

The ADDRESS column shows the external address of your Hazelcast cluster.

Connect Hazelcast Clients to the cluster​

  1. Open the examples folder to access all sample clients:

    shell
    cd hazelcast-platform-operator-expose-externally

    The sample code for this tutorial is in the docs/modules/ROOT/examples/operator-expose-externally directory.

  2. Configure the Hazelcast client with the external address and disable smart routing to use the unisocket connection.

bash
clc config add hz cluster.name=dev cluster.address=<EXTERNAL-IP>

Now you can start the application.

Fill a map:

bash
for i in {1..10};
do
clc -c hz map set --name map1 key-$i value-$i;
done

Check the map size:

bash
clc -c hz map size --name map1

Smart client​

The second option is to use the Smart type. With this option, each Hazelcast member is exposed with its own service (it can be either LoadBalancer or NodePort). Hazelcast maps keys to members and sends data directly to the member that contains the right data partition.

Start the Hazelcast cluster​

Create the Hazelcast cluster and enable exposing externally using the smart type:

shell
kubectl apply -f - <<EOF
apiVersion: hazelcast.com/v1alpha1
kind: Hazelcast
metadata:
name: my-hazelcast-smart
spec:
licenseKeySecretName: hazelcast-license-key
exposeExternally:
type: Smart
discoveryServiceType: LoadBalancer
memberAccess: LoadBalancer
EOF

This creates the Hazelcast cluster along with one LoadBalancer service for discovery and one LoadBalancer service for each pod.

For discoveryServiceType you can use:

  • LoadBalancer - creates an external LoadBalancer for discovery service.
  • NodePort - exposes the discovery service via NodePort.

For memberAccess you can use:

  • LoadBalancer - lets the client access Hazelcast member with the LoadBalancer service.
  • NodePortNodeName - lets the client access Hazelcast member with the NodePort service and the node name.
  • NodePortExternalIP - lets the client access Hazelcast member with the NodePort service and the node external IP/hostname.

Verify the Hazelcast cluster​

Check the cluster status:

shell
kubectl get hazelcast my-hazelcast-smart
NAME STATUS MEMBERS
my-hazelcast Running 3/3

After verifying that the cluster is Running and all the members are ready (3/3), find the discovery and member addresses:

shell
kubectl get hazelcastendpoint --selector="app.kubernetes.io/instance=my-hazelcast-smart"
NAME TYPE ADDRESS
my-hazelcast Discovery 198.51.100.0:5701
my-hazelcast-0 Member 203.0.113.134:5701
my-hazelcast-1 Member 203.0.113.134:5701
my-hazelcast-2 Member 203.0.113.128:5701
my-hazelcast-wan WAN 198.51.100.0:5701

The ADDRESS column displays the external addresses of your Hazelcast cluster and members.

Connect Hazelcast clients to the cluster​

Configure the Hazelcast client to connect to the cluster external address.

bash
clc config add hz cluster.name=dev cluster.address=<EXTERNAL-IP>

Now you can start the application.

Fill a map:

bash
for i in {1..10};
do
clc -c hz map set --name map1 key-$i value-$i;
done

Check the map size:

bash
clc -c hz map size --name map1

Clean up​

When you've finished, clean up the created resources remove the Hazelcast Custom Resources:

shell
kubectl delete hazelcast my-hazelcast-unisocket
kubectl delete hazelcast my-hazelcast-smart

Summary​

In this tutorial, you learned how to connect to a Hazelcast cluster running in Kubernetes from outside of the Kubernetes environment, using both the Unisocket and Smart options.

Next steps​

See also: