Skip to main content

Gateway Helm Chart Reference

Complete reference for the NoETL Gateway Helm chart configuration.

Chart Source

The Helm chart is located at automation/helm/gateway/.

Chart Location

automation/helm/gateway/
├── Chart.yaml
├── values.yaml
└── templates/
├── deployment.yaml
├── service.yaml
└── ingress.yaml

Installation

# Basic installation
helm upgrade --install noetl-gateway automation/helm/gateway \
-n gateway --create-namespace \
--set image.repository=us-central1-docker.pkg.dev/PROJECT/noetl/noetl-gateway

# With custom values file
helm upgrade --install noetl-gateway automation/helm/gateway \
-n gateway -f my-values.yaml

Values Reference

Namespace

namespace: gateway

The Kubernetes namespace where gateway resources are deployed.

Image Configuration

image:
repository: "" # Container image repository (required)
tag: "latest" # Image tag
pullPolicy: IfNotPresent # Image pull policy

Examples:

# Google Artifact Registry
image:
repository: us-central1-docker.pkg.dev/my-project/noetl/noetl-gateway
tag: "20260127115929"

# Docker Hub
image:
repository: myorg/noetl-gateway
tag: "v1.0.0"

Service Configuration

service:
type: LoadBalancer # Service type: LoadBalancer, ClusterIP, NodePort
port: 8090 # Service port (internal)
nodePort: null # NodePort (only for type: NodePort)
loadBalancerIP: "" # Static IP for LoadBalancer

Service Types:

TypeUse CaseExternal Access
ClusterIPInternal only, use with IngressVia Ingress
LoadBalancerDirect external accessVia cloud LB
NodePortTesting, on-premVia node IP:port

Static IP Example:

service:
type: LoadBalancer
loadBalancerIP: "34.46.180.136"

Ingress Configuration

ingress:
enabled: false # Enable Kubernetes Ingress
className: gce # Ingress class (gce, nginx, etc.)
annotations: {} # Additional annotations
host: gateway.example.com # Hostname
tls:
enabled: true # Enable TLS
secretName: "" # TLS secret name (if not using managed cert)
managedCertificate:
enabled: true # Use GKE managed certificate
name: gateway-managed-cert

GKE Ingress with Managed Certificate:

ingress:
enabled: true
className: gce
host: gateway.mydomain.com
tls:
enabled: true
managedCertificate:
enabled: true
name: gateway-managed-cert

Nginx Ingress with cert-manager:

ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
host: gateway.mydomain.com
tls:
enabled: true
secretName: gateway-tls
managedCertificate:
enabled: false

Environment Variables

env:
routerPort: "8090"
noetlBaseUrl: "http://noetl.noetl.svc.cluster.local:8082"
rustLog: "info,gateway=debug"
corsAllowedOrigins: "http://localhost:8080,http://localhost:8090"
natsUrl: "nats://nats.nats.svc.cluster.local:4222"
natsUpdatesSubjectPrefix: "playbooks.executions."
VariableDescriptionRequired
routerPortPort gateway listens onYes
noetlBaseUrlNoETL server URLYes
rustLogRust logging configurationNo
corsAllowedOriginsComma-separated CORS originsYes
natsUrlNATS server URLNo
natsUpdatesSubjectPrefixNATS subject prefixNo

CORS Origins Examples:

# Development
corsAllowedOrigins: "http://localhost:3000,http://localhost:8080"

# Production
corsAllowedOrigins: "https://app.mydomain.com,https://admin.mydomain.com"

# Multiple environments
corsAllowedOrigins: "http://localhost:3000,https://staging.mydomain.com,https://app.mydomain.com"

Resource Limits

resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"

Recommended settings by environment:

EnvironmentMemory RequestMemory LimitCPU RequestCPU Limit
Development64Mi256Mi50m200m
Staging128Mi512Mi100m500m
Production256Mi1Gi200m1000m

Common Deployment Patterns

Development (Local Testing)

# values-dev.yaml
namespace: gateway-dev

service:
type: ClusterIP

env:
rustLog: "debug,gateway=trace"
corsAllowedOrigins: "http://localhost:3000,http://localhost:8080,http://localhost:8090"

resources:
requests:
memory: "64Mi"
cpu: "50m"

Production with LoadBalancer

# values-prod.yaml
namespace: gateway

service:
type: LoadBalancer
loadBalancerIP: "34.46.180.136"

env:
rustLog: "info,gateway=info"
corsAllowedOrigins: "https://app.mydomain.com"
noetlBaseUrl: "http://noetl.noetl.svc.cluster.local:8082"

resources:
requests:
memory: "256Mi"
cpu: "200m"
limits:
memory: "1Gi"
cpu: "1000m"

Production with Ingress

# values-prod-ingress.yaml
namespace: gateway

service:
type: ClusterIP

ingress:
enabled: true
className: gce
host: gateway.mydomain.com
tls:
enabled: true
managedCertificate:
enabled: true
name: gateway-cert

env:
corsAllowedOrigins: "https://app.mydomain.com"

Upgrading

# Upgrade with new values
helm upgrade noetl-gateway automation/helm/gateway -n gateway \
--set image.tag=new-version

# Rollback if needed
helm rollback noetl-gateway -n gateway

# View history
helm history noetl-gateway -n gateway

Uninstalling

# Uninstall release
helm uninstall noetl-gateway -n gateway

# Delete namespace (if desired)
kubectl delete namespace gateway

# Release static IP (if no longer needed)
gcloud compute addresses delete gateway-static-ip --region=us-central1