Skip to main content
The xpander services 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? Give the installer a --domain (or set ingress.enabled=true in Helm values) and skip to DNS records.

Option A: VPN or 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:
When installing, skip the domain prompt (ingress stays disabled, the default).

Option B: Public access via ingress + NLB

For public or internet-facing access, set up an ACM certificate, an nginx ingress controller, and an NLB, using the three steps below: SSL Certificate, Ingress Controller, and DNS Records.

SSL certificate

Request an ACM certificate for your domain.
The certificate must include a wildcard for *.chat.<DOMAIN> because the xpander chat UI generates per-thread subdomains (e.g., moccasin-prawn.chat.<DOMAIN>). Standard wildcards only match one level, so *.<DOMAIN> does not cover these. If you omit *.chat.<DOMAIN>, the chat UI will show SSL certificate errors for thread URLs.
Add the DNS validation CNAME records to your Route 53 hosted zone. There will be two unique validation records, one for <DOMAIN> / *.<DOMAIN> (shared) and one for *.chat.<DOMAIN>:
Wait for validation:

Ingress controller

Install the nginx ingress controller with AWS NLB and ACM SSL termination:
Get the NLB hostname (you’ll need it for the DNS records):

DNS records

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>.
This creates the following endpoints: Test it:
Not reachable, or certificate errors on chat URLs? See Troubleshooting.