Use this file to discover all available pages before exploring further.
The Infisical Operator is a collection of Kubernetes controllers that streamline how secrets are managed between Infisical and your Kubernetes cluster.
It provides multiple Custom Resource Definitions (CRDs) which enable you to:
Sync secrets from Infisical into Kubernetes.
Push new secrets from Kubernetes to Infisical.
Manage dynamic secrets and automatically create time-bound leases.
When these CRDs are configured, the Infisical Operator will continuously monitor for changes and perform necessary updates to keep your Kubernetes secrets up to date.
It can also automatically reload dependent Deployment resources whenever relevant secrets are updated.
The operator supports two CRD API versions: v1beta1 and v1alpha1. Use v1beta1 for new installations; v1alpha1 is legacy and will be deprecated soon.
If you are already using the External Secrets operator, you can view the
integration documentation for it
here.
Supported Kubernetes versions
Supported Kubernetes distributions
The following Kubernetes minor releases are currently supported. The latest operator version is tested against each Kubernetes version. It may work with other versions of Kubernetes, but those are not officially supported.
1.33
1.32
1.31
1.30
1.29
The Infisical Kubernetes Operator has been tested successfully in the following hosted Kubernetes environments:
Amazon Elastic Kubernetes Service (EKS)
Google Kubernetes Engine (GKE)
Microsoft Azure Kubernetes Service (AKS)
Oracle Container Engine for Kubernetes (OKE)
Red Hat OpenShift
It may work in other Kubernetes distributions, but those are not officially supported. Please report any issues here.
The operator can be installed via Helm. Helm is a package manager for Kubernetes that allows you to define, install, and upgrade Kubernetes applications.Install the latest Helm repository
The operator can be installed either cluster-wide or restricted to a specific namespace.
If you require stronger isolation and stricter access controls, a namespace-scoped installation may make more sense.
Cluster Wide Installation
Namespace Scoped Installation
When installing the operator cluster-wide, the operator will watch and manage CRDs across all namespaces in the cluster.
This is the default installation method and the quickest way to get started with using the operator. Cluster-wide installations are useful for:
Simplified Management: A single operator instance manages secrets across all namespaces
Centralized Operations: One deployment to monitor, update, and maintain
Cross-Namespace Flexibility: Easily manage secrets for applications spanning multiple namespaces
Quick Setup: Works out of the box with no additional RBAC configuration required
The operator can be configured to watch and manage secrets in a specific namespace instead of having cluster-wide access. This is useful for:
Enhanced Security: Limit the operator’s permissions to only specific namespaces instead of cluster-wide access
Multi-tenant Clusters: Run separate operator instances for different teams or applications
Resource Isolation: Ensure operators in different namespaces don’t interfere with each other
Development & Testing: Run development and production operators side by side in isolated namespaces
For multiple namespace-scoped installations, only the first installation should install CRDs. Subsequent installations should set installCRDs: false to avoid conflicts as CRDs are cluster-wide resources.
By default a service account is created for the operator based on the operator release name.
You can bring your own service account by setting controllerManager.serviceAccount.create to false and setting controllerManager.serviceAccount.name to the name of the service account you want to use in your values.yaml file.Example values.yaml file:
values.yaml
controllerManager: serviceAccount: create: false name: my-service-account# other values...
Please note that if you set controllerManager.serviceAccount.create to false, the service account needs to already exist in the namespace you are installing the operator in.
Custom service accounts are supported in chart version 0.10.11 and above. Please upgrade your helm chart to 0.10.11 or above before attempting to use custom service accounts.
The v1beta1 API separates authentication and connection configuration into their own reusable CRDs, making it easier to manage credentials across multiple secret resources.
The operator exposes standard controller-runtime metrics. For a complete list of available metrics, see the Kubebuilder metrics reference.Key metrics to monitor:
To connect to Infisical instances behind a private/self-signed certificate, you can configure TLS settings
to point to a CA certificate stored in a Kubernetes secret resource.
Fetching secrets from Infisical as-is via the operator may not be enough. This is where templating functionality may be helpful.
Using Go templates, you can format, combine, and create new key-value pairs from secrets fetched from Infisical before storing them as Kubernetes Secrets or ConfigMaps.When a template is set, only the keys defined in template.data are included in the output.
When no template is set, all fetched secrets are included as-is.Each secret is available in the template context as .SECRET_KEY, which is an object with two accessors:
Extracts all private keys from a PKCS#12 archive and returns them as PKCS#8 PEM-encoded blocks (-----BEGIN PRIVATE KEY-----...).
The archive must not be password-protected — use pkcs12keyPass for password-protected archives.Signature
Extracts all certificates from a PKCS#12 archive and returns them as an ordered PEM chain (-----BEGIN CERTIFICATE-----...).
Sort order: leaf → intermediate(s) → root. If disjunct or multiple leaf certs are provided, they are returned as-is.
The archive must not be password-protected — use pkcs12certPass for password-protected archives.Signature
Takes a PEM-encoded certificate and private key and creates a base64-encoded PKCS#12 archive.
The output is not password-protected — use pemToPkcs12Pass to set a password.Signature
Takes a full PEM-encoded certificate chain (leaf + intermediates + root) and a private key, and creates a base64-encoded PKCS#12 archive that includes the entire chain.
The output is not password-protected — use fullPemToPkcs12Pass to set a password.Signature
Filters PEM blocks by type from a bundle containing multiple PEM blocks (e.g. extract only CERTIFICATE or PRIVATE KEY blocks).
Common PEM types: CERTIFICATE, PRIVATE KEY, PUBLIC KEY, RSA PRIVATE KEY.Signature
Filters PEM certificates by their position in a certificate chain. The chain is automatically ordered before filtering.
Accepted types: leaf (end-entity certificate), intermediate (all intermediate CA certificates), root (root CA certificate).
Returns an empty string if the requested type is not present in the chain.Signature
Takes a JSON-serialized JWK and returns a PEM block of type PRIVATE KEY containing the private key.
Uses x509.MarshalPKCS8PrivateKey internally.Signature
Parses a YAML string into a map[string]any, useful for extracting individual fields from a YAML-formatted secret (e.g. (fromYaml .DB_CONFIG.Value).host returns the host field).Signature
This migration guide applies to InfisicalSecret only. InfisicalPushSecret and InfisicalDynamicSecret do not have v1beta1 replacements yet and should continue to be used as-is.
The v1beta1 API introduces a cleaner separation of concerns. Instead of defining authentication and connection details inline in each secret CRD, you now create dedicated InfisicalConnection and InfisicalAuth resources that can be shared across multiple secret resources.
Secret resource:InfisicalSecret -> InfisicalStaticSecretInfisicalStaticSecret replaces the v1alpha1 InfisicalSecret CRD. Instead of defining auth and connection settings inline, it references dedicated InfisicalAuth and InfisicalConnection resources.
Authentication: inline authentication -> InfisicalAuthAuthentication config is now defined in a standalone InfisicalAuth resource that can be reused across CRDs. Authenticated credentials are cached and shared by all resources referencing the same InfisicalAuth.
Connection: inline hostAPI / tls -> InfisicalConnectionConnection config is now defined in a standalone InfisicalConnection resource that can be reused by auth and secret resources.
Extract the hostAPI and tls settings from your existing CRD into a new InfisicalConnection resource.
See the InfisicalConnection CRD documentation for the full spec.
2
Create an InfisicalAuth resource
Extract the authentication block from your existing CRD into a new InfisicalAuth resource.
See the InfisicalAuth CRD documentation for the full spec.
3
Replace InfisicalSecret with InfisicalStaticSecret
Create a new InfisicalStaticSecret resource that references your InfisicalConnection and InfisicalAuth resources.
See the InfisicalStaticSecret CRD documentation for the full spec.
4
Delete the old v1alpha1 resource
Once you have verified that the new v1beta1 resources are working, delete the old InfisicalSecret CRD instance.