- kubectl create namespace dg-monitor
Introduction
Astrocyte Data Gateway is engineered to optimize and secure data transfer between trading partners and cloud platforms, providing a comprehensive and adaptable solution.
This document presents the detailed architecture and deployment approach of the Astrocyte Data Gateway, aimed at guiding the setup and configuration of the data exchange system.
Architecture & Components
The application is structured into three integral components, each playing a crucial role in facilitating secure and effective data interchange.
Data Gateway UI
The Data Gateway UI is an essential interface designed for user-friendly management of various functionalities, including trading partner creation, user administration, file upload and download, file transfer search, access management, and cloud configurations. Through the UI, users can also manage cloud transfers and configure settings efficiently. The UI provides an intuitive and seamless way for users to interact with the system, streamlining operations and improving productivity by integrating directly with the underlying API.
Data Gateway API
The Data Gateway API is a crucial component responsible for handling various functionalities, including creating and managing trading partners, user management, file upload, download, file transfer search, access management, cloud configurations, creating and managing cloud transfers, and settings. This component exposes APIs for these operations, allowing seamless integration and interaction with other modules.
Data Gateway Server
Data Gateway Server serves as the heart of the product, providing APIs for protocol services using the Apache Mina library (SFTP, FTP, FTPS). It manages schedulers (polling interval), Watch Services, file locks, APIs to connect cloud storages (GCS, AWS S3, AZURE, IBM CLOUD), performs file transfers, handles secret manager services, utilizes event-based cloud triggers, manages logs, and determines the file transfer chunk size. This component is responsible for the core functionalities and secure data transmission between clouds and servers.
Data Gateway Secure
Data Gateway Secure plays a crucial role in enhancing security by restricting direct connections from trading partners to the server. It contains the same protocols implemented in the Data Gateway Server using the Apache Mina library. This component does not involve database connections. It acts as an intermediate layer to ensure secure and controlled access to the server.
System Requirements
The Data Gateway Application is compatible with the following system configurations:
Pre-Requisites
- Cloud Account (Google Cloud, Azure, AWS, IBM)
- Kubernetes Cluster
- Secret Manager
- Pub/Sub Service
- Persistent storage with access mode of RWO and RWX, and is exposed as a Kubernetes storage class
- Container Registry Access
- PostgreSQL Database
- SSL Certificates
- Data Gateway Image
- Linux Jump Server
- Elastic Search for Data Gateway Monitor (Optional)
Container Images
The Product team would provide you the Data Gateway bucket details, which can be used to download the images.
The product comprises of four .tar image files: DG_UI.tar, DG_API.tar, DG_SERVER.tar, and DG_SECURE.tar. Upload them to a Linux jump server of your choice. Once uploaded, load each image into Docker on the jump server using the following commands:
- docker load -i DG_UI.tar
- docker load -i DG_API.tar
- docker load -i DG_SERVER.tar
- docker load -i DG_SECURE.tar
Helm Details
The Data Gateway helm package is a tar file, and the contents of the tar file include various files and directories required for installation and configuration, such as:
- Chart.yaml file is a component that defines metadata about the chart. It provides information that helps Helm manage, package, and deploy the product.
- product.info file is a custom metadata file that defines the product-related information.
- values.yaml file is the configuration file that defines customizable parameters for the data gateway chart’s deployment. It acts as the input file where users can override default settings for their applications without modifying the chart itself.
- LICENSE file contains detailed information about the product license, including the terms and conditions governing the use, distribution, and modification of the application.
- README.md file provides comprehensive step-by-step instructions for deploying the Data Gateway application in a Kubernetes environment. It includes information on the required prerequisites, installation procedures, configuration guidelines, and best practices to ensure a seamless deployment. The document outlines how to set up the necessary Kubernetes resources such as deployments, services, ingress controllers, and environment-specific configurations.
- The Secrets folder contains sensitive files used by the Data Gateway application to securely store confidential information such as passwords and authentication credentials.
- The Secrets folder contains three secret files: api-secret, server-secret, and proxy-secret. Each file includes fields to input passwords and other sensitive information required by the application. These secrets are securely injected into the Data Gateway application through Kubernetes Secrets, ensuring sensitive data is not exposed in plain text.
- The Templates folder contains the Kubernetes resource definitions written in YAML format. These templates are used to dynamically generate Kubernetes manifests based on the values specified in the values.yaml file. Helm templates allow developers to create reusable, configurable, and parameterized deployments without hardcoding environment-specific configurations.
Data Gateway Container Topology Architecture
The deployment configuration for the data gateway involves a carefully planned topology to support scalability and redundancy.
Data Gateway Process Flow Architecture
The process flow of the data gateway components involves various components to ensure secure file movement with advanced capabilities.
Deployment Steps
Cluster Setup
- Refer to https://cloud.google.com/kubernetes-engine/docs/how-to/creating-a-regional-cluster and follow the instructions to create a cluster.
- The Kubernetes user should have complete admin access to the namespace where you wish to deploy application.
Installing CLI
The Cloud Command-Line Interface (CLI) is a powerful tool for managing Cloud resources and services from the command line. Connect to the Linux Jump Server and follow the below steps
AWS Cloud
- Refer to Install or update to the latest version of the AWS CLI – AWS Command Line Interface (amazon.com) and install AWS CLI.
- Login to EKS Cluster using the below command:
- aws configure
- To configure the Kubernetes CLI (
kubectl
) to interact with your Amazon EKS cluster,
use the command below by replacing<region>
and<cluster_name>
with your actual values.- aws eks update-kubeconfig –region <region> –name <cluster_name>
Google Cloud
- Refer to Install the gcloud CLI | Google Cloud CLI Documentation and install Google CLI.
- Login to Google Cluster using the below command.
- gcloud auth login
It would provide you the URL to access Google Cloud. Traverse to the URL and login with your Google Cloud Account and collect the verification code and provide it in the prompt.
- Provide your project name in project-id and execute the below command to set your project.
- gcloud config set project <project-id>
- Provide your cluster and zone to configure kubectl to use the specified cluster.
- gcloud container clusters get-credentials <cluster-name> –zone <zone>
- Refer to Install and Set Up kubectl on Linux | Kubernetes and follow the instructions to setup kubectl according to your OS and Kubernetes Version.
If using an Openshift cluster, the openshift CLI command oc can be used instead of kubectl
Database installation
Installing and Configuring PostgreSQL Database in centos7/RHEL7 Linux system with Internet
- Install PostgreSQL repository to our CentOS 7 / RHEL 7 Linux system using the command below:
- sudo yum install -y
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
- List available repositories on the system after adding it
- sudo yum repolist -y
- After the repository has been added, update system and reboot
- sudo yum -y update
- sudo systemctl reboot
- Wait for the system to come online then login and install PostgreSQL server and client packages
- sudo yum install -y postgresql14-server postgresql14
- Check packages version upon successful installation of PostgreSQL 14 CentOS 7 | RHEL 7
- rpm -qi postgresql14 postgresql14-server
- Initialize the PostgreSQL 14 server before use by running the command:
- sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
- Start and enable database service
- sudo systemctl enable postgresql-14
- Service should be in running state after starting it
- sudo systemctl status postgresql-14
- Enter Postgress shell using the command below:
- sudo -u postgres psql
- Access psql shell using the command below:
- psql
- From here we can set a strong password for Postgres users as shown below:
- ALTER USER postgres WITH PASSWORD ‘YourStrongPasswordHere’;
- Replace
'YourStrongPasswordHere'
with the desired strong password. Ensure that the password adheres to security guidelines (e.g., using a mix of uppercase, lowercase, numbers, and symbols).
- To log out from the shell as shown below:
- \q
You have installed and configured PostgreSQL 14 database server on our CentOS 7 / RHEL 7 Linux system.
Configuration changes to connect PostgreSQL from another Network:
PostgreSQL is configured to be bound to “localhost” by default
Any attempt to connect to the postgresql server from outside the machine will be refused.
To fix the above issue, we need to find postgresql.conf. In different systems it is located at different places. So, search for the postgresql.conf file using the command below:
- sudo find / -name postgresql.conf
Open postgresql.conf file and replace line #listen_addresses = ‘localhost’ with
listen_addresses = ‘*’
Now restart postgresql server to effect the changes using the command below:
- sudo systemctl restart postgresql-14
Open pg_hba.conf, find the file using the command below:
- sudo find / -name pg_hba.conf
Enter the lines below at the very end of the file and save it
host all all 0.0.0.0/0 md5
host all all ::/0 md5
The “md5” option which is shown above means that a password needs to be provided. If you want the client to allow collection without providing any password, then change “md5” to “trust” and that will allow connection unconditionally.
Restart postgresql server using the command below:
- sudo systemctl restart postgresql-14
Database Configuration
- Refer to https://www.postgresql.org/docs/current/index.html and create a Postgres database, schema and a user.
- Grant permissions to the user.
- The following permissions are required for the administrative user for creating and modifying the database:
- Grant connection to the database
GRANT CONNECT ON DATABASE dg_db TO dg_user; - Grant usage on the schema
GRANT USAGE ON SCHEMA dg_schema TO dg_user; - Grant basic DML privileges on all existing tables
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA dg_schema TO dg_user; - Grant all privileges on all tables in the schema
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA dg_schema TO dg_user; - Grant all privileges on all sequences (for auto-incrementing columns)
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA dg_schema TO dg_user; - Replace
dg_db
,dg_schema
, anddg_user
with your actual database name, schema name, and username.
Data Gateway Image Extracting and Loading
1. Download the Data Gateway Image from the provided location and move it to the Jump Server.
2. Load the image to docker using below command. Refer to docker push | Docker Docs for more information on docker load to image repository.
- docker load -i image-tar-file
- example command: docker load DG_UI.tar
- docker tag SOURCE_IMAGE_ID LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME:TAG
- Replace
SOURCE_IMAGE_ID
,LOCATION
,PROJECT_ID
,REPOSITORY
,IMAGE_NAME
, andTAG
with appropriate values. - Example command: docker tag 9ed55ef2c3f5 us-central1-docker.pkg.dev/my-gcp-project/my-repo/datagateway-ui:latest
3. Upload the helm package to any linux server of your choice and untar the helm package using the below command.
- tar -xvf tar-package-file
- example command: tar -xvf AstrocyteDatagateway-0.1.0.tgz
4. Create a Namespace in Kubernetes Cluster for UI, API and Server components of Data Gateway.
- kubectl create ns <<namespace_name>>
- replace <<namespace_name>> with datagateway namespace name
- example command: kubectl create ns datagateway
5. Create another Namespace in Kubernetes Cluster for the Secure component of Data Gateway.
- kubectl create ns <<namespace-name>>
- replace <<namespace_name>> with datagateway namespace name
- example command: kubectl create ns datagateway-secure
6. Set the Kubernetes current context to your datagateway namespace.
- kubectl config set-context –current –namespace namespace_name
- example command: kubectl config set-context –current –namespace datagateway
7. Create an image pull secret, using your registry credentials for the datagateway namespace and the datagateway secure namespace.
- kubectl create secret docker-registry <secret-name> –docker-server=<registry-url> –docker-username=<your-username> –docker-password=<your-password> -n namespace_name
- example command: kubectl create secret docker-registry my-docker-secret –docker-server=https://index.docker.io/v1/ –docker-username=mydockeruser –docker-password=mydockerpass -n datagateway
- example command: kubectl create secret docker-registry my-docker-secret –docker-server=https://index.docker.io/v1/ –docker-username=mydockeruser –docker-password=mydockerpass -n datagateway-secure
Creating Secrets
UI Component
1.Create a secret in the datagateway namespace for the UI SSL setup using your certificate file referring to the below command.
- kubectl create secret generic <<secret-name>> –from-file <<cert-file-name>> -n <<datagateway-namespace>>
- replace <<secret-name>>,<<cert-file-name>>, <<datagateway-namespace>> with actual values
- example command: kubectl create secret generic dg-ui-sslcert –from-file astrocyte.crt -n datagateway
2. Create a secret in the datagateway namespace for the UI SSL setup using your ssl key file referring to the below command.
- kubectl create secret generic <<secret-name>> –from-file <<ssl-key-file-name>> -n <<datagateway-namespace>>
- example command: kubectl create secret generic dg-ui-sslkey –from-file astrocyte.key -n datagateway
3. if you set datagateway_ui.ingress.enabled as true create the secrets for the TLS host domain using the certificate and key as provided below
- kubectl create secret tls <secret-name> –cert=<path-to-certificate-file> –key=<path-to-private-key-file> -n <namespace>
<secret-name>
: Name of the Kubernetes secret to create.<path-to-certificate-file>
: Full path to your.crt
(certificate) file.<path-to-private-key-file>
: Full path to your.key
(private key) file.<namespace>
: Kubernetes namespace where the secret should be created.- Example command: kubectl create secret tls ui-ssl-secret –cert=/home/dg/certs/astroctre.crt –key=/home/dg/certs/astroctre.key -n datagateway
API Component
1. Generate a .pfx
(PKCS#12) file from your domain certificate to enable SSL for the API component.
- openssl pkcs12 -export -out datagateway-api.pfx -inkey <<PRIVATE_KEY>> -in <<CERT_FILE>> -passout pass:<<PASSWORD>>
- Replace the placeholders with your actual values:
<<PRIVATE_KEY>>
– your private key file<<CERT_FILE>>
– your certificate file<<PASSWORD>>
– the password you want to set on the PFX file- Example command: openssl pkcs12 -export -out datagateway-api.pfx -inkey /home/dg/certs/astroctre.key -in /home/dg/certs/astroctre.crt -passout pass:MySecurePfxPass123
2. Convert the previously created .pfx
file into a Java Keystore (.jks
) format.
- keytool -importkeystore -srckeystore <<PFX_FILE>> -srcstoretype PKCS12 -srcstorepass <<PFX_PASSWORD>> -destkeystore datagateway-api-keystore.jks -deststoretype JKS -deststorepass <<JKS_PASSWORD>>
- Replace the placeholders with your actual values:
<<PFX_FILE>>
– the path to your existing.pfx
file<<PFX_PASSWORD>>
– the password set during PFX creation<<JKS_PASSWORD>>
– the password you want for the JKS keystore- Example command: keytool -importkeystore -srckeystore /home/dg/certs/datagateway-api.pfx -srcstoretype PKCS12 -srcstorepass MySecurePfxPass123 -destkeystore datagateway-api-keystore.jks -deststoretype JKS -deststorepass MySecureJksPass456
api-secret.yaml
file provided in the Helm chart. These should cover the database password, the API keystore password (created earlier), and the SMTP password. These secrets will be used during the deployment process.4. Create a Kubernetes secret using the previously generated keystore with the following command:
- kubectl create secret generic <keystore-secret-name> –from-file=<keystore-file-name> -n <namespace>
- Replace <keystore-secret-name> with the actual secret name
- Replace <keystore-file-name> with the keystore file name
- Replace
<namespace>
with the appropriate namespace where your application will deployed. - Example Command: kubectl create secret generic api-keystore-secret –from-file=datagateway-api-keystore.jks -n datagateway
Secure Component
1.Generate a .pfx
(PKCS#12) file from your domain/self signed certificate to enable SSL for the FTPS connection.
- openssl pkcs12 -export -out datagateway-secure.pfx -inkey <<PRIVATE_KEY>> -in <<CERT_FILE>> -passout pass:<<PASSWORD>>
Replace the placeholders below with your actual values:
<<PRIVATE_KEY>>
– your private key file<<CERT_FILE>>
– your certificate file<<PASSWORD>>
– the password to protect the PFX file
The output file is named datagateway-secure.pfx
, but you may use any name as needed.
2. Convert the previously created .pfx
file into a Java Keystore (.jks
) format to enable SSL for FTPS.
- keytool -importkeystore -srckeystore <<PFX_FILE>> -srcstoretype PKCS12 -srcstorepass <<PFX_PASSWORD>> -destkeystore datagateway-secure-keystore.jks -deststoretype JKS -deststorepass <<JKS_PASSWORD>>
Replace the placeholders with your actual values:
<<PFX_FILE>>
– the path to your.pfx
file<<PFX_PASSWORD>>
– the password used while creating the PFX<<JKS_PASSWORD>>
– the desired password for the.jks
keystore
The output file is named datagateway-secure-keystore.jks
, but you may use any name as required.
3. Create a Kubernetes secret using the secure keystore file. Specify that namespace since the keystore is intended for a different namespace where the secure component is deployed. Replace the filename if you have used a different name.
- kubectl create secret generic <secret-name> –from-file=<filename> -n <namespace>
- Replace
<secret-name>
with your preferred secret name <filename>
with the path to your file (e.g.,datagateway-secure-keystore.jks
)<namespace>
with the target namespace where the secret should be created.- Example command: kubectl create secret generic ftps-keystore-secret –from-file=datagateway-secure-keystore.jks -n datagateway-secure
secure
namespace exists before creating the secret.4. Generate an SSH key pair to be used by both the server and secure.Run the following command on a Linux server, replacing path/keypair_name
with your desired file path and key name, and make sure not to provide the passphrase
- ssh-keygen -t rsa -b 4096 -f <keypair_name>
- replace <keypair_name> with file name of your choice
- Example Coammnd: ssh-keygen -t rsa -b 4096 -f dg_key
This will generate two files:
dg_key
– the private keydg_key.pub
– the public key
Create a Kubernetes secret from the generated private SSH key using the following command.
- kubectl create secret generic <secret_name> –from-file=<private_key_name> -n <secure-namespace-name>
- Example command: kubectl create secret generic my-ssh-key-secret –from-file=dg_key -n datagateway-secure
Replace the placeholders with your actual values:
secret_name
– the name you want to assign to the secretprivate_key_name
– the file name of your private keysecure-namespace-name
– the target namespace (e.g., where the secure component is deployed
5. Specify the required passwords in the proxy secret file included in the Helm chart. These credentials will be used during the deployment process to securely configure the proxy component. Be sure to include the keystore password that was used when creating the secure keystore and provide the datagateway secure namespace
Server Component
1. Create a PFX File for FTPS SSL Configuration. Generate a .pfx
(PKCS#12) file using your domain certificate to enable SSL for the FTPS connection.
- openssl pkcs12 -export -out datagateway-server.pfx -inkey <<PRIVATE_KEY>> -in <<CERT_FILE>> -passout pass:<<PASSWORD>>
Replace the placeholders with your actual values:
<<PRIVATE_KEY>>
– your private key file<<CERT_FILE>>
– your certificate file<<PASSWORD>>
– the password to protect the PFX file
The output file will be named datagateway-server.pfx
, but you can choose any name.
2. Convert the .pfx
file into a Java Keystore (.jks
) format. Replace the placeholders with appropriate values:
<<PFX_PASSWORD>>
– the password used to secure the.pfx
file<<JKS_PASSWORD>>
– the password you want for the.jks
keystore
The output file is named datagateway-server-keystore.jks
, but you may use any name as required.
- keytool -importkeystore -srckeystore datagateway-server.pfx -srcstoretype PKCS12 -srcstorepass <<PFX_PASSWORD>> -destkeystore datagateway-server-keystore.jks -deststoretype JKS
-deststorepass <<JKS_PASSWORD>>
3. Create a Kubernetes secret using the generated keystore file. Replace the filename and namespace with your actual values as needed:
- kubectl create secret generic datagateway-server-keystore-secret –from-file=datagateway-server-keystore.jks -n <namespace>
4. Create a Kubernetes secret from the generated private SSH public key using the following command.
- kubectl create secret generic secret_name –from-file=public_key_name -n datagateway-namespace-name
Replace the placeholders with your actual values:
secret_name
– the name you want to assign to the secretprivate_key_name
– the file name of your private keydatagateway-namespace-name
– the target namespace (e.g., where the datagateway component is deployed)
5. Specify the necessary passwords in the server secret file provided in the Helm chart, which will be used during the deployment process.
Configuring Helm Charts & Deploying
- Traverse to the location where the helm chart was untarred, and open values.yaml file in any text editor.
- Accept the license by setting it to
"true"
.
UI Component
Provide the container image name along with the necessary details as shown in the snapshot below. Additionally, define the resource specifications by setting:
Resource Limits – the maximum CPU and memory the container can use
Resource Requests – the minimum guaranteed CPU and memory to reserve for the container
Ensure the configuration aligns with your workload requirements and available cluster resources.
2. Add any additional labels you wish to apply to the UI pod by specifying the labels directly below.
Affinity controls how pods are scheduled onto nodes based on certain rules and preferences. If you wish to enable affinity, remove the curly braces, uncomment the configurations, and update the settings according to your cluster configuration.

3. Specify the server type and port configuration.
For SSL-enabled servers, use port
443
.For non-SSL servers, you may use any preferred port.
To disable a port, leave the port details blank.
If you wish to add annotations, remove the curly braces and provide the desired configuration below.

4. To use Ingress instead of LoadBalancer
or NodePort
service types, provide the Ingress configuration details and set enabled
to true
. This will allow external access to the service through the configured Ingress rules.
5. To enable SSL for the UI:
Set
enabled
totrue
.Provide the Host, along with the TLS certificate and key details.
Specify the TLS certificate file name and the secret created from it, as configured earlier during the UI prerequisites.
Similarly, provide the TLS key file name and the corresponding secret name.
Include the certificate name used and the secret that was created in previous steps.
Additionally, define the maximum file upload size for the UI using the
max_file_size
parameter.
Ensure all referenced secrets are available in the correct namespace before deploying.
6. Provide the Persistent Volume configuration for storing log data. A single Persistent Volume Claim (PVC) is used to collect logs from both the API and server pods; therefore, the access mode must be set to ReadWriteMany
.
If you intend to use an existing Persistent Volume, specify its name under the preExistingVolume
parameter. Ensure that the volume is correctly configured and accessible within the target namespace.
Note: The storage class used should have RWX access mode access and the volumes should be based on block or network storage.
API Component
Provide the container image name along with the necessary details as shown in the snapshot below. Additionally, define the resource specifications by setting:
Resource Limits – the maximum CPU and memory the container can use
Resource Requests – the minimum guaranteed CPU and memory to reserve for the container
Ensure the configuration aligns with your workload requirements and available cluster resources.
2. Add any additional labels you wish to apply to the API pod by specifying the labels directly below.
Affinity is used to control how pods are scheduled onto nodes based on certain rules and preferences. If you wish to enable affinity, remove the curly braces, uncomment the configurations, and update the settings according to your cluster configuration.

3. Specify the service type and port configuration:
To disable a port, leave the port field blank.
If you wish to add annotations, remove the curly braces and provide the configuration below.
This will allow you to adjust the service settings and customize it as needed for your deployment.

4. Set acceptLicense to true and specify the desired profile for your API to run on.
- If the profile is SAML, ensure that valid SAML details are provided in the upcoming API configurations. This setup the application to use SAML authentication using IDP.
- If the profile is ADG, you can skip providing SAML details as they are not required.

Provide the maximum and minimum heap size values for the API:
The recommended maximum heap size (
-Xmx
) should be 50% of the total available RAM.Set the minimum heap size (
-Xms)
Based on your workload requirements, typically starting from a reasonable value (e.g., 1000m).
Ensure that both values are set according to the available resources in your environment for optimal performance.
5. To enable SSL for the API:
Set
enabled
totrue
.Provide the Host along with the keystore details generated from the SSL certificates in the API prerequisites.
Specify the keystore name and the secret name created using the keystore.
Additionally, provide the secret name containing the keystore password, which was created during the API prerequisites.
Ensure the secrets and certificates are correctly configured

6. Configure the database settings:
Set
enabled
totrue
if the installation is targeting an empty database schema.Provide the necessary database information, including the database host, name, and port.
Specify the database secret name containing the database password, which was created as part of the prerequisites.
Ensure the database details and secrets are correctly configured
7. Configure the SMTP details:
Provide the necessary SMTP server information, such as the server address, port, and any other relevant configuration.
For the SMTP password, specify the secret name that contains the SMTP password, which was created as part of the API prerequisites.
Ensure the SMTP configuration and secret are properly set for the email functionality to work as expected.
8. Specify the following parameters for user login through the DG UI:
Max False Attempts: The maximum number of failed login attempts allowed before the account is temporarily locked.
Reset False Attempts: The time period (in minutes or hours) after which the failed login attempts counter resets.
Cool Down Period: The amount of time (in minutes or hours) the user must wait before attempting to log in again after reaching the maximum number of failed attempts.
Ensure these values are set according to your security and user experience requirements.

9. To enable MFA for user authentication, set ‘enable’ to true and specify the expiration time.

10. Configure the SAML settings to enable Multi-Factor Authentication (MFA) for the application:
Provide the metadata file name containing the SAML configuration.
Specify the secret name created from the metadata file.
Include any other relevant SAML-related details.
Ensure the profile is set to
saml
if you are using it for authentication.
Make sure the metadata and secret are correctly configured to integrate MFA with your application.

enable
to true
. Before creating the secret, rename your image file to CustomLogo.png
. Ensure the file is in .png
format, then create a secret using this renamed file. and provide the secret name in values.yaml.
- kubectl create secret generic secret-name –from-file CustomLogo.png
- Example Command: kubectl create secret generic logo-secret –from-file CustomLogo.png
Server Component
Provide the container image name along with the necessary details as shown in the snapshot below. Additionally, define the resource specifications by setting:
Resource Limits – the maximum CPU and memory the container can use
Resource Requests – the minimum guaranteed CPU and memory to reserve for the container
Ensure the configuration aligns with your workload requirements and available cluster resources.
2. Provide extra labels to the server pod by directly adding the labels below
Affinity is used to control how pods are scheduled onto nodes based on certain rules and preferences. If you wish to enable affinity, remove the curly braces, uncomment the configurations, and update the settings according to your cluster configuration.

3 .Specify the server type and ports for the following protocols:
SFTP
FTP
FTPS
Additionally, provide the passive port range for FTP/FTPS data transfers.
If you do not wish to use a specific protocol, leave the corresponding details blank.
Set session affinity to
ClientIP
for FTP/FTPS.For SFTP, set session affinity to
None
.
Ensure that the configuration aligns with your network and protocol requirements.

4.Provide the maximum and minimum heap size values for the API:
The recommended maximum heap size (
-Xmx
) should be 50% of the total available RAM.Set the minimum heap size (
-Xms)
Based on your workload requirements, typically starting from a reasonable value (e.g., 1000m).
Ensure that both values are set according to the available resources in your environment for optimal performance.
5. Configure the SMTP details:
Provide the necessary SMTP server information, such as the server address, port, and any other relevant configuration.
For the SMTP password, specify the secret name that contains the SMTP password, which was created as part of the server prerequisites.
Ensure the SMTP configuration and secret are properly set for the email functionality to work as expected.
6.Provide the following details:
The public key name that was created as part of the server prerequisites.
The SSH public key secret name associated with the public key, which was also created during the server prerequisites.
7. Provide the following details:
The keystore name created for the application.
The secret name generated from the keystore.
The secret name containing the keystore password, which was created as part of the server prerequisites.
Ensure that the keystore and associated secrets are correctly configured
8. Provide the following details for the Proxy SFTP Tunnel:
The SFTP Tunnel username.
The secret name that contains the tunnel password, which was created as part of the server prerequisites.
Ensure that both the username and secret are correctly configured
Secure Component
Provide the container image name along with the necessary details as shown in the snapshot below. Additionally, define the resource specifications by setting:
Resource Limits – the maximum CPU and memory the container can use
Resource Requests – the minimum guaranteed CPU and memory to reserve for the container
Ensure the configuration aligns with your workload requirements and available cluster resources.
2. Provide extra labels to the proxy pod by adding the labels below
Affinity is used to control how pods are scheduled onto nodes based on certain rules and preferences. If you wish to enable affinity, remove the curly braces, uncomment the configurations, and update the settings according to your cluster configuration.
3.Specify the server type and port configurations for the following protocols:
SFTP
FTP
FTPS
Additionally, define the passive port range for FTP/FTPS data transfers.
If you do not intend to use a particular protocol, leave the corresponding configuration fields blank.
Set session affinity to
"ClientIP"
for FTP and FTPS.For SFTP, set session affinity to
"None"
.
Ensure all settings are aligned with your network and security requirements.

4. Provide the maximum and minimum heap size values for the API:
The recommended maximum heap size (
-Xmx
) should be 50% of the total available RAM.Set the minimum heap size (
-Xms)
Based on your workload requirements, typically starting from a reasonable value (e.g., 1000m).
Ensure that both values are set according to the available resources in your environment for optimal performance.
5. Provide the following details:
The keystore file name and the secret name created from the keystore file.
The public key file name and the secret name associated with the public key, which were created as part of the secure prerequisites.
Ensure these values are correctly referenced for secure communication
6. Provide the Tunnel Username and the corresponding secret name that contains the tunnel password.
These credentials should have been created as part of the secure prerequisites to enable secure tunneling.
7.Provide the following user login policy settings:
Maximum false login attempts: The number of consecutive failed login attempts allowed before action is taken.
Maximum reset attempts: The number of times a user can attempt to reset their credentials within a given period.
8. Provide the Auto Scaling Configurations:
Set the target CPU utilization percentage and target memory utilization percentage.
Based on these thresholds, pods will automatically scale by creating additional replicas as needed.You can enable or disable autoscaling for any specific component within the Data Gateway deployment, depending on performance requirements.
Ensure the values reflect your expected load and available cluster resources.
9. After making all necessary configurations, save and close the values.yaml
file.
Then, begin the installation using the following command:
- helm install <release-name> <chart-directory> -n <namespace> –set datagateway_ui.replicas=0
Replace <release-name>
, <chart-directory>
, and <namespace>
with your actual values.
10. After all the pods are up except the UI pod, perform the following steps:
Map the Load Balancer IPs of the API and UI services to their respective DNS hostnames as defined in the configuration files.
Once the DNS mapping is complete and SSL is enabled on the applications, scale up the UI pod using the command below:
- kubectl scale deployment <ui-deployment-name> –replicas=1 -n <namespace>
Replace <ui-deployment-name>
and <namespace>
with the actual values from your deployment.
The deployment is complete.
Please wait a few minutes to allow the applications to initialize and complete their setup.
Accessing the Application
- Open your browser and traverse to the URL which would be the HOST and PORT provided in the configuration of the UI Component.

2. You can login with your factory credentials which would be superadmin and Expl0re@123 as the Username and Password respectively.
Note: You can change the password upon login using Change Password.

Data Gateway Monitor
Astrocyte Data Gateway Monitor is an application designed for monitoring both platform and application performance. It ensures that pods are running as expected and provides visibility into system statistics such as RAM, CPU usage, and thread activity—enabling proactive planning and resource optimization.
Pre-Requisites
- Kubernetes Cluster
- Container images
- Helm packages
- Kibana
- Grafana
- Elasticsearch
- SSL Certificates
Elasticsearch deployment procedure: Elastic Stack Helm Chart | Elastic Cloud on Kubernetes [2.16] | Elastic
Kibana deployment procedure: Elastic Stack Helm Chart | Elastic Cloud on Kubernetes [2.16] | Elastic
Grafana deployment procedure: Deploy Grafana using Helm Charts | Grafana documentation
Container Images
The Product team would provide you the Data Gateway bucket details, which can be used to download the images.
Download the DG Monitor .tar image file: DG_MONITOR.tar. Upload them to a Linux jump server of your choice. Once uploaded, load each image into Docker on the jump server using the following command:
docker load -i DG_MONITOR.tar
Helm Details
The Data Gateway helm package is a tar file, and the contents of the tar file include various files and directories required for installation and configuration, such as:
- Chart.yaml file is a component that defines metadata about the chart. It provides information that helps Helm manage, package, and deploy the product.
- product.info file is a custom metadata file that defines the product-related information.
- values.yaml file is the configuration file that defines customizable parameters for the data gateway chart’s deployment. It acts as the input file where users can override default settings for their applications without modifying the chart itself.
- LICENSE file contains detailed information about the product license, including the terms and conditions governing the use, distribution, and modification of the application.
- README.md file provides comprehensive step-by-step instructions for deploying the Data Gateway application in a Kubernetes environment. It includes information on the required prerequisites, installation procedures, configuration guidelines, and best practices to ensure a seamless deployment. The document outlines how to set up the necessary Kubernetes resources such as deployments, services, ingress controllers, and environment-specific configurations.
- The Secrets folder contains sensitive files used by the Data Gateway application to securely store confidential information such as passwords and authentication credentials.
- The Secrets folder contains three secret files: dg-monitor-secret. Each file includes fields to input passwords and other sensitive information required by the application. These secrets are securely injected into the Data Gateway monitor application through Kubernetes Secrets, ensuring sensitive data is not exposed in plain text.
- The Templates folder contains the Kubernetes resource definitions written in YAML format. These templates are used to dynamically generate Kubernetes manifests based on the values specified in the values.yaml file. Helm templates allow developers to create reusable, configurable, and parameterized deployments without hardcoding environment-specific configurations.
Cluster Setup
Refer to this for more information about Cluster Setup.
Installing CLI
Refer to this for more information about CLI Installation.
Data Gateway monitor – Image Details
Image Extracting and Loading
- Download the Data Gateway Images tar files from the provided location and move it to the Jump Server.
- Load the images to Docker using the below command. Refer to docker push | Docker Docs for more information on Docker load to image repository.
- docker load DG_monitor.tar
Once loaded, push it to the image repo of your choice
3. Upload the helm chart to the jump server and Untar the helm charts using the command below
- tar -xvf helm-package-name
4.Create a namespace in the Kubernetes cluster for DG Monitor.
5. Set the Kubernetes current context to the datagateway monitor namespace using the following command:
- kubectl config set-context –current –namespace=dg-monitor
Creating Secrets
- This command will create an image pull secret in the
dg-monitor
namespace, allowing Kubernetes to pull images from the specified registry.
- kubectl create secret docker-registry <secret-name> –docker-server=<registry-url> –docker-username=<username> –docker-password=<password> -n dg-monitor
Replace the following placeholders with your actual values:
<secret-name>
: Desired name for the secret.<registry-url>
: URL of your Docker registry.<username>
: Your Docker registry username.<password>
: Your Docker registry password.
2 provide the required credentials for the configuration:
Datagateway Database Password
Elasticsearch Login Password
Swagger API Password (to secure access to Swagger)
Keystore Password (if SSL is enabled for the Swagger API)
Elasticsearch Server Integration Password (used by the server application to send data to Elasticsearch)
provide the following credentials and details required for configuration:
Elasticsearch Password used by the client application to send data to Elasticsearch.
FTP, SFTP, and FTPS Passwords used by the Adapter Monitor for authenticating with the Datagateway during monitoring.
Namespace in which the Datagateway server application is deployed.
To enable Datagateway Monitor Swagger with SSL, follow the steps below:
Create a PFX file using your domain certificate.
Provide the private key, certificate, and a desired password using the placeholders below:
<<PRIVATE_KEY>>
: Path to your private key file<<CERT_FILE>>
: Path to your certificate file<<PASSWORD>>
: Password to secure the PFX file
You can name the output file as desired; in this example, we’re using datagateway-monitor.pfx
.
- openssl pkcs12 -export -out datagateway-monitor.pfx -inkey <<PRIVATE_KEY>> -in <<CERT_FILE>> -passout pass:<<PASSWORD>>
- Replace the placeholders with your actual file paths and password. Ensure the password is stored securely for later use in your Kubernetes secrets.
Create a Java Keystore (JKS) file using the previously generated PFX file.
Use the datagateway-monitor.pfx
file created in the earlier step. You can name the output JKS file as desired; in this example, we’ll use datagateway-monitor-keystore.jks
.
- keytool -importkeystore -srckeystore datagateway-monitor.pfx -srcstoretype PKCS12 -srcstorepass <<PFX_PASSWORD>> -destkeystore datagateway-monitor-keystore.jks -deststoretype JKS -deststorepass <<JKS_PASSWORD>>
Make sure <<PFX_PASSWORD>>
and <<JKS_PASSWORD>>
are consistent with the values used in your Kubernetes secrets a
create a secret with the keystore (jks) using the below command
- kubectl create secret generic dg-keystore-secret –from-file=keystore.jks=datagateway-keystore.jks
Replace dg-keystore-secret
, keystore.jks
, datagateway-keystore.jks
with your actual secret name, desired key name, file path, and namespace.
Helm configuration
- Open values.yaml in any text editor of your choice
- Provide the image pull secret created as a part of prerequisites
- provide the image name, image tag, pull policy, and restart policy for the container configuration.
- Please provide the resource requests and limits for the DG Monitor Server pod.
Define the service type used to expose the Datagateway Monitor Server pod’s Swagger API, along with the ports it should be accessible on.
By default, the service type is set toClusterIP
.
If you wish to access the Swagger API externally, consider usingNodePort
orLoadBalancer
.Additionally, to apply any required annotations (e.g., for ingress controllers or cloud provider configurations), remove the curly braces and insert the appropriate key-value pairs in the annotations section.
Provide the keystore configuration details required for enabling SSL for Swagger:
Specify the name of the
.pfx
keystore file created during the prerequisites step.Provide the name of the Kubernetes secret that was created from this
.pfx
file.Include the name of the Kubernetes secret that contains the password for the keystore.
Specify the keystore type (default is
PKCS12
, unless a different format was used).
- Set liquibase to true if you are installing the DG Monitor for the first time. Provide the database details such as the JDBC URL, username, and the secret name containing the DB_PASS, which should have been created as part of the prerequisites. Also, specify the time zone (e.g., EST) in which the application should run.
- Set enable to true if you wish to store DG Monitor logs. If enabled, provide the log storage capacity, storageClass, and access modes. Alternatively, if you prefer to use a pre-existing persistent volume, you can do so by specifying the preExistingVolume name.
- The DG Monitor client requires a service account to monitor Kubernetes metrics. You can set enable to true to automatically create a new service account. Alternatively, set enable to false to use an existing service account, and provide its name using the serviceAccountName field.
- Provide the namespace where DataGateway is deployed, as DG Monitor depends on the DataGateway server logs PVC to monitor the application logs. Ensure the correct DataGateway namespace is specified. And provide the resource limits and requests.
- Provide the Elasticsearch details, including the index name, URL, username, SSL configuration, and the operating system on which Elasticsearch is running. Also, specify the secret name containing the Elasticsearch credentials, which should have been created as part of the prerequisites.
- Set enable to true to monitor the FTP endpoint. If enabled, provide the FTP hostname, port, username, the ftpsPasswordSecret (created as part of the prerequisites), and the mailbox path. Also, specify schedule_ftp_seconds to define how frequently the FTP endpoint should be monitored.
- Set enable to true to monitor the FTPS endpoint. If enabled, provide the FTPS hostname, port, username, the ftpsPasswordSecret (created as part of the prerequisites), and the mailbox path. Also, specify schedule_ftps_seconds to define how frequently the FTPS endpoint should be monitored.
- Set enable to true to monitor the SFTP endpoint. If enabled, provide the SFTP hostname, port, username, the sftpPasswordSecret (created as part of the prerequisites), and the mailbox path. Also, specify schedule_sftp_seconds to define how frequently the SFTP endpoint should be monitored.
- Provide the filename of the DataGateway server log file. DG Monitor uses this log file to collect data points and generate monitoring insights based on the keywords defined in proxy_keyword_list. Default values are already included—do not modify them. If you wish to monitor additional error logs in the DataGateway server logs, you can add custom keywords to proxy_keyword_list, separated by commas and enclosed in double quotes. Provide the names of the schedulers to be monitored in scheduler_list, enclosed in single quotes and separated by commas. Provide the schedule_thread_seconds value, which defines how frequently the system should check for changes in thread count. Also, provide the schedule_datapoints_seconds value, which determines how often data points should be monitored.) and provide the username for the DataGateway Monitor server application, along with the secret name that contains the Swagger password, which should have been created as part of the prerequisites.
- Provide the scheduler_seconds value under the schedulers section to specify how frequently schedulers should be monitored. Similarly, provide the scheduler_seconds under the certificate_manager section to define how often certificates and related logs should be checked. In the authenticated_user section, specify the schedule_seconds value to determine how frequently the script should check for authenticated users. Also, provide the server log file name. Do not modify the error_keyword_list.
- In the datapoint section, provide the namespace and the name of the DataGateway logs PVC.
- Provide the namespaces that DG Monitor should monitor for pods. Also, specify the schedule_system_stats_seconds value to define how frequently system stats should monitor the pods at regular intervals.
- Remove the curly braces and uncomment the configuration. Then, add any additional configuration below securityContext to include custom session affinity settings.
- Add any affinity-related configurations under the affinity section. If you want to use the predefined configuration, simply remove the curly braces, uncomment it, and modify it as needed to fit your requirements. And save the values .yaml file.
- Add any affinity-related configurations under the affinity section. If you want to use the predefined configuration, simply remove the curly braces, uncomment it, and modify it as needed to fit your requirements. And save the values .yaml file.
- Install the dg monitor using the below command
- helm install dg-monitor <path-to-chart-directory> -n <namespace>
replace the placeholder with
dg-monitor
: A release name you want to assign (you can choose a different one).<path-to-chart-directory>
: The local path to your DG Monitor Helm chart.<namespace>
: The namespace you created for the monitor, e.g.,dg-monitor
.
To validate the installation of the DG Monitor and check the logs inside the pod for any errors, you can follow these steps:
Get the Pod name: First, get the name of the DG Monitor pod by running the following command:
- kubectl get pods -n <namespace>
- kubectl exec -it <pod-name> -n <namespace> — /bin/bash
Check the logs: Once inside the pod, navigate to the log directory and check for any errors:
- cd /opt/DG-MONITOR/logs
- tail -f *
This will display the latest log entries in real time. Look for any error messages in the logs.
Exit the Pod: After checking the logs, you can exit the pod by typing:
- exit
If everything is set up correctly, the logs should be free of errors, and the system should be running smoothly.