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.| Image | Description | Supported Version Tags |
|---|---|---|
| server | Core API server that handles OAuth 2.0 and OpenID Connect operations | 3.0.27 |
| server-db-schema | Database schema initialization tool for the API server | v3.0.27 |
| idp | Identity Provider server for user authentication and management | 1.0.20 |
| idp-db-schema | Database schema initialization tool for the IdP server | v1.0.20 |
| console | React based management console for platform configuration and monitoring | 1.0.13 |
| nginx | Nginx-based reverse proxy for handling TLS termination and routing | 1.26.3 |
| valkey | Caching service for improved performance and reduced database load | 8.0.1 |
| gce-proxy | Cloud SQL proxy for secure database connections in GCP environments | 1.37.0 |
| authlete-bootstrapper | Initialization service for the platform. Only used during first deployment. | 1.1.0 |
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.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:
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: If Redis connection requires TLS encryption, configurerediss:// in the MEMCACHE_HOST value:
sslMode property:
Note: When using Cloud SQL Proxy, sslMode should be set to disable, as the connection is already encrypted by the proxy. Enabling an additional layer of TLS will not work.
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.
3. 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.0
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:
- Character set:
utf8mb4- Collation:
utf8mb4_0900_ai_ci
- 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. 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
8. Configure Pod Affinity
To enable pod affinity, add or 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.
9. 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, add the following environment variable:
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
Helm Chart Changelog
The current Helm chart version is2.1.3.
November 6th 2025 update
- Added ACL (Access Control List) support to Redis
October 2nd 2025 update
- Added functionality to support External Secret Manager
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