Your First Webhook
Walk through delivering a real webhook from Stripe (or any HTTP source) to a service running in your private Kubernetes cluster.
Target Service
Create a simple webhook receiver in your cluster:
kubectl create deployment webhook-echo \
--image=hashicorp/http-echo \
--namespace zen-mesh \
-- --listen=:8080 --text="webhook received!"
kubectl expose deployment webhook-echo \
--port=8080 \
--namespace zen-mesh
This creates an HTTP service that returns "webhook received!" on any request.
Create a Destination in Zen Mesh
- Go to Destinations in the dashboard
- Click Add Destination
- Fill in:
- Name:
my-first-destination - URL:
http://webhook-echo:8080/webhooks - Cluster: Select your connected cluster
- Name:
- Click Save
Zen Mesh will give you an ingestion URL like:
https://ingest.zen-mesh.io/hooks/<hook-id>
Configure Your Webhook Source
Stripe
- Go to Stripe Dashboard → Developers → Webhooks
- Click Add endpoint
- Paste the Zen Mesh ingestion URL
- Select events:
payment_intent.succeeded,invoice.paid - Click Create endpoint
GitHub
- Go to your repository → Settings → Webhooks → Add webhook
- Paste the Zen Mesh ingestion URL
- Content type:
application/json - Select events:
push,pull_request - Click Add webhook
Generic cURL Test
curl -X POST "https://ingest.zen-mesh.io/hooks/<hook-id>" \
-H "Content-Type: application/json" \
-d '{"event": "test", "data": "hello from zen-mesh"}'
Verify Delivery
- Go to Deliveries in the dashboard
- You should see the event with a 200 or Delivered status
- Check the pod logs:
kubectl logs -n zen-mesh -l app=webhook-echo --tail=20
You should see the request logged.
Troubleshooting
| Problem | Solution |
|---|---|
| Cluster shows "Not Connected" | Check agent logs: kubectl logs -n zen-mesh -l app=zen-agent |
| Delivery shows "Failed" | Check destination URL is reachable from within the cluster |
| Events not appearing | Verify the hook URL is correct and the source is sending events |