Deploy Genesys Authentication
Contents
- 1 Assumptions
- 2 Prepare your environment
- 3 Deploy
- 4 Configure external access
- 5 Validate the deployment
- 6 Genesys Service Authentication Cut Over Guide
- 7 Overview
- 8 Migration Process:
- 9 Pre Validation
- 10 Cut Over
- 10.1 Step 1: Configure Helm Values
- 10.2 Step 2: Confirm Database Migration Is Enabled
- 10.3 Step 3: Deploy the gauth Helm Chart
- 10.4 Step 4: Verify Ingress Routes to New Auth
- 10.5 Step 5: Verify External Auth Ingress, If Used
- 10.6 Additional Steps for Customers Using gauth-infra-bg
- 10.7 Validate Cutover
- 10.8 Restart Applicable Services
- 11 Rollback (If needed)
- 12 Troubleshooting
Learn how to deploy Genesys Authentication into a private edition environment.
Assumptions
- The instructions on this page assume you are deploying the service in a service-specific namespace, named in accordance with the requirements on Creating namespaces. If you are using a single namespace for all private edition services, replace the namespace element in the commands on this page with the name of your single namespace or project.
- Similarly, the configuration and environment setup instructions assume you need to create namespace-specific (in other words, service-specific) secrets. If you are using a single namespace for all private edition services, you might not need to create separate secrets for each service, depending on your credentials management requirements. However, if you do create service-specific secrets in a single namespace, be sure to avoid naming conflicts.
Prepare your environment
To prepare your environment for the deployment, complete the steps in this section for Google Kubernetes Engine (GKE).
GKE
Log in to the GKE cluster from the host where you will run the deployment:
gcloud container clusters get-credentials <cluster>{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "gauth",
"labels": {
"name": "gauth"
}
}
}kubectl apply -f create-gauth-namespace.jsonkubectl describe namespace gauthAKS
Log in to the AKS cluster from the host where you will run the deployment:
az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "gauth",
"labels": {
"name": "gauth"
}
}
}kubectl apply -f create-gauth-namespace.jsonkubectl describe namespace gauthDeploy
To deploy Genesys Authentication, you'll need the Helm package and your overrides file. Copy values.yaml and the Helm package (gauth-<version>.tgz) to the installation location.
Additional Steps for deploying New Auth Service (gauth-service-authentication):
- Use gauth Helm chart version >= 100.0.101+0258
- Helm chart default value for new auth service is 100.0.001.0192. Update this to latest new auth service version >= 100.0.001.0193 in your values.yaml
gauth-service-authentication: 100.0.001.0193
- For customers using gauth-infra-bg chart, Use gauth-infra-bg Helm chart version >= 100.0.101+36
- For customers using dedicated external auth pods, to deploy this new auth service as external auth pod, Update your values.yaml
services: useNewAuth: false service_auth: externalAuth: enabled: true # Deploy new auth ext pods
For debugging purposes, use the following command to render templates without installing so you can check that resources are created properly:
helm template --debug /gauth-<version>.tgz -f values.yaml
The result shows Kubernetes descriptors. The values you see are generated from Helm templates, and based on settings from values.yaml. Ensure that no errors are displayed; you will later apply this configuration to your Kubernetes cluster.
Now you're ready to deploy Genesys Authentication:
helm install gauth ./gauth-<version>.tgz -f values.yaml -n gauth
Configure external access
Follow the instructions for either GKE or AKS to make the Genesys Authentication services accessible from outside the cluster.
Provision ingresses for GKE or AKS
After deploying, make Genesys Authentication services accessible from outside the GKE or AKS cluster using the NGINX Ingress Controller.
Create a YAML file called gauth-ingress.yaml with the content below. Note: Replace gws.<domain> and gauth.<domain> with your GWS and Genesys Authentication domains, such asgws.test.dev.apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gauth-gws-ingress
namespace: gauth
annotations:
# add an annotation indicating the issuer to use.
cert-manager.io/cluster-issuer: "selfsigned-cluster-issuer"
# Custom annotations for NGINX Ingress Controller
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- host: gws.<domain> - e.g. gws.test.dev
http:
paths:
- path: /ui/auth/.*
backend:
serviceName: gauth-auth-ui
servicePort: 80
- path: /auth/.*
backend:
serviceName: gauth-auth
servicePort: 80
- path: /environment/.*
backend:
serviceName: gauth-environment
servicePort: 80
tls:
- hosts:
- gws.<domain> - e.g. gws.test.dev
secretName: gauth-gws-ingress-cert
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gauth-gauth-ingress
namespace: gauth
annotations:
# add an annotation indicating the issuer to use.
cert-manager.io/cluster-issuer: "selfsigned-cluster-issuer"
# Custom annotations for NGINX Ingress Controller
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- host: gauth.<domain> - e.g. gauth.test.dev
http:
paths:
- path: /ui/auth/.*
backend:
serviceName: gauth-auth-ui
servicePort: 80
- path: /auth/.*
backend:
serviceName: gauth-auth
servicePort: 80
- path: /environment/.*
backend:
serviceName: gauth-environment
servicePort: 80
tls:
- hosts:
- gauth.<domain> - e.g. gauth.test.dev
secretName: gauth-gauth-ingress-certkubectl apply -f gauth-ingress.yaml -n gwsProvision GWS services to access New Auth Service
Refer Configure GWS Services
Provision New Auth Service to access GWS configuration service
Refer the Parameter services.service_auth.env.GWS_AUTH_common_configService in Override Helm chart values
Validate the deployment
Check the installed Helm release:
helm list
The results should show the Genesys Authentication deployment details. For example:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION gauth gauth 1 2021-05-20 11:56:32.5531685 +0530 +0530 deployed gauth-0.1.77 0.1
Check the gauth namespace status:
helm status gauth
The result should show the namespace details with a status of deployed:
NAME: gauth LAST DEPLOYED: Thu May 20 11:56:32 2021 NAMESPACE: gauth STATUS: deployed REVISION: 1 TEST SUITE: None
Check the Genesys Authentication Kubernetes objects created by Helm:
kubectl get all -n gauth
The result should show all the created pods, service ConfigMaps, and so on.
Verify all new auth deployments are running:
kubectl get deployments -n gauthExpected:
gauth-auth-<release> 2/2 # Already existing old auth pods
gauth-service-authentication-<release> 2/2 # New auth pods
gauth-environment-<release> 2/2
gauth-auth-ui-<release> 2/2gauth-auth-<release> 2/2
gauth-service-authentication-<release> 2/2
gauth-environment-<release> 2/2
gauth-auth-ui-<release> 2/2
gauth-auth-ext-<release> 2/2 # Already existing old auth external pods
gauth-service-auth-ext-<release> 2/2 # New auth external podsGenesys Service Authentication Cut Over Guide
Overview
Starting with gauth Helm chart version 100.0.101+0258 or later, the new authentication service gws-service-authentication is deployed alongside the existing authentication service gauth-auth. By default, traffic continues to route to the old authentication service.
The cutover switches authentication traffic from the old authentication service gauth-auth to the new authentication service gws-service-authentication.
Before cutover:
- Traffic routes to the old authentication service.
- Client data is copied from old database tables to new database tables.
- Existing authentication tokens remain in the old token format.
After cutover:
/authtraffic routes to the new authentication service.- New tokens are created in the new authentication token format.
- Existing tokens created by the old authentication service cannot be read by the new authentication service.
- Dependent services must be restarted, and users must re-login to obtain new tokens.
This guide further explains how to migrate client data, validate the new service, switch authentication traffic to the new service, validate the cutover, restart dependent services, and roll back to the old service if needed
Migration Process:
Auth Service has 2 persistent pieces of information.
- Client Details
- Authentication Token
1.Client Details:
The new authentication service (gauth-service-authentication) uses the same Postgres database and Redis cluster as the old auth service (gauth-auth), but with different table formats.
| Data | Old Auth table name | New Auth Table name |
| Clients | oauth_client_details | oauth2_client_details |
| Contact Centers | client_contact_centers | client_contact_centers2 |
Automatic migration:
When the new authentication service starts, Flyway runs the migration script:
V1.7.1__CopyOauth2ClientDetailsFromOldTable.sql
This migration copies client data from the old tables to the new tables.
The migration runs once on the first startup of the new authentication service. On subsequent restarts, Flyway skips the migration because it has already been applied.
2. Authentication Token:
Authentication tokens from the old authentication service are not migrated. The old and new authentication services use incompatible token storage formats. Tokens created by the old authentication service cannot be read by the new authentication service. In order to regenerate the tokens, refer to step Restart Applicable Services of CutOver steps.
And below is the difference in token storage formats of both the authentication services,
| Area | Old Auth | New Auth |
| Serialization | JDK binary | Jackson JSON |
| Key prefix | configurable (empty) | GWS:Auth:V3: |
| Token keys | plain token values | SHA-256 hashed |
| Data model | OAuth2AccessToken + OAuth2Authentication | OAuth2Authorization (unified) |
Pre Validation
Complete the following checks before switching traffic to the new authentication service.
Step 1: Verify New Auth service health
Check that the new authentication pods are running:kubectl get pods -n gauth -l gauth=service-authkubectl exec -n gauth <new-auth-pod> -- curl -s http://localhost:8081/health
Expected response:
{"status":"UP"}
Verify that the service started successfully:kubectl logs -n gauth <new-auth-pod> | grep -i "Started"Started AuthorizationServerApplication in X secondsStep 2: Verify Client Data Migration
Check the new authentication service logs for Flyway migration status:kubectl logs -n gauth <new-auth-pod> | grep -i "migrat"Migrating schema "public" to version "1.7.1 - CopyOauth2ClientDetailsFromOldTable"
Successfully applied 1 migration(s) to schema "public"Schema "public" is up to date. No migration necessary.
kubectl port-forward -n gauth <new-auth-pod> 8080:8080curl -u <admin_username>:<admin_password> \
http://localhost:8080/auth/v3/ops/clients- Clients are returned from the new authentication service.
- If no clients are returned, do not proceed with cutover until migration is verified.
Step 3: Run a Pre-cutover functional test
Before switching traffic, verify the new authentication service directly through pod port-forwarding.
Start port-forwarding:kubectl port-forward -n gauth <new-auth-pod> 8080:8080curl -X POST http://localhost:8080/auth/v3/oauth/token \
-d "grant_type=client_credentials&client_id=<id>&client_secret=<secret>"{
"access_token": "...",
"token_type": "...",
"expires_in": ...
}Cut Over
Step 1: Configure Helm Values
Refer Configure Genesys Authentication for below helm values configurations
Customers Using the gauth Chart Only
Set the following value:services:
useNewAuth: true
services:
service_auth:
externalAuth:
enabled: trueCustomers Using Both gauth and gauth-infra-bg Charts
For the gauth chart, set:services:
useNewAuth: truegauth-infra-bg chart, set:active:
useNewAuth: trueactive:
externalAuth: trueservices.useNewAuth and active.useNewAuth to the same value. Mismatched values can result in two ingresses pointing to different authentication services, causing unpredictable routing behavior.
Step 2: Confirm Database Migration Is Enabled
Automatic migration of PostgreSQL data from old auth tables to new auth tables is enabled by default.
Example configuration:services:
useNewAuth: false
secrets:
useSecretProviderClass: false
replicas: 3
location: /
db:
init: true # enables automatic migration
poolSize: 3Step 3: Deploy the gauth Helm Chart
Deploy the updated gauth chart:helm upgrade --install gauth ./gauth-<version>.tgz \
-f <your-values-file>.yaml \
-n gauth \
--wait \
--timeout 600sStep 4: Verify Ingress Routes to New Auth
Verify that/auth/ routes to the new authentication service:kubectl get ingress -n gauth -o yaml | grep -A5 "path: /auth/"path: /auth/
pathType: ImplementationSpecific
backend:
service:
name: gauth-service-authentication-<release>
port:
number: 8080gauth-auth-<release>, the cutover has not taken effect.
Step 5: Verify External Auth Ingress, If Used
For customers using dedicated external authentication, verify that/auth/v3/oauth/token routes to the new external authentication service:kubectl get ingress -n gauth -o yaml | grep -A5 "path: /auth/v3/oauth/token"path: /auth/v3/oauth/token
pathType: ImplementationSpecific
backend:
service:
name: gauth-service-auth-ext-<release>
port:
number: 8080gauth-auth-ext-<release>, the external authentication cutover has not taken effect.
Additional Steps for Customers Using gauth-infra-bg
Update the gauth-infra-bg chart values:active:
useNewAuth: true
externalAuth: trueexternalAuth: true only if dedicated external authentication is used.
gauth-infra-bg chart:helm upgrade --install gauth-infra ./gauth-infra-bg-<version>.tgz \
-f <your-infra-values-file>.yaml \
-n gauth \
--wait/auth/ routes to the new authentication service:kubectl get ingress -n gauth -l service=gauth-infra-bg -o yaml | grep -A5 "path: /auth/"path: /auth/
pathType: ImplementationSpecific
backend:
service:
name: gauth-service-authentication-<infra-release>-active
port:
number: 80gauth-auth-<infra-release>-active, the cutover has not taken effect.
For dedicated external authentication, verify:kubectl get ingress -n gauth -l service=gauth-infra-bg -o yaml | grep -A5 "path: /auth/v3/oauth/token"path: /auth/v3/oauth/token
pathType: ImplementationSpecific
backend:
service:
name: gauth-service-auth-ext-<infra-release>-active
port:
number: 80gauth-auth-ext-<infra-release>-active, the external authentication cutover has not taken effect.
Validate Cutover
Step 1: Test the External Ingress
Call the token endpoint through the external ingress URL:curl -X POST https://<gauth-external-ingress-host>/auth/v3/oauth/token \
-d "grant_type=client_credentials&client_id=<id>&client_secret=<secret>"{
"access_token": "...",
"token_type": "...",
"expires_in": ...
}Step 2: Test the Internal Ingress
Call the token endpoint through the internal ingress URL:curl -X POST https://<gauth-internal-ingress-host>/auth/v3/oauth/token \
-d "grant_type=client_credentials&client_id=<id>&client_secret=<secret>"{
"access_token": "...",
"token_type": "...",
"expires_in": ...
}| Chart | External Ingress Value | Internal Ingress Value |
|---|---|---|
gauth
|
ingress.frontend
|
internal_ingress.frontend
|
gauth-infra-bg
|
active.ingress.frontend
|
active.internal_ingress.frontend
|
Restart Applicable Services
Restart dependent services after cutover.
This restart is required because existing cached tokens were created by the old authentication service. These old tokens cannot be validated by the new authentication service.
Example restart commands:kubectl rollout restart deployment gws-service-configuration -n gws
kubectl rollout restart deployment gws-app-provisioning -n gwsExample applicable services include:
i. gws-service-configuration
ii. gws-app-provisoning
ii. GIR(Genesys Interaction Recording) - Speechminer Web service
iv. Nexus
v. CIWD
vi. UCSX (only Azure)
vii. UDM (CDDS-X)
Impact on Existing Logins
- Existing agent and user sessions are not terminated automatically during cutover.
- However, ongoing or new read/write operations may fail after cutover because old tokens use JDK binary serialization and cannot be read by the new authentication service, which uses Jackson JSON serialization.
- Users and agents must log in again to resume normal operations:
Examples:
| User Type | Required Action |
|---|---|
| WWE users | Log out and log back in |
| Agent Setup users | Log out and log back in |
Re-login creates new tokens in the new authentication service format. After re-login, operations should work normally.
Rollback (If needed)
After rollback:
- Traffic routes back to the old authentication service.
- Old auth pods are already running, so old auth pod restart is not required.
- Tokens created by the new authentication service become invalid.
- Dependent services must be restarted again so they obtain tokens from the old authentication service.
- Users and agents must log in again.
Step 1: Switch the gauth Chart Back to Old Auth
Update the gauth chart values:services:
useNewAuth: falsegauth chart:helm upgrade --install gauth ./gauth-<version>.tgz \
-f <your-values-file>.yaml \
-n gauth \
--wait \
--timeout 600s/auth/ routes back to the old authentication service:kubectl get ingress -n gauth -o yaml | grep -A5 "path: /auth/"path: /auth/
pathType: ImplementationSpecific
backend:
service:
name: gauth-auth-<release>
port:
number: 8080kubectl get ingress -n gauth -o yaml | grep -A5 "path: /auth/v3/oauth/token"path: /auth/v3/oauth/token
pathType: ImplementationSpecific
backend:
service:
name: gauth-auth-ext-<release>
port:
number: 8080Step 2: Switch the gauth-infra-bg Chart Back to Old Auth, If Used
Update the gauth-infra-bg chart values:active:
useNewAuth: false
gauth-infra-bg chart:helm upgrade --install gauth-infra ./gauth-infra-bg-<version>.tgz \
-f <your-infra-values-file>.yaml \
-n gauth \
--wait/auth/ routes back to the old authentication service:kubectl get ingress -n gauth -l service=gauth-infra-bg -o yaml | grep -A5 "path: /auth/"path: /auth/
pathType: ImplementationSpecific
backend:
service:
name: gauth-auth-<infra-release>-active
port:
number: 80kubectl get ingress -n gauth -l service=gauth-infra-bg -o yaml | grep -A5 "path: /auth/v3/oauth/token"path: /auth/v3/oauth/token
pathType: ImplementationSpecific
backend:
service:
name: gauth-auth-ext-<infra-release>-active
port:
number: 80Step 3: Restart Applicable Services After Rollback
Restart dependent services again after rollback.
This is required because services may hold tokens created by the new authentication service, and those tokens cannot be validated by the old authentication service.
Example commands:kubectl rollout restart deployment gws-service-configuration -n gws
kubectl rollout restart deployment gws-app-provisioning -n gwsStep 4: Validate Rollback
Call the token endpoint through the external ingress URL:curl -X POST https://<gauth-external-ingress-host>/auth/v3/oauth/token \
-d "grant_type=client_credentials&client_id=<id>&client_secret=<secret>"{
"access_token": "...",
"token_type": "...",
"expires_in": ...
}curl -X POST https://<gauth-internal-ingress-host>/auth/v3/oauth/token \
-d "grant_type=client_credentials&client_id=<id>&client_secret=<secret>"{
"access_token": "...",
"token_type": "...",
"expires_in": ...
}Troubleshooting
Ingress Still Points to Old Auth After Cutover
If ingress still points to gauth-auth-<release> or gauth-auth-ext-<release>, the cutover did not take effect.
Check:
services.useNewAuthis set totrueactive.useNewAuthis set totrue, if usinggauth-infra-bg- Helm upgrade completed successfully
- The correct values file was used
- Ingress was updated after deployment
Token Requests Fail After Cutover
Check:
- Client migration completed successfully
- Client ID and client secret are valid
- Token request is reaching the new authentication service
- Dependent services were restarted
- Users have logged out and logged back in
Operations Fail for Logged-In Users After Cutover
Existing user sessions are not automatically terminated, but operations may fail because old tokens are incompatible with the new authentication service.
Resolution:
- Ask affected users to log out and log back in.
- Restart dependent services that cache service tokens.
Token Requests Fail After Rollback
After rollback, tokens created by the new authentication service are invalid for the old authentication service.
Resolution:
- Restart dependent services again.
- Ask users and agents to log out and log back in.
- Verify ingress routes back to the old authentication service.