Prerequisites
- A Kubernetes cluster (v1.24 or later) with access to your MySQL instance (v8.0+)
- Minimum cluster resources: 4 vCPUs, 16GB RAM
- Database credentials with read/write and delete access to the tables
- Helm (version 3.17.0 or later)
- Domain names for API, Console and IdP endpoints
Installation Steps
To access Helm charts and container images from the Authlete registry, follow these steps:Setup Phase
1. Create an Organization
- Log in to the Authlete Console.
- Create an organization for your company.
- Note down the Organization ID.
2. Request Access
- Share the Organization ID and Organization Name with Authlete Support.
- Authlete will authorize registry access for your organization.
3. Generate Organization Token
- In the Authlete Console, generate a Token for your organization.
- Keep the Organization ID and Token handy for authentication.
Preparation Phase
1. Create a Kubernetes Namespace
2. Log in to the Helm Registry
Use the following command to log in:<ORG_ID> and <TOKEN> with your actual values.
Once logged in, you can pull Helm charts from the registry.
3. Pull Helm Chart
Authlete Helm chart is distributed using the OCI format. Use the following command to pull and extract the chart locally:4. Image Registry Setup
You have two options for accessing Authlete container images: Option A: Direct Registry Access (Development/Evaluation) For development or evaluation environments, you can pull images directly from Authlete’s registry:5. Mirror Images
For improved reliability and control, we recommend customers mirror Authlete-provided container images to their own container registry. This avoids direct runtime dependency on Authlete’s registry, and ensures reproducible deployments.Mirror using docker
values.yaml to use the mirrored image paths before running the installation.
Mirror using crane
Alternatively, you can use crane if you want to directly push the images to your own registry.Note: The image tags listed here correspond to the latest Helm chart version. For older Helm chart versions, please refer to the image tags defined within that specific chart version.
Configuration Phase
1. Configure Values and Secrets
-
The default
values.yamlis already bundled inside the chart. You can inspect or modify it for custom configurations. -
Update the
global.repoto your own registry.
- Update the
domainssection with your domain names:
Important: Domain names cannot be changed after the initial installation. If you need to change a domain name, you must reinitialize the database and reinstall Authlete from scratch. Choose your domain names carefully before proceeding.
2. Configure TLS Certificates
- Get a TLS certificate for your domain (e.g. from your certificate authority or Let’s Encrypt), and create a Kubernetes secret of type
kubernetes.io/tlsin theauthletenamespace before installation. The certificate should cover all domains used by the platform (e.g.api.example.com,login.example.com,console.example.com). You can use a wildcard or a SAN certificate.
Note: If you want to manage proxy-certs through External Secret Manager and skip this step, refer to the External Secret Manager section below
3. Enabling TLS connection to database and memory cache (Optional)
Application Configuration
TLS encryption can be enabled with simple configuration changes. Redis: To enable TLS encryption for the Redis connection, settls: true in the cache connection configuration:
sslMode property:
Note: If the certificate presented by Redis or Database over TLS is issued by a private CA, you should create a custom bundle containing all certificates and load the bundle into the application. Please refer to the Private CA section for more details.
4. Private CA (Optional)
To use TLS with private CA certificate, a custom bundle containing all necessary certificates needs to be prepared outside of the Helm Chart. Next, we will create a ConfigMap that contains the bundles, which satisfies the following contract:- ConfigMap must be named
custom-ca-bundle - It must contain at least 2 keys:
ca-bundle.p12andca-bundle.crt
Creating CA bundle
We recommend extracting the public CA bundle as described in the trust-manager documentation. Below is an explanation of how to create a ConfigMap with the bundle.Creating bundle with Trust Manager (Optional)
Trust Manager makes it easy to manage trust bundles in Kubernetes. For installation instructions please consult trust-manager’s official documentation. Oncetrust-manager is installed, you will need to create a single bundle object. The ConfigMap containting all necessary certificates will be then generated automatically.
Here is an example Bundle from which trust-manager will assemble the final bundle. This Bundle’s manifest file name is assumed to be bundle-creation.yaml
Note: Please note that if you’re using an official cert-manager-provided Debian trust package, you should check regularly to ensure the trust package is kept up to date.
Manual creation of bundle
The custom bundle can created in a few simple steps by using Docker commands.Note: The tutorial below demonstrates sample code only. Customers are responsible for creating, storing, and updating bundles securely.
- Create file named
gen-bundles.sh
- Prepare certificates to trust
certs directory with .crt extension.
- Build the bundle
- After preparing
ca-bundle.p12andca-bundle.crtfiles, you can create the kubernetes ConfigMap with the following command:
Note:
The current debian base image used for the trust-manager’s bundle creation is docker.io/library/debian:12-slim and ca-certificates target version is at 20230311+deb12u1.6
Loading the custom bundles from the application
Now that the bundle is created and ready for use, we will need to configure one more property to make the bundles available for applications. Set.Values.global.tls.caBundle.enabled to true so that the bundle is mounted into the application pods.
Updating the bundle
If you created a new bundle and replaced the old bundle with it, you should restart IdP, Authlete Server and proxy pods(applications). On a restart, applications will load the updated bundle.5. Configure Database Connection
The platform requires two databases: one for the API server and one for the IdP server. Configure the connection details insecret-values.yaml:
Note: For MySQL 8.0+, ensure your databases are configured with:If using PostgreSQL 16 or 17, you can use the standard configuration below:
- Character set:
utf8mb4- Collation:
utf8mb4_0900_ai_ci
- Character set:
UTF8- Collation:
en_US.UTF8
- A template
secret-values.yamlfile is also included in the chart archive. Modifysecret-values.yamlwith your database and Authlete admin credentials.
Note: For AWS-EKS, you may use a DNS name for your MySQL Database with or without RDS-Proxy:
- with RDS-Proxy:
host: sample-db.proxy-stu901vwx234.us-east-1.rds.amazonaws.com- without RDS-Proxy:
host: sample-db.cluster-stu901vwx234.us-east-1.rds.amazonaws.com
6. Configure Caching
Below are the caching configuration options currently supported by the platform.Managed Cache Services
For production environments, you might prefer using managed cache services. The platform supports various managed services including:- Google Cloud Platform: Memorystore for Valkey
- Amazon Web Services: ElastiCache for Redis or Serverless-Valkey
- Azure: Azure Cache for Redis
7. Configure Maintenance Tasks
To keep the platform stable, avoid using unnecessary storage and ensure optimal performance, deployments must run regularly scheduled maintenance tasks. Review the following tasks and configure the required tasks.Data Cleanup
As Authlete handles high volumes of OAuth 2.0 and OpenID Connect transactions, it accumulates transient records such as expired tokens, authorization codes, and other types of codes. To maximize API throughput and during runtime operations, Authlete does not immediately delete all expired records at the exact moment of expiration. Instead, they are marked as expired and are deleted as part of this task. If left unchecked, this data bloat can degrade database query performance and consume excessive storage. You should schedule the cleanup task to run regularly to perform the physical removal of all expired or delete records. To do so modify the following section in thevalues.yml file to provide the times at which the process should be run. The schedule property uses the format of schedules in kubernetes).
Important: For production environments, we recommend executing the cleanup process at least once a day during off-peak hours (e.g., 2:00 AM local time).
Use a dedicated API instance
The maintenance task uses Authlete API to perform the actual removal of data and it has been designed to have little to no impact on the instances used to perform the data removal. However, in some environments it is desired that the maintenance task do not use any of the API instances serving customer requests, in these cases you can enable the optiondeployApiSidecar: true which will deploy a specific copy of API to be used by the maintenance task. Keep in mind that this will require additional resources.
8. HSM configuration
Authlete currently supports Google Cloud HSM and AWS KMS. Refer to the configurations below if your setup relies on either one of those. For Google CloudHSM:9. External Secret Manager
When using External Secret Manager, make sure the secrets needed for the helm deployment are pre-configured and present on the cluster. Any absence of the following secrets will result in deployment/upgrade failures. Secrets needed areauthlete-credentials and proxy-certs (only if you want ExternalSecretManager to manage proxy-certs)
Create a secret named authlete-secret in your External Secret Manager.
Without cache auth enabled:
With cache auth enabled:
authlete-proxy-secret
externalSecrets feature in the Helm chart, refer to the values below inside values.yaml
10. Configure Pod Affinity
To enable pod affinity, add or modify the following in yourvalues.yaml:
11. Configure Cleanup
To enable cleanup within your deployment, modify the following in yourvalues.yaml:
apiAffinity is set to false, meaning no pod affinity preferences are applied.
Enabling pod affinity schedules proxy pods on the same node as API pods to reduce network latency, and improve performance between these tightly-coupled components.
12. Other configuration options
Proxy configuration
If your domain name is very long, you might hit a limit on themap_hash_max_size parameter. You can work around this problem by increasing the values of mapHashBucketSize and serverNamesHashBucketSize.
DB Schema update hooks
We introduced DB Schema update hooks to streamline the image version update. With these hooks, new changes in liquibase changesets are automatically applied to ensure database schema is on the same version as the application version. These hooks are idempotent and will not change the existing database schema as long as there is no change in schema between the upgraded version and the old version. These hooks are required to create the database schema during installation and when updating the application version. However, if you are not deploying a new application or expecting any schema changes, they can be disabled.Note for Google Cloud Users: When using Memorystore for Valkey, we recommend setting up connectivity using Private Service Connect (PSC) with service connection policies. This is the only supported networking method for Memorystore for Valkey. For detailed setup instructions, refer to the Memorystore for Valkey networking documentation.To use a managed cache service, update your
values.yaml file with the following information:
Note: If your managed cache service is configured in clustered mode, set theprovidertocluster:
Deployment Phase
1. Install Core Platform Components
Install the core platform components using Helm.Without External Secret Manager:
With External Secret Manager:
Verify the installation:
2. Install Optional Components
You may also install the following optional components based on your requirements:- Management Console: Primary interface for Authlete platform configuration
- IdP Server: OIDC compliant identity provider for user authentication and management
Without External Secret Manager:
With External Secret Manager:
Verify the optional components:
3. Configure Load Balancer
The final step is to set up a load balancer service to expose your Authlete deployment.- First, reserve a static external IP address in your cloud provider.
Note: The following commands are GCP-specific. For other cloud providers (AWS, Azure, etc.), please refer to your cloud provider’s documentation for reserving a static IP address. You must reserve a regional static external IP address in GCP. This is required because GKE LoadBalancer services only support IPs allocated in the same region as the cluster.
- Using the reserved IP, Create a load balancer service named
proxy-lb-service.yaml.
- Apply the load balancer configuration:
- Verify the load balancer is properly configured:
EXTERNAL-IP shows your static IP (this operation may take a few minutes), your Authlete deployment is accessible via HTTPS on that IP address.
4. Map Domain to Load Balancer
Create DNS records for all three domains pointing to your load balancer IP:- Navigate to
https://console.your-domain.com - Log in using the admin credentials specified in your
secret-values.yaml - Begin configuring your Authlete services
- DNS records have fully propagated
- Load balancer health checks are passing
- TLS certificate is valid for all domains
Migration Phase (Optional)
If you are performing a migration from a 2.3 environment to a 3.0 environment you might need to enable the Token Migrator which is responsible to perform token migration between the two environments.1. Create token migrator client
In order to ensure that the token migrator has access to the 3.0 environment, you need to create a service and a client in the target 3.0 environment. The service and the client you create will be used by the token migrator at startup to confirm it still has access to the environment. To create and configure the client, follow these steps:- Navigate to
https://console.your-domain.com - Log in using your admin credentials
- Create a new service with the Client credentials grant enabled. Take note of the Service ID to be used later
- Create a service access token with permission to use the service. Take note of the token to be used later
- Create a client that will be used exclusively by the token migrator service with the following characteristics:
- Client ID Alias set to:
migration-service@system.authlete.com - Client Authentication Method must be set to
CLIENT_SECRET_POST - Supported Grant Types must include
CLIENT_CREDENTIALS
- Client ID Alias set to:
- Take a note of the Client Secret for the newly created client
- In the
secret-values.yamlfile included in the chart archive modify thetokenmigratorsection to specify the information of the newly create client
2. Configure Databases
The token migrator requires to connect to the 2.3 and 3.0 databases. The information of the 3.0 database is already available in the helm chart but you will need to provide the information to connect to the 2.3 database.- In the
values.yamlfile configuretokenmigrator.sourceDatabase.hostto point to the pre-existing Authlete 2.3 Database. If your 2.3 database requires TLS follow the guidance in section Enabling TLS Connection to Database and Memory Cache to update thetokenmigrator.sourceDatabase.connectionParamsproperty. - In the
secret-values.yamlfile included in the chart archive modify thetokenmigrator.databasesection to specify the credentials to be used to connect to the 2.3 database.
3. Configure External Secrets (Optional)
If you are using an External Secret Manager you need to add the client information and the database credentials that the token migrator will use to your external secret. To do so, add the token migrator properties using the following snippet as an example:4. Deploy the token migrator
You can now deploy the token migrator by enabling it and runninghelm upgrade. We recommend that the first time you deploy the service you deploy it in dryrun mode to verify that all the configuration is working correctly. Only use mode sync when you are starting the migration.
Read Migrate from an old version to plan your migration strategy and measure the impact of the token migration process in the resources of your environment before starting your migration path.
5. Remove the token migrator
The token migrator is intended to be used temporarily so as part of your journey you will have to decomission the service.- Remove the service by setting
tokenmigrator.enabledtofalse. - Disable the token migrator client either by rotating the secret or by deleting the client. This prevents the service to be re-enabled.
- When you are completely sure that migration has finished you can delete the client and the service. If you created a dedicated organization for the token migrator, you can delete that organization as well.
Helm Chart Changelog
The current Helm chart version is2.1.6.
v2.1.6 (June 26th 2026) update
- Added new version releases for api:3.0.33, idp:1.0.28 and console:1.0.23
- Added cleanup job to schedule automated cleanups authlete-ops:0.1.0
v2.1.5 (June 1st 2026) update
- Added token migrator support (only applies to migrations from 2.3 to 3.0)
- Added labels to the pre-install/pre-upgrade hooks
- Added enhancements to the liquibase scripts to handle error logging
- Added new version releases for api:3.0.32, idp:1.0.27 and console:1.0.22
- Replaced
curlwithwgetin the API lifecycle shutdown hook ⚠️ Breaking Change : Cloud SQL Proxy is no longer included as a sidecar in the Helm chart. Database connectivity must now be configured directly. Please refer to the database section invalues.yamlfor connection options.
v2.1.4 (April 3rd 2026) update
- Added HSM support for AWS KMS
- Added PostgreSQL as a supported database type
v2.1.3 (February 18th 2026) update
- Updated default console images
v2.1.2 (February 10th 2026) update
- Added new cache backend configuration with support for
standalone(single cache instance) andcluster(cluster cache mode) providers - Added startUp Probe to api pods for improved startup reliability
- Added configurable pod affinity rules for controlling pod scheduling across nodes
Shutdownendpoint is now protected with a dynamically generated token that rotates on every helm upgrade- Added cache control headers to nginx to comply with RFC 6749 (Authorization servers MUST include
Cache-Control: no-storeandPragma "no-cache"in responses) - Fixed protocol definition for port 8443 of nginx
v2.1.1 (November 6th 2025) update
- Disabled nginx version disclosure (nginx configuration change)
- Added ACL (Access Control List) support to Redis
- Removed Redis deployment from Helm Chart
- Cache must now be deployed independently
v2.1 (October 2nd 2025) update
- Added functionality to support External Secret Manager
v2.0 (September 12th 2025) update
- Added support for TLS connection with a private Certificate Authority
- Added missing IP ranges for internal connections
- Updated
map_hash_bucket_sizeandserver_names_hash_bucket_sizeparameters to accept larger values