Prerequisites
- A running Kubernetes cluster (version 1.23+)
- Helm package manager (version 3.11.3+)
- kubectl installed and configured to access your cluster
- Basic understanding of Kubernetes concepts (pods, services, secrets, ingress)
System Requirements
The following are minimum requirements for running Infisical on Kubernetes:
Per-pod resource defaults (configurable in values.yaml):
For production deployments with many users or secrets, increase these values accordingly.
Deployment Steps
1
Create a namespace
Create a dedicated namespace for Infisical to isolate resources:All subsequent commands will use this namespace. You can also add
-n infisical to each kubectl command if you prefer not to set a default context.2
Add the Helm repository
Add the Infisical Helm charts repository and update your local cache:
3
Create the secrets
Infisical requires a Kubernetes secret named
infisical-secrets containing essential configuration. Create this secret in the same namespace where you’ll deploy the chart.- Proof of concept
- Production
For testing or proof-of-concept deployments, the Helm chart automatically provisions in-cluster PostgreSQL and Redis instances. You only need to provide the core secrets:
The in-cluster PostgreSQL and Redis are not configured for high availability. Use this only for testing purposes.
4
Create values.yaml
Create a For all available configuration options, see the full values.yaml reference.
values.yaml file to configure your deployment. Start with a minimal configuration:values.yaml
5
Install the Helm chart
Deploy Infisical using Helm:This command installs Infisical if it doesn’t exist, or upgrades it if it does.
6
Verify the deployment
Check that all pods are running:You should see output similar to:Verify the ingress is configured:Test the health endpoint (port-forward if ingress isn’t ready):
Managing Your Deployment
Viewing Pod Logs
To view logs from Infisical pods:Scaling the Deployment
Infisical’s application layer is stateless, so you can scale horizontally:values.yaml and re-apply:
values.yaml
Upgrading Infisical
To upgrade to a new version:-
Back up your database before upgrading:
-
Update the image tag in your
values.yaml: -
Apply the upgrade:
-
Monitor the rollout:
Uninstalling Infisical
To completely remove Infisical from your cluster:Persistent Volume Claims
The Helm chart creates Persistent Volume Claims (PVCs) for PostgreSQL and Redis data storage when using in-cluster databases.Default PVCs
Viewing PVCs
Customizing Storage
To customize storage in yourvalues.yaml:
values.yaml
Additional Configuration
SMTP/Email Configuration
SMTP/Email Configuration
Infisical uses email for user invitations, password resets, and notifications. Add SMTP configuration to your secrets:Common SMTP providers:
After updating secrets, restart the Infisical pods:
Custom Domain with TLS
Custom Domain with TLS
To configure a custom domain with HTTPS:1. Using cert-manager (recommended):First, install cert-manager if not already installed:Create a ClusterIssuer for Let’s Encrypt:Update your 2. Using existing TLS certificate:Create a TLS secret with your certificate:Update your Apply the changes:
cluster-issuer.yaml
values.yaml:values.yaml
values.yaml:values.yaml
Network Policies
Network Policies
For enhanced security, implement network policies to restrict traffic between pods:
network-policy.yaml
Network policies require a CNI plugin that supports them (e.g., Calico, Cilium, Weave Net). Verify your cluster supports network policies before applying.
External Database and Redis
External Database and Redis
For production, use external managed services instead of in-cluster databases.Disable in-cluster databases in values.yaml:Add connection strings to your secrets:Recommended managed services:
values.yaml
Prometheus Monitoring
Prometheus Monitoring
Infisical exposes Prometheus metrics when enabled.1. Add telemetry configuration to your secrets:Include these in your 2. Create a ServiceMonitor (if using Prometheus Operator):See the Monitoring Guide for full setup instructions.
infisical-secrets:servicemonitor.yaml
High Availability Configuration
High Availability Configuration
For production high availability:1. Multiple Infisical replicas:2. Pod Disruption Budget:3. External HA database:Use managed PostgreSQL with multi-AZ deployment (e.g., AWS RDS Multi-AZ, GCP Cloud SQL HA).4. External HA Redis:Use managed Redis with replication (e.g., AWS ElastiCache with cluster mode, GCP Memorystore).
values.yaml
pdb.yaml
Troubleshooting
Pods stuck in Pending state
Pods stuck in Pending state
Check pod events:Common causes:
- Insufficient cluster resources: Check node capacity with
kubectl describe nodes - PVC not bound: Check PVC status with
kubectl get pvc -n infisical - Image pull errors: Verify image name and check for ImagePullBackOff errors
- Scale up your cluster or reduce resource requests
- Ensure a StorageClass is available for dynamic provisioning
- Check image registry credentials if using a private registry
Pods in CrashLoopBackOff
Pods in CrashLoopBackOff
View pod logs:Common causes:
- Missing or invalid secrets: Verify
infisical-secretsexists and contains required keys - Database connection failed: Check
DB_CONNECTION_URIis correct and accessible - Invalid configuration: Check for typos in environment variables
Cannot access Infisical via Ingress
Cannot access Infisical via Ingress
Check ingress status:Check ingress controller logs:Verify service is accessible:Common causes:
- Ingress controller not installed
- DNS not pointing to ingress IP
- TLS certificate issues
Database connection errors
Database connection errors
Check PostgreSQL pod:Test database connectivity:For external databases:
- Verify the connection string in
infisical-secrets - Check network policies and security groups allow traffic
- Ensure SSL certificates are configured if required
Redis connection errors
Redis connection errors
Check Redis pod:Test Redis connectivity:For external Redis:
- Verify the
REDIS_URLininfisical-secrets - Check if TLS is required (use
rediss://instead ofredis://)
Helm upgrade fails
Helm upgrade fails
Check Helm release status:Rollback to previous version:Force upgrade (use with caution):
Performance issues
Performance issues
Check resource usage:Check for resource throttling:Solutions:
- Increase resource limits in
values.yaml - Scale horizontally by increasing
replicaCount - Use external managed databases for better performance
- Enable connection pooling for PostgreSQL
Full Values Reference
Complete values.yaml example
Complete values.yaml example
values.yaml
Your Infisical instance should now be running on Kubernetes. Access it via the ingress hostname you configured, or use
kubectl port-forward for local testing.
