Overview
This guide covers everything needed to deploy xpander.ai onto your Kubernetes cluster — SSL certificates, ingress controller, Helm chart installation, DNS configuration, API key management, verification, and SDK setup.1. Create a Self-Hosted Location
- Go to app.xpander.ai/admin_settings#locations
- Click “Add Location”
- Fill in the details:
- Name: e.g., “Production”
- URL (optional): Your server’s FQDN (e.g.,
xpander.my-company.com) - Use dash-based subdomains: Enable if your DNS uses
chat-xpander.domain.comformat instead ofchat.xpander.domain.com
- Click “Continue to connect location”
organizationId, environmentId, and deploymentManagerApiKey.
After deployment, the location page shows a Components tab with heartbeat status for each service, and a Configuration panel where you can toggle Cloud Controls (Chat, Streaming, Scheduler).
2. External Access (Choose One)
The xpander services (agent controller, chat UI, API, etc.) communicate with each other internally via Kubernetes Services — no ingress is needed for that. You only need external access so that users can reach the chat UI, API, and other endpoints from their browser or client.Already have an ingress controller? Skip to step 4 (Install the Helm Chart) and set
ingress.enabled=true.Option A: VPN / Corporate Network Access
If your organization has a VPN that routes into the VPC, users can access xpander services directly — no ingress controller, NLB, ACM certificate, or public DNS needed. Point internal DNS records to the Kubernetes services:ingress.enabled=false (the default). Skip ahead to step 4.
Option B: Public Access via Ingress + NLB
For public or internet-facing access, set up an ACM certificate, nginx ingress controller, and NLB.SSL Certificate
Request an ACM certificate for your domain.<DOMAIN> / *.<DOMAIN> (shared) and one for *.chat.<DOMAIN>:
Ingress Controller
Install the nginx ingress controller with AWS NLB and ACM SSL termination:4. Install the Helm Chart
Add the Repository
Install
Set the deployment manager URL based on your connectivity choice:- Public:
https://deployment-manager.xpander.ai - PrivateLink:
https://deployment-manager-privatelink.xpander.ai(requires PrivateLink setup)
Configuration Parameters
Required:
Optional API keys — add during install or later:
Using a Values File
For production, use a values file instead of--set flags:
xpander-values.yaml
5. DNS Configuration
Create wildcard CNAME records pointing*.<DOMAIN> and *.chat.<DOMAIN> to the NLB hostname. Both are required — the chat UI generates per-thread subdomains under chat.<DOMAIN>.
6. Verification
Check All Pods Are Running
Running with 1/1 ready:
Test PrivateLink (If Using PrivateLink)
Test Ingress
Test via Port Forward
Connect in xpander.ai Console
- Go to app.xpander.ai/admin_settings#locations
- Find your location — it should show as “Self-deploy”
- Click the Components tab to verify all services show Alive status with recent heartbeats
Managing API Keys
Adding or Updating Keys After Installation
Usehelm upgrade with --reuse-values to add or change API keys without affecting existing configuration:
Secret not updating after helm upgrade?
Secret not updating after helm upgrade?
The Secret field name mapping:
xpander-static secret has a Helm resource keep policy — helm upgrade may not update it on subsequent installs. If your API key isn’t being picked up after a helm upgrade, set it directly in the secret:Using Kubernetes Secrets (Recommended for Production)
Using the SDK with Self-Hosted
Configure the xpander SDK to point to your Agent Controller endpoint.When using self-hosted deployment, use the Agent Controller API key generated during Helm installation, not your xpander.ai cloud API key.
Using with Agno Framework
Make sure your
base_url points to the Agent Controller endpoint (e.g., https://agent-controller.{your-domain}), not the root domain.For more SDK examples, see the Self-Hosted SDK Configuration.
