ngrok

Developer-friendly tunnels with a free tier, request inspection, and easy setup.

Prerequisites

  • ngrok account (sign up free)
  • ngrok authtoken from your dashboard

Setup

1. Create Secret

kubectl create secret generic ngrok-authtoken \
  --from-literal=authtoken=YOUR_AUTHTOKEN \
  -n ktube-system

2. Create TunnelProvider

kubectl apply -f - <<EOF
apiVersion: ktube.dev/v1alpha1
kind: TunnelProvider
metadata:
  name: ngrok-provider
spec:
  type: ngrok
  ngrok:
    authTokenSecretRef:
      name: ngrok-authtoken
      namespace: ktube-system
      key: authtoken
EOF

3. Create Tunnel

kubectl apply -f - <<EOF
apiVersion: ktube.dev/v1alpha1
kind: Tunnel
metadata:
  name: ngrok-tunnel
  namespace: default
spec:
  providerRef:
    name: ngrok-provider
EOF

Create Binding

Expose your service with an auto-generated ngrok URL (free tier):

apiVersion: ktube.dev/v1alpha1
kind: TunnelBinding
metadata:
  name: my-binding
spec:
  tunnelRef:
    name: ngrok-tunnel
  protocol: http
  service:
    name: my-service
    port: 8080

Custom Domains

Custom domains require a paid ngrok plan. Configure in your binding:

apiVersion: ktube.dev/v1alpha1
kind: TunnelBinding
metadata:
  name: prod-binding
spec:
  tunnelRef:
    name: ngrok-tunnel
  hostname: api.yourdomain.com
  service:
    name: api-server
    port: 8080

Request Inspection

ngrok provides a web interface for inspecting requests. Access it via the ngrok dashboard or by port-forwarding the ngrok pod's inspection port.

Limitations

  • Free tier: Random URLs, rate limits
  • No DNS management: Configure DNS manually for custom domains
  • Single tunnel: Free tier limited to one tunnel per authtoken