# Use a Custom Service for External Access

> For the complete documentation index, see [llms.txt](https://docs.redpanda.com/llms.txt). Component-specific: [streaming-full.txt](https://docs.redpanda.com/streaming-full.txt)

---
title: Use a Custom Service for External Access
latest-redpanda-tag: v24.3.9
latest-console-tag: v3.7.3
latest-operator-version: v26.1.4
# EOL = End-of-Life (support lifecycle status)
page-is-nearing-eol: "false"
page-is-past-eol: "true"
page-eol-date: December 3, 2025
latest-connect-version: 4.93.0
docname: kubernetes/networking/external/k-custom-services
page-component-name: streaming
page-version: "24.3"
page-component-version: "24.3"
page-component-title: Streaming
page-relative-src-path: kubernetes/networking/external/k-custom-services.adoc
page-edit-url: https://github.com/redpanda-data/docs/edit/v/24.3/modules/manage/pages/kubernetes/networking/external/k-custom-services.adoc
description: Expose your Redpanda cluster to clients outside of your Kubernetes cluster by using a custom Service.
page-git-created-date: "2024-01-04"
page-git-modified-date: "2024-09-17"
support-status: past end-of-life
---

<!-- Source: https://docs.redpanda.com/streaming/24.3/manage/kubernetes/networking/external/k-custom-services.md -->

By default, the Helm chart deploys a NodePort Service to provide external access to the Redpanda cluster. To use a custom Service, set `external.service.enabled` to `false`. Then, you can create your own Services to provide external access.

#### Helm + Operator

`redpanda-cluster.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Redpanda
metadata:
  name: redpanda
spec:
  chartRef: {}
  clusterSpec:
    external:
      enabled: true
      service:
        enabled: false
      addresses:
      - <subdomain-or-ip-address-for-replica-0>
      - <subdomain-or-ip-address-for-replica-1>
      - <subdomain-or-ip-address-for-replica-2>
```

```bash
kubectl apply -f redpanda-cluster.yaml --namespace <namespace>
```

#### Helm

##### --values

`disable-external-service.yaml`

```yaml
external:
  enabled: true
  service:
    enabled: false
  addresses:
  - <subdomain-or-ip-address-for-replica-0>
  - <subdomain-or-ip-address-for-replica-1>
  - <subdomain-or-ip-address-for-replica-2>
```

```bash
helm upgrade --install redpanda redpanda/redpanda --namespace <namespace> --create-namespace \
  --values disable-external-service.yaml --reuse-values
```

##### --set

```bash
helm upgrade --install redpanda redpanda/redpanda --namespace <namespace> --create-namespace \
  --set external.enabled=true \
  --set external.service.enabled=false \
  --set "external.addresses={<subdomain-or-ip-address-for-replica-0>,<subdomain-or-ip-address-for-replica-1>,<subdomain-or-ip-address-for-replica-2>}"
```

Make sure to configure `external.addresses` with addresses that point to the worker nodes on which each Redpanda broker is running. The addresses must be listed in order of the StatefulSet replicas. For example, the first address in the list is assigned to the first replica (`redpanda-0` by default).

If you use a custom domain (`external.domain`), provide subdomains for each replica in `external.addresses`. This custom domain is appended to each subdomain (`<subdomain-for-replica-0>.<custom-domain>`).

Make sure that your custom Service listens on the advertised ports that are configured for each listener. See [Configure Listeners in Kubernetes](https://docs.redpanda.com/streaming/24.3/manage/kubernetes/networking/k-configure-listeners/).

## [](#next-steps)Next steps

-   [Configure Listeners in Kubernetes](https://docs.redpanda.com/streaming/24.3/manage/kubernetes/networking/k-configure-listeners/)

-   [Connect to Redpanda in Kubernetes](https://docs.redpanda.com/streaming/24.3/manage/kubernetes/networking/k-connect-to-redpanda/)


## [](#suggested-reading)Suggested reading

-   [Redpanda Helm Specification](https://docs.redpanda.com/streaming/24.3/reference/k-redpanda-helm-spec/#external)

-   [Redpanda CRD Reference](https://docs.redpanda.com/streaming/24.3/reference/k-crd/)