Eloquent

Documentation

Networking, Ingress & Domains

Eloquent supports two networking models: platform-managed ingress with automatic TLS, or customer-managed routing where your own reverse proxy handles traffic.

Ingress Models

Platform-Managed Ingress

The Helm chart deploys ingress-nginx resources with cert-manager for automatic Let's Encrypt TLS:

ingress:
  enabled: true
  className: nginx
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/proxy-body-size: "100m"

This mode creates Kubernetes Ingress resources for all enabled frontend apps and backend services.

Customer-Managed Ingress

For deployments where your organization manages its own reverse proxy (nginx, F5, Azure Application Gateway, etc.):

ingress:
  enabled: false

When disabled, your reverse proxy routes external traffic to Kubernetes services via internal DNS:

your-proxy → api-gateway-service.eloquent.svc.cluster.local:80
your-proxy → eloquent-app.eloquent.svc.cluster.local:3000
your-proxy → admin-app.eloquent.svc.cluster.local:3000

You are responsible for TLS termination and certificate management.

Domain Configuration

Required Domains

SettingPurposeExample
customerDeployment.domainBase domain (used for CORS)customer.example.com
customerDeployment.apiGatewayPublicUrlPublic API endpointhttps://api.customer.example.com
customerDeployment.chatPublicUrlChat SSE/WebSocket endpointhttps://chat.customer.example.com/v1/chat
customerDeployment.sandboxSubdomainSandbox service subdomainsandbox
appBaseUrlApp URL (used in invite emails)https://app.customer.example.com

Per-App Hosts

frontend:
  eloquentApp:
    host: app.customer.example.com
  adminApp:
    host: admin.customer.example.com

Chat Service Networking

The chat service requires special ingress configuration for SSE streaming and WebSocket support:

SettingValuePurpose
websocket-serviceschat-serviceEnable WebSocket upgrade
proxy-bufferingoffRequired for SSE streaming
affinitycookieSticky sessions for WebSocket
proxy-read-timeout3600Long-lived connections (1 hour)

These are automatically configured in the Helm chart's chat ingress template. If using customer-managed ingress, apply equivalent settings to your reverse proxy.

Cross-Namespace Communication

In customer deployments, the platform typically runs in its own namespace (e.g., eloquent) while customer applications run in a separate namespace:

customer-namespace/
  └── customer-nginx → eloquent-namespace/api-gateway-service

Services are accessed via Kubernetes internal DNS:

<service-name>.<namespace>.svc.cluster.local

CORS Configuration

CORS is configured through the customerDeployment.domain setting. The API Gateway allows requests from:

  • The configured domain and its subdomains
  • Any domains specified in the domain allowlist

Ensure all frontend application domains are covered by the CORS configuration.

Proxy Settings

SettingDefaultDescription
Body size limit100MBMaximum upload size
Read timeout60s (3600s for chat)Maximum response wait time
WebSocket supportEnabled for chatFull-duplex for legacy transport
Proxy bufferingOff for chatRequired for SSE streaming