A kgateway ingress controller demo with full observability using OpenTelemetry and a local observability stack (Jaeger, Prometheus, OpenSearch) and/or Dash0.
- Creates a multi-node Kind cluster with kgateway (Envoy-based Gateway API implementation)
- Deploys local observability stack: Jaeger, Prometheus, and OpenSearch
- Configures OTLP metrics, distributed tracing, and access logs
- Deploys OpenTelemetry Collectors with dual export to Dash0 and local stack
- Includes Node.js demo application with auto-instrumentation
- Uses Gateway API with HTTPRoute for standards-based routing
- Docker
- Kind
- kubectl
- Helm 3
- Optional: Dash0 account with API token (telemetry also exports to local stack)
-
Configure environment variables:
# From the root directory (dash0-examples) cp .env.template .env # Edit .env with your Dash0 credentials
-
Deploy everything:
./00_run.sh
-
Access the gateway:
kubectl port-forward -n kgateway-system svc/http 8080:80
-
Test the application:
curl -H 'Host: node.dash0-examples.com' http://localhost:8080/
The demo sends telemetry to both Dash0 (primary cloud backend) and a local observability stack for offline inspection.
Log in to your Dash0 dashboard to view:
- Traces: Filter by
service.name = "kgateway-http" - Metrics: Search for
envoy_*andkgateway_*metrics - Logs: Access logs with correlated trace IDs
Jaeger (Traces):
kubectl port-forward -n default svc/jaeger-query 16686:16686Visit: http://localhost:16686
Prometheus (Metrics):
kubectl port-forward -n default svc/prometheus 9090:9090Visit: http://localhost:9090
OpenSearch Dashboards (Logs):
kubectl port-forward -n default svc/opensearch-dashboards 5601:5601Visit: http://localhost:5601
- Username:
admin - Password:
SecureP@ssw0rd123
To view logs in OpenSearch Dashboards:
- Navigate to "Discover" in the left menu
- Create an index pattern:
otel-logs* - Select
@timestampas the time field - Explore the logs with trace correlation
./01_cleanup.sh