From zero to traffic in three steps
Install Wayreeve Gateway in your own VPC, connect it to Wayreeve Cloud and point your apps at it. Prompts and responses stay in your environment.
Step 1
Install Wayreeve Gateway in your VPC
This puts Wayreeve inside your own network, where your apps can reach it and your data never leaves your control. One installer does the work and checks the result.
What you need
A Kubernetes cluster with encrypted storage, and the Wayreeve image we send when your pilot starts.
Full requirements
- Kubernetes 1.29+ (EKS, AKS, GKE or other) with a CNI that enforces NetworkPolicy.
- A default StorageClass with encrypted volumes. The database is one SQLite file on a 20 GiB volume.
- Optional: a secret store (AWS Secrets Manager, GCP Secret Manager or Azure Key Vault) through External Secrets Operator. Without one, the installer generates a Kubernetes Secret.
- The Wayreeve image, by digest. We send it when your pilot starts.
Wayreeve runs as a single pod with one database file. Size the node and volume for that pod.
Already run Kubernetes?
Run the installer on your cluster. It checks your tools, sets up a locked-down space for Wayreeve, installs it, connects it to Wayreeve Cloud and confirms it is healthy.
Show the command
deploy/install.sh --image <registry>/wayreeve@sha256:<digest> \
--cp-url https://console.<domain> \
--enrollment-token-file ./enrollment-token.txt
Checks kubectl and helm, creates the namespace with Pod Security restricted, generates the secret key and workspace token, installs the chart, waits for readiness and runs helm test. Every gateway enrolls with Wayreeve Cloud, so --cp-url and the token are required (step 2). Add --dry-run to print the Helm arguments only.
Starting from scratch?
Our recipes build everything on AWS, Google Cloud or Azure: the network, the cluster, encryption keys, backups and a secrets store. Then they run the installer for you.
Show the commands
# AWS: VPC, EKS, KMS, S3 backups, Secrets Manager, Bedrock endpoint
cd deploy/recipes/aws/terraform && cp terraform.tfvars.example terraform.tfvars # edit it
cd - && ENROLLMENT_TOKEN_FILE=./enrollment-token.txt deploy/recipes/aws/create-cluster.sh \
-- --cp-url https://console.<domain> --image <registry>/wayreeve@sha256:<digest>
# GCP: same pattern; add --no-gateway to create no public endpoint
ENROLLMENT_TOKEN_FILE=./enrollment-token.txt deploy/recipes/gcp/create-cluster.sh \
-- --cp-url https://console.<domain> --image <registry>/wayreeve@sha256:<digest>
# Azure: needs --host and a PKCS#12 certificate
ENROLLMENT_TOKEN_FILE=./enrollment-token.txt deploy/recipes/azure/create-cluster.sh \
--host <your-data-plane-host> --tls-pfx ./queue.pfx \
-- --cp-url https://console.<domain> --image <registry>/wayreeve@sha256:<digest>
Already have a cluster? Use install-existing.sh in the same folder. Everything after -- goes to install.sh.
Open the console
Reach the console securely from your own machine and create the owner account with the one-time access token the installer generated.
Show the commands
kubectl -n wayreeve port-forward svc/wayreeve 4318:4318 # then open http://127.0.0.1:4318
kubectl -n wayreeve get secret <app-secret> -o jsonpath='{.data.access-token}' | base64 -d | pbcopy
Create the owner account with the workspace access token. The installer prints the exact secret name.
Step 2
Connect it to Wayreeve Cloud
Wayreeve Cloud issues your licence and the signed terms feed. Your gateway calls it outbound; it never calls in.
- Sign in at
https://console.<domain>Your org admin account comes from a one-time invite link (valid 7 days). - Enrollment tokens → New enrollment tokenGive it a label and an expiry, then Create token. It is shown once. Save it to
enrollment-token.txt. - Run step 1 with
--cp-urland the tokenOn start, the gateway generates its own key pair, enrolls with the one-time token and ignores the token afterwards. - Check both sidesWayreeve Cloud: the deployment appears under Deployments. Wayreeve Gateway: the Overview page shows the licence, edition, last sync and terms catalog version (
Feed v…). - Delete the enrollment token SecretThe installer names it.
Allow the egress
NetworkPolicy matches IP ranges. Add Wayreeve Cloud's published addresses to networkPolicy.egressAllowCIDRs, TCP 443 only.
Air-gapped
node server/controlplane-cli.ts offline-request --out request.jws
Send us request.jws (a public key and a signature, nothing secret). Wayreeve Cloud registers it (Register an air-gapped deployment) and issues an offline licence. Set it as WAYREEVE_LICENSE_FILE. It works on that installation only.
We set up your Wayreeve Cloud account when your pilot starts. If Wayreeve Cloud is ever unreachable, inference keeps working.
Step 3
Connect your apps
- Add a provider connectionConsole: Providers → Connect a provider (OpenAI, Anthropic, OpenAI-compatible). Bedrock, Vertex and Azure connections are created through the API, keyless with cloud workload identity:
curl https://<your-data-plane>/api/connections \
-H "Authorization: Bearer $WAYREEVE_ACCESS_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Vertex us-east5","kind":"vertex",
"settings":{"project":"<gcp-project>","location":"us-east5",
"auth":{"source":"workload_identity"}}}'
# Bedrock: "kind":"bedrock", "settings":{"region":"us-east-1","auth":{"source":"web_identity"}}
# Azure: "kind":"azure_openai", "auth":{"source":"workload_identity", ...}
- Add a model and grant the connectionModels → Add model on that connection. On Providers, grant the connection to the projects that may use it. Ungranted models answer 403
connection_not_granted. - Set data classesData classes ships with
public,internal,confidential,pciandphi. Edit their rules or add a class with New class. - Create a project and a keyNew project, then Access & limits → Create API key. The key is shown once.
- Change the base URL in your existing codeOpenAI SDK:
https://<your-data-plane>/v1. Anthropic SDK:https://<your-data-plane>.
Before
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
client.chat.completions.create(model="gpt-…", messages=msgs)
After
from openai import OpenAI
client = OpenAI(base_url="https://<your-data-plane>/v1",
api_key=os.environ["WAYREEVE_API_KEY"],
default_headers={"X-Wayreeve-Data-Class": "phi"})
client.chat.completions.create(model="<your-model-id>", messages=msgs)
The class can also come from the key or the project default. A request can narrow it, never widen it. If no permitted route exists, you get 403 data_class_not_permitted naming the rule and its source.
Get the image and an enrollment token
Both come with a pilot, along with the pilot guide and proposed success criteria.