ScyllaDB University Live | Free Virtual Training Event
Learn more
ScyllaDB Documentation Logo Documentation
  • Deployments
    • Cloud
    • Server
  • Tools
    • ScyllaDB Manager
    • ScyllaDB Monitoring Stack
    • ScyllaDB Operator
  • Drivers
    • CQL Drivers
    • DynamoDB Drivers
    • Supported Driver Versions
  • Resources
    • ScyllaDB University
    • Community Forum
    • Tutorials
Install
Search Ask AI
ScyllaDB Docs ScyllaDB Operator Deploy ScyllaDB Set up networking Configure external access

Configure external access¶

This page explains how to configure ScyllaDB clusters for access from outside the Kubernetes cluster using the exposeOptions API.

Note

The following exposeOptions sub-fields are immutable after the ScyllaDB cluster is created: nodeService.type, broadcastOptions.clients.type, and broadcastOptions.nodes.type. Other fields (such as annotations and loadBalancerClass) can be updated.

Expose options overview¶

The exposeOptions field controls two things:

  1. Node Service type — what kind of Kubernetes Service is created for each ScyllaDB node.

  2. Broadcast options — what address ScyllaDB advertises to clients and other nodes.

Defaults¶

spec:
  exposeOptions:
    nodeService:
      type: ClusterIP
    broadcastOptions:
      clients:
        type: ServiceClusterIP
      nodes:
        type: ServiceClusterIP

Node Service types¶

Type

Description

Headless

No additional IP allocated. DNS resolves to Pod IP. Use when broadcasting Pod IPs.

ClusterIP

Allocates a cluster-internal virtual IP. Routable only within the Kubernetes cluster.

LoadBalancer

Provisions an external load balancer. Use for internet-facing or cross-VPC access. Supports custom annotations and loadBalancerClass.

Broadcast address types¶

Type

Source

Use case

PodIP

Pod.status.podIP

When Pod IPs are routable (same VPC, VPC peering, multi-DC).

ServiceClusterIP

Service.spec.clusterIP

In-cluster access only.

ServiceLoadBalancerIngress

Service.status.loadBalancer.ingress[0]

External access via load balancer.

Common deployment scenarios¶

In-cluster only (default for ScyllaCluster)¶

Clients and nodes communicate via ClusterIP. The cluster is not reachable from outside Kubernetes.

spec:
  exposeOptions:
    nodeService:
      type: ClusterIP
    broadcastOptions:
      clients:
        type: ServiceClusterIP
      nodes:
        type: ServiceClusterIP

VPC-routable clients, in-cluster nodes¶

Clients within the VPC connect directly to Pod IPs. Nodes communicate via ClusterIP within the Kubernetes cluster.

spec:
  exposeOptions:
    nodeService:
      type: ClusterIP
    broadcastOptions:
      clients:
        type: PodIP
      nodes:
        type: ServiceClusterIP

Multi-VPC (cross-datacenter)¶

Both clients and nodes use Pod IPs. Requires VPC peering or a shared network between Kubernetes clusters. Use this configuration for multi-DC clusters with multiple ScyllaCluster resources connected via externalSeeds.

spec:
  exposeOptions:
    nodeService:
      type: Headless
    broadcastOptions:
      clients:
        type: PodIP
      nodes:
        type: PodIP

Internet-facing via LoadBalancer¶

Each ScyllaDB node gets a dedicated load balancer with a public or internal address. Clients connect through the load balancer addresses. Nodes communicate via ClusterIP within the same Kubernetes cluster.

spec:
  exposeOptions:
    nodeService:
      type: LoadBalancer
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-scheme: internal
        service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
    broadcastOptions:
      clients:
        type: ServiceLoadBalancerIngress
      nodes:
        type: ServiceClusterIP
spec:
  exposeOptions:
    nodeService:
      type: LoadBalancer
      annotations:
        networking.gke.io/load-balancer-type: Internal
    broadcastOptions:
      clients:
        type: ServiceLoadBalancerIngress
      nodes:
        type: ServiceClusterIP

Note

LoadBalancer Services should be configured for TCP passthrough. Check your cloud provider’s documentation for available annotations and configuration options.

TLS for external clients¶

When exposing ScyllaDB externally, the operator-managed CQL serving certificates automatically include the node Service DNS names and IP addresses as Subject Alternative Names (SANs). No additional TLS configuration is needed for CQL.

For Alternator, you can add custom DNS names or IP addresses to the serving certificate using operatorManagedOptions:

spec:
  alternator:
    servingCertificate:
      type: OperatorManaged
      operatorManagedOptions:
        additionalDNSNames:
        - scylladb.example.com
        additionalIPAddresses:
        - 203.0.113.10

Alternatively, use UserManaged certificates from your own PKI or cert-manager for Alternator. See Alternator for details.

Verify external access¶

After applying your expose options, verify that the Services have received external addresses and that ScyllaDB is reachable.

Check Service external addresses¶

kubectl -n scylla get services -l scylla/cluster=scylla

For LoadBalancer services, wait until EXTERNAL-IP is populated (this may take 1–2 minutes on cloud providers):

Expected output:
NAME                                      TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)          AGE
scylla-us-east-1-us-east-1a-0             LoadBalancer   10.96.0.1      203.0.113.10      9042:30000/TCP   2m

Verify broadcast addresses¶

Confirm that ScyllaDB node Services have the expected addresses by inspecting the per-node Services:

kubectl -n scylla get services -l scylla/cluster=scylla -o custom-columns='NAME:.metadata.name,TYPE:.spec.type,CLUSTER-IP:.spec.clusterIP,EXTERNAL-IP:.status.loadBalancer.ingress[0].ip'

Test connectivity¶

Test a CQL connection using the external address:

kubectl run -it --rm --restart=Never cqlsh-test --image=scylladb/scylla \
  -- cqlsh <EXTERNAL-IP> 9042

Replace <EXTERNAL-IP> with the address shown in the Service output.

Related pages¶

  • Discovery endpoint — exposing the discovery Service.

  • Connect via CQL — client connection setup.

  • Networking architecture — how Services and expose options work.

  • Security — TLS certificate management.

Was this page helpful?

PREVIOUS
Set up networking
NEXT
IPv6 networking
  • Create an issue
  • Edit this page

On this page

  • Configure external access
    • Expose options overview
      • Defaults
      • Node Service types
      • Broadcast address types
    • Common deployment scenarios
      • In-cluster only (default for ScyllaCluster)
      • VPC-routable clients, in-cluster nodes
      • Multi-VPC (cross-datacenter)
      • Internet-facing via LoadBalancer
    • TLS for external clients
    • Verify external access
      • Check Service external addresses
      • Verify broadcast addresses
      • Test connectivity
    • Related pages
ScyllaDB Operator
Search Ask AI
  • v1.21
    • master
    • v1.21
    • v1.20
    • v1.19
    • v1.18
  • Get Started
    • What Is ScyllaDB Operator?
    • ScyllaDB Concepts on Kubernetes
  • Install Operator
    • Provision infrastructure
      • Set up a GKE cluster for ScyllaDB
      • Set up an EKS cluster for ScyllaDB
      • Set up an OKE cluster for ScyllaDB
      • Set up an OpenShift cluster for ScyllaDB
    • Install with GitOps
    • Install with Helm
    • Install on OpenShift
  • Deploy ScyllaDB
    • Before you deploy
      • Set up dedicated node pools
      • Configure CPU pinning
      • Configure nodes
      • Configure ScyllaDB Operator
    • Deploy your first cluster
    • Reference deployments
      • Reference deployment: GKE
      • Reference deployment: EKS
      • Reference deployment: OKE
      • Reference deployment: OpenShift
    • Install ScyllaDB Manager
    • Set up networking
      • Configure external access
      • IPv6 networking
        • Getting started with IPv6 networking
        • Configure dual-stack networking
        • Configure IPv6-only networking
        • Migrate clusters to IPv6
        • Troubleshoot IPv6 networking issues
        • IPv6 networking concepts
    • Set up monitoring
      • Set up ScyllaDB Monitoring
      • Set up ScyllaDB Monitoring on OpenShift
      • Expose Grafana
    • Production checklist
  • Connect Your App
    • Connect via CQL
    • Alternator (DynamoDB API)
    • Discovery endpoint
  • Understand
    • Storage
    • Tuning
    • ScyllaDB Manager
    • Networking
    • ScyllaDB Monitoring overview
    • Bootstrap synchronisation
    • Automatic data cleanup
    • Sidecar and pod anatomy
    • Ignition
    • Pod disruption budgets
    • Security
    • StatefulSets and racks
  • Operate
    • Scale, add, remove racks
    • Replace nodes
    • Expand storage volumes
    • Use maintenance mode
    • Back up and restore
    • Restore from backup
    • Perform a rolling restart
    • Migrate a rack to a new node pool
    • Pass additional ScyllaDB arguments
    • Configure precomputed IO properties
  • Upgrade
    • Upgrading ScyllaDB Operator
    • Upgrading ScyllaDB clusters
  • Troubleshoot
    • Investigate pod restarts
    • Change log level on a live cluster
    • Recover from a failed node replace
    • Troubleshoot performance
    • Collect debugging information
      • Collect data with must-gather
      • must-gather contents
      • Query system tables for debugging
    • Collect core dumps
  • Reference
    • 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)
        • ScyllaDBDatacenterNodesStatusReport (scylla.scylladb.com/v1alpha1)
        • ScyllaDBDatacenter (scylla.scylladb.com/v1alpha1)
        • ScyllaDBManagerClusterRegistration (scylla.scylladb.com/v1alpha1)
        • ScyllaDBManagerTask (scylla.scylladb.com/v1alpha1)
        • ScyllaDBMonitoring (scylla.scylladb.com/v1alpha1)
        • ScyllaOperatorConfig (scylla.scylladb.com/v1alpha1)
    • Feature gates
    • IPv6 configuration reference
    • Releases
    • Known issues
    • Conditions reference
    • nodetool alternatives
  • Contributing to ScyllaDB Operator
Docs Tutorials University Contact Us About Us
© 2026, ScyllaDB. All rights reserved. | Terms of Service | Privacy Policy | ScyllaDB, and ScyllaDB Cloud, are registered trademarks of ScyllaDB, Inc.
Last updated on 22 May 2026.
Powered by Sphinx 9.1.0 & ScyllaDB Theme 1.9.2