Google Kubernetes Engine Gateway Collector Load Balancer

Use a Google Cloud Load Balancer to proxy traffic to your Gateway Collector.

Google Kubernetes Engine Gateway Collector Load Balancer

Use a Kubernetes LoadBalancer Service to expose the Bindplane Gateway Collector to external clients on Google Kubernetes Engine (GKE). This guide provides production-ready examples for creating an external TCP load balancer that mirrors your existing ClusterIP Service, optional configuration for a static public IP, and an internal load balancer (ILB) for private access. Validation steps and troubleshooting guidance are included.

A LoadBalancer Service is preferable to a ClusterIP + Ingress configuration, as the LoadBalancer service can manage HTTP, gRPC, TCP. Traditional HTTP Ingress solutions do not support L4 TCP load balancing.

Overview

Expose the Bindplane Gateway Collector to external senders on Google Kubernetes Engine (GKE) using a Kubernetes LoadBalancer Service. This creates a Google Cloud TCP Network Load Balancer that proxies traffic to the gateway on all required ports (OTLP gRPC/HTTP, Splunk HEC/TCP).

This guide builds on the default deployment, which includes a ClusterIP Service in the bindplane-agent namespace. You will create a second LoadBalancer Service that mirrors the same ports and selector for external traffic.

Assumptions

Bindplane Gateway Collector is already deployed in bindplane-agent.

kubectl -n bindplane-agent get all
NAME                                               READY   STATUS    RESTARTS   AGE
pod/bindplane-gateway-agent-847d69c756-4nbmj       1/1     Running   0          52s
pod/bindplane-gateway-agent-847d69c756-4vjb5       1/1     Running   0          8d
pod/bindplane-gateway-agent-847d69c756-5tgnb       1/1     Running   0          22d
pod/bindplane-gateway-agent-847d69c756-pd4ld       1/1     Running   0          157m
pod/bindplane-gateway-agent-847d69c756-rghj4       1/1     Running   0          8d

NAME                                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
service/bindplane-gateway-agent            ClusterIP   10.4.226.118   <none>        4317/TCP,4318/TCP   694d

NAME                                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/bindplane-gateway-agent        8/8     8            8           561d

Deployment

1) Create an external LoadBalancer Service

Create a new service that matches the ports and labels of the gateway collector deployment, with type: LoadBalancer. This provisions a Google Cloud external TCP load balancer for each port.

  • The externalTrafficPolicy: Cluster setting is recommended for even distribution. If you need to preserve the original client IP, set externalTrafficPolicy: Local (ensure sufficient pods on nodes to pass health checks).

Apply the service:

1a) Optional: Use a static external IP

Reserve a regional static IP in the same region as your GKE cluster, then reference it via spec.loadBalancerIP.

Add the IP to the service and apply:

1b) Optional: Create an internal load balancer (ILB)

For private access inside your VPC, annotate the service to use an internal TCP load balancer.

Optionally specify a reserved internal IP from your subnet via loadBalancerIP.

2) Verify provisioning

Wait for the EXTERNAL-IP (or internal IP) to be assigned:

Example output once ready:

3) Test connectivity

Simple TCP checks from a client on the Internet (or within VPC for ILB):

For functional tests, point an OpenTelemetry SDK or collector at 203.0.113.10:4317/4318. For Splunk HEC you will need a valid token and TLS if required by your configuration.

Notes and troubleshooting

  • GKE creates firewall rules and health checks automatically. If using NetworkPolicy or custom firewalls, ensure NodePort and health check traffic is permitted.

  • Multiple ports are supported on a single Service; GKE creates a forwarding rule and backend for each.

  • If using externalTrafficPolicy: Local, ensure there is at least one ready pod on nodes receiving traffic, otherwise health checks may fail and the LB will not route to that node.

  • Keep the original ClusterIP service for in-cluster traffic and service discovery; the LoadBalancer service is for external/VPC ingress.

Reference: Exposed ports

The LoadBalancer service should mirror your ClusterIP ports and targets so both in-cluster and external clients reach the same endpoints.

Name
Port
Protocol
Purpose

otlp-grpc

4317

TCP

OpenTelemetry OTLP gRPC

otlp-http

4318

TCP

OpenTelemetry OTLP HTTP

splunk-tcp

9997

TCP

Splunk forwarder (TCP)

splunk-hec

8088

TCP

Splunk HEC

Last updated

Was this helpful?