On-Prem Infrastructure Requirements
This page covers all infrastructure that must be provisioned before deploying Unstract. Complete these steps first, then proceed to the Deployment Guide.
LLMWhisperer is a required dependency for Unstract and must be deployed before deploying Unstract. Refer to the LLMWhisperer On-Prem Deployment Guide for its deployment details.
Infrastructure Prerequisites
The following infrastructure must be provisioned by the customer team before proceeding with the Helm installation. Use whatever provisioning approach follows your internal standards (Terraform, Pulumi, CloudFormation, manual setup, etc.).
Kubernetes Cluster
- Recommended version: >= 1.29 (latest tested: 1.35)
- Node autoscaling should be enabled
- Single AZ is sufficient for standard deployments. For production HA deployments, multi-AZ is supported — see the HA Deployment Guide
- Ingress controller as a K8s cluster add-on for load balancer creation (recommended)
- Ingress requires a maximum timeout of 900 seconds to work as expected (see Appendix c)
- In-house or cloud provider observability stack (recommended)
PostgreSQL Database
- Supported versions: 15 or 17
- Minimum specs: 1 vCPU, 8 GiB RAM, 50 GiB SSD
- Autoscale enabled (recommended)
- A dedicated database for Unstract should be created within the PostgreSQL instance
Object Storage
- Managed blob storage: AWS S3 / Azure Blob Storage / GCP GCS
- IAM / service principal with read/write access to the target bucket or container
- See Remote Storage Configuration for detailed setup
Message Broker (RabbitMQ)
Unstract uses RabbitMQ as its task message broker — it is required for every deployment. RabbitMQ runs in-cluster (there is no external service to provision): the chart provisions a RabbitmqCluster custom resource, which is reconciled by the RabbitMQ Cluster Operator.
The operator is cluster-scoped and is installed once per cluster as part of the required LLMWhisperer on-prem setup (the LLMWhisperer dependency noted at the top of this page). No separate Unstract step installs it, but the operator must already be present before you deploy Unstract.
DNS & SSL
- A domain for pointing to Unstract (e.g.,
unstract.<customer-domain>.com) - An active SSL certificate is required — HTTPS is mandatory for the authentication system to function properly
Networking
- Recommend allocating a subnet of
/18CIDR size for pods - Recommended: use a CNI that enforces NetworkPolicy — for example GKE with Dataplane V2, Calico, Cilium, or OpenShift's OVN-Kubernetes. Without an enforcing CNI, NetworkPolicy objects are accepted by the Kubernetes API server but never applied, so any pod in the cluster can reach any other pod's ports — including Unstract's in-cluster Redis. See Restricting Redis Network Access.
Node Profile
| Machine Type | Label | Taint (NoSchedule) | Min | Max |
|---|---|---|---|---|
| 4 vCPU and 32 GiB | service: unstract | service: unstract | 2 | 4 |
The above is a small profile suitable for initial setup. For production sizing, see Appendix b.
It is expected that the workloads are to be deployed on non-spot nodepools.
Remote Storage Configuration
AWS
For EKS deployments, IRSA (IAM Roles for Service Accounts) is the recommended authentication method. It eliminates static credentials and provides per-pod scoped permissions for S3 and Bedrock. The full setup — S3 bucket creation, IAM policies, OIDC provider association, role + trust policy, Helm wiring, and verification — is covered in a dedicated guide:
➡️ AWS IRSA Setup for EKS Deployments (available from v0.158.4)
For non-EKS deployments or environments where IRSA is not available, use static credentials:
Static Credentials
on-prem.values.yaml:
PERMANENT_REMOTE_STORAGE: &PERMANENT_REMOTE_STORAGE '{"provider": "s3", "credentials": {"key":"<s3-access-key>","secret":"<s3-access-secret>","endpoint_url":"<s3-endpoint-url>"}}'
| Config placeholder | Expected credential |
|---|---|
s3-access-key | AWS access key |
s3-access-secret | AWS secret key |
s3-endpoint-url | e.g. https://s3.ap-south-1.amazonaws.com/ |