ScyllaDB University Live | Free Virtual Training Event
Learn more
ScyllaDB Documentation Logo Documentation
  • Server
  • Cloud
  • Tools
    • ScyllaDB Manager
    • ScyllaDB Monitoring Stack
    • ScyllaDB Operator
  • Drivers
    • CQL Drivers
    • DynamoDB Drivers
  • Resources
    • ScyllaDB University
    • Community Forum
    • Tutorials
Download
ScyllaDB Docs Scylla Operator Resources ScyllaClusters ScyllaDB clients Discovering ScyllaDB Nodes

Discovering ScyllaDB Nodes¶

Preface¶

Outside the Kubernetes ecosystem, ScyllaDB nodes are usually set up on static IP addresses and a fixed subset of them is configured as the initial contact points for ScyllaDB clients. This has several disadvantages because this particular subset of nodes can be down at the time the client is (re)started, or the nodes can be replaced and change their IP addresses. The latter can be mitigated by using DNS and updating the records.

Scylla Operator allows setting up ScyllaDB in several network configurations, some of which are based on ephemeral IPs. This makes solving the above-mentioned issues more pressing.

ScyllaDB Discovery Endpoint¶

For every ScyllaCluster, the operator will set up a Kubernetes Service (an internal load balancer) selecting all ScyllaDB nodes and the internal Kubernetes controllers make sure to continuously update its endpoints with a subset of ScyllaDB nodes that are ready. Because of that, you can always talk to ScyllaDB through this endpoint, as long as there are nodes to back it. In case you are in the same Kubernetes cluster you can also use internal DNS for this service.

Clients can use this endpoint for the initial connection to reach one of the ScyllaDB nodes that are ready and from there the drivers will automatically discover the per-node IP address for every ScyllaDB node that’s part of this cluster.

This service is called <sc-name>-client and in its default configuration it uses ClusterIP which is virtual and local to the Kubernetes cluster. It can be configured to be backed by an external load balancer, be exposed through an Ingress, an additional hop or in other ways. Depending on how you have configured the networking, use the appropriate IP address or DNS name for your client.

Here is an example of how the unmodified service looks like:

kubectl get scyllacluster/scylla service/scylla-client
NAME                                       READY   MEMBERS   RACKS   AVAILABLE   PROGRESSING   DEGRADED   AGE
scyllacluster.scylla.scylladb.com/scylla   1       1         1       True        True          True       10d

NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                                                                                                   AGE
service/scylla-client   ClusterIP   10.102.44.43   <none>        7000/TCP,7001/TCP,9042/TCP,9142/TCP,19042/TCP,19142/TCP,7199/TCP,10001/TCP,9180/TCP,5090/TCP,9100/TCP,9160/TCP,8043/TCP   10d

You can get only the ClusterIP using

kubectl get service/scylla-client -o='jsonpath={.spec.clusterIP}'

or use its DNS name (scylla-client.<sc-namespace>.svc).

Exposing Discovery Endpoint Behind Kubernetes Cluster Boundary¶

In case you are connecting from outside the Kubernetes cluster and using Pod IPs as your exposure type, you can expose just the <sc-name>-client service using an internal load balancer. Having a stable contact point is especially important when using ephemeral Pod IPs. Services configure internal load balancer using provider-specific annotations, so this may differ with your provider.

Tip

To learn more about exposing ScyllaClusters, visit our dedicated documentation page.

kubectl patch service/<sc-name>-client -p '{"metadata": {"annotations": {"networking.gke.io/load-balancer-type": "Internal"}}, "spec": {"type": "LoadBalancer"}}'
kubectl wait --for=jsonpath='{.status.loadBalancer.ingress}' service/<sc-name>-client
kubectl get service/<sc-name>-client -o='jsonpath={.status.loadBalancer.ingress[0].ip}'
kubectl patch service/<sc-name>-client -p '{"metadata": {"annotations": {"service.beta.kubernetes.io/aws-load-balancer-scheme": "internal", "service.beta.kubernetes.io/aws-load-balancer-backend-protocol": "tcp"}}, "spec": {"type": "LoadBalancer"}}'
kubectl wait --for=jsonpath='{.status.loadBalancer.ingress}' service/<sc-name>-client
kubectl get service/<sc-name>-client -o='jsonpath={.status.loadBalancer.ingress[0].hostname}'

Was this page helpful?

PREVIOUS
ScyllaDB clients
NEXT
Using CQL
  • Create an issue
  • Edit this page

On this page

  • Discovering ScyllaDB Nodes
    • Preface
    • ScyllaDB Discovery Endpoint
      • Exposing Discovery Endpoint Behind Kubernetes Cluster Boundary
Scylla Operator
  • v1.17
    • v1.17
    • v1.16
    • v1.15
    • master
  • Architecture
    • Overview
    • Storage
      • Overview
      • Local CSI Driver
    • Tuning
    • ScyllaDB Manager
  • Installation
    • Overview
    • Kubernetes
      • Generic
      • EKS
      • GKE
    • GitOps (kubectl)
    • Helm
  • Resources
    • Overview
    • ScyllaClusters
      • ScyllaClusters
      • ScyllaDB clients
        • Discovering ScyllaDB Nodes
        • Using CQL
        • Using Alternator (DynamoDB)
      • Node operations using Scylla Operator
        • Upgrading version of Scylla
        • Replacing a Scylla node
        • Automatic cleanup and replacement in case when k8s node is lost
        • Maintenance mode
        • Restore from backup
      • Deploying multi-datacenter ScyllaDB clusters in Kubernetes
        • Build multiple Amazon EKS clusters with inter-Kubernetes networking
        • Build multiple GKE clusters with inter-Kubernetes networking
        • Deploy a multi-datacenter ScyllaDB cluster in multiple interconnected Kubernetes clusters
      • Exposing ScyllaDB cluster
    • ScyllaDBClusters
      • ScyllaDBClusters
      • Exposing ScyllaDB cluster
    • ScyllaDBMonitorings
    • NodeConfigs
    • ScyllaOperatorConfigs
    • RemoteKubernetesCluster
  • Quickstarts
    • Deploying ScyllaDB on GKE
    • Deploying ScyllaDB on EKS
  • Support
    • Support overview
    • Known issues
    • Troubleshooting
      • Troubleshooting installation issues
    • Gathering data with must-gather
    • Releases
  • API Reference
    • scylla.scylladb.com
      • NodeConfig (scylla.scylladb.com/v1alpha1)
      • RemoteKubernetesCluster (scylla.scylladb.com/v1alpha1)
      • RemoteOwner (scylla.scylladb.com/v1alpha1)
      • ScyllaCluster (scylla.scylladb.com/v1)
      • ScyllaDBCluster (scylla.scylladb.com/v1alpha1)
      • ScyllaDBDatacenter (scylla.scylladb.com/v1alpha1)
      • ScyllaDBMonitoring (scylla.scylladb.com/v1alpha1)
      • ScyllaOperatorConfig (scylla.scylladb.com/v1alpha1)
Docs Tutorials University Contact Us About Us
© 2025, ScyllaDB. All rights reserved. | Terms of Service | Privacy Policy | ScyllaDB, and ScyllaDB Cloud, are registered trademarks of ScyllaDB, Inc.
Last updated on 04 June 2025.
Powered by Sphinx 8.1.3 & ScyllaDB Theme 1.8.6