Installing Coginiti Enterprise on GKE (Air-Gapped)
This guide provides comprehensive instructions for installing Coginiti Enterprise on Google Kubernetes Engine (GKE) in an air-gapped environment. This deployment method is designed for organizations with strict network isolation requirements.
Overview
The deployment process consists of three key stages:
- Configuring GCP project and required tools
- Provisioning GCP resources within the project
- Installing Coginiti Enterprise on the GKE cluster
This guide is specifically for Coginiti Enterprise deployment on GKE. For Coginiti Team installation, see the Coginiti Team Installation Guide.
Prerequisites
GCP Account and Project
- Valid Google Cloud Platform account
- New GCP project or existing project designated for Coginiti Enterprise
- Required IAM roles assigned to your account
Required IAM Roles
Ensure your account has the following IAM roles in the GCP project:
- Compute Network Admin (
compute.networkAdmin) - Artifact Registry Administrator (
artifactregistry.admin) - DNS Administrator (
dns.admin) - Certificate Manager Editor (
certificatemanager.editor) - Kubernetes Engine Cluster Admin (
container.clusterAdmin) - Cloud SQL Editor (
cloudsql.editor)
Installing Required Tools
Install the following software on your local machine:
1. Google Cloud CLI
Download and install the Google Cloud CLI from the official documentation. This is required to interact with GCP services via command line.
2. Kubernetes Command-Line Tool (kubectl)
Follow the installation instructions for your operating system from kubectl installation guide.
3. KOTS CLI
Install the KOTS kubectl plugin following the KOTS CLI Getting Started guide.
Verify your KOTS installation:
kubectl kots version
Provisioning GCP Resources
Required Infrastructure Components
You will need to provision the following GCP resources:
Networking
- VPC network - Custom VPC for the deployment
- Proxy-only Subnet - For Internal Application Load Balancer
- Internal Static IP address - Used by Internal ALB and DNS
Compute and Storage
- Private VPC-native GKE cluster - Kubernetes cluster for Coginiti Enterprise
- PostgreSQL server - Database backend with pg_vector extension
- Artifact Registry Repository - Container images storage
Security and DNS
- DNS zone and DNS name - Domain configuration for Coginiti Enterprise
- Self-Managed SSL Certificate - For HTTPS communication
GKE Cluster Requirements
- Kubernetes Version: 1.27 or higher
- Node Configuration: Minimum 3 nodes of
n2-standard-8type - Storage:
pd-balancedpersistent disk, minimum 256 GB per node - Required Addons: HorizontalPodAutoscaling, HttpLoadBalancing, GcePersistentDiskCsiDriver
- Gateway API: Gateway API must be enabled on the cluster in GCP console or via CLI command:
gcloud container clusters update CLUSTER_NAME \
--location=CLUSTER_LOCATION \
--gateway-api=standard
PostgreSQL Requirements
- Version: PostgreSQL 15 or 16
- Extensions:
pg_vectorextension must be installed - Connectivity: Accessible from the GKE cluster
- Database: Dedicated database for Coginiti application
Step-by-Step Infrastructure Setup
If you haven't deployed GCP resources yet, use these commands to set up the required infrastructure:
1. Create VPC Network
gcloud compute networks create coginiti-net \
--subnet-mode custom
2. Create Private Subnet
gcloud compute networks subnets create coginiti-cluster-snet \
--network coginiti-net \
--range 192.168.0.0/28 \
--secondary-range my-pods=10.1.0.0/20,my-services=10.1.16.0/24 \
--enable-private-ip-google-access \
--region={REGION}
Replace {REGION} with your chosen Google Cloud region.
Decide on primary and secondary IP address ranges according to your intended network design and topology.
3. Create Proxy-Only Subnet for Internal ALB
gcloud compute networks subnets create coginiti-proxy-only-snet \
--network coginiti-net \
--range 192.168.1.0/26 \
--purpose REGIONAL_MANAGED_PROXY \
--role ACTIVE \
--region={REGION}
4. Add Firewall Rule for Proxy Connection
gcloud compute firewall-rules create allow-proxy-connection \
--network coginiti-net \
--allow TCP:8080 \
--source-ranges 192.168.1.0/26
5. Create Internal Static IP Address
gcloud compute addresses create coginiti-internal-ip \
--subnet=coginiti-cluster-snet \
--purpose=GCE_ENDPOINT \
--region={REGION}
6. Create Private Cloud DNS Zone
gcloud dns managed-zones create coginiti \
--dns-name example.com. \
--description="Private DNS Zone for Coginiti Enterprise" \
--visibility private \
--networks coginiti-net
You must own the domain name used for the DNS zone. Replace example.com with your actual domain.
7. Get Internal Static IP Address
gcloud compute addresses describe coginiti-internal-ip \
--region={REGION}
8. Add DNS A Record
gcloud dns record-sets transaction start \
--zone=coginiti
gcloud dns record-sets transaction add {STATIC_INTERNAL_IP} \
--name=coginiti.example.com \
--ttl=300 \
--type=A \
--zone=coginiti
gcloud dns record-sets transaction execute --zone=coginiti
Replace {STATIC_INTERNAL_IP} with the IP address from step 7.
Verify the record was added:
gcloud dns record-sets list --zone=coginiti
9. Create Self-Managed SSL Certificate
gcloud compute ssl-certificates create coginiti-certificate \
--certificate={PATH_TO_CERTIFICATE_FILE} \
--private-key={PATH_TO_PRIVATE_KEY_FILE} \
--region={REGION}
Replace the paths with your SSL certificate and private key file locations, and {REGION} with your deployment region.
- Must be PEM-encoded format
- Certificate must match your domain name
- Must be a regional certificate (not global) for Internal ALB
- Google-managed SSL certificates cannot be used for Internal ALB
10. Create Artifact Registry
gcloud artifacts repositories create coginiti-repo \
--location {REGION} \
--repository-format docker
11. Get Authentication Token
TOKEN=$(gcloud auth print-access-token)
This token has a one-hour lifetime. You may need to regenerate it during the deployment process.
Upload Container Images to Artifact Registry
1. Access Application Download Portal
Contact your Coginiti support team to obtain:
- Credentials for the Application Download portal
- Link to the Application Download portal
2. Download Required Bundles
In the Application Download portal:
- Select "Bring my own cluster" option
- Choose your desired Coginiti Enterprise version
- Download the KOTS Admin Console Bundle
- Download the App Bundle (airgap bundle)
3. Push Images to Artifact Registry
Execute these commands to upload the container images:
kubectl kots admin-console push-images {PATH_TO_ADMIN_BUNDLE} \
{REGION}-docker.pkg.dev/{PROJECT_NAME}/coginiti-repo \
--registry-username oauth2accesstoken \
--registry-password $TOKEN
kubectl kots admin-console push-images {PATH_TO_AIRGAP_BUNDLE} \
{REGION}-docker.pkg.dev/{PROJECT_NAME}/coginiti-repo \
--registry-username oauth2accesstoken \
--registry-password $TOKEN
Replace {REGION}, {PROJECT_NAME}, {PATH_TO_ADMIN_BUNDLE}, and {PATH_TO_AIRGAP_BUNDLE} with your actual values.
Deploy PostgreSQL Server
1. Allocate IP Address Range for VPC Peering
gcloud compute addresses create google-managed-services-coginiti-net \
--purpose=VPC_PEERING \
--addresses=192.168.3.0 \
--prefix-length=24 \
--network=projects/{PROJECT_NAME}/global/networks/coginiti-net \
--global
2. Create Private Connection
gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=google-managed-services-coginiti-net \
--network=coginiti-net \
--project={PROJECT_NAME} \
--force
3. Create PostgreSQL Instance
gcloud sql instances create coginiti-pg-server \
--database-version=POSTGRES_15 \
--cpu=2 \
--memory=7680MB \
--network=coginiti-net \
--no-assign-ip \
--region={REGION}
4. Set PostgreSQL User Password
gcloud sql users set-password postgres \
--instance=coginiti-pg-server \
--password={YOUR_PASSWORD}
5. Create Coginiti Database
Connect to the PostgreSQL server and run:
CREATE DATABASE coginiti_db;
6. Install pg_vector Extension
Connect to the Coginiti database and run:
CREATE EXTENSION vector;
Deploy Private GKE Cluster
1. Create GKE Cluster
gcloud container clusters create coginiti-private-cluster \
--location {REGION} \
--network coginiti-net \
--subnetwork coginiti-cluster-snet \
--cluster-secondary-range-name my-pods \
--services-secondary-range-name my-services \
--enable-private-nodes \
--enable-ip-alias \
--master-ipv4-cidr 192.168.0.32/28 \
--machine-type "n2-standard-8" \
--num-nodes "3"
2. Enable Authorized Networks (Simplified Access)
gcloud container clusters update coginiti-private-cluster \
--location {REGION} \
--enable-master-authorized-networks \
--master-authorized-networks $(curl ifconfig.me)/32
3. Get Cluster Credentials
gcloud container clusters get-credentials coginiti-private-cluster \
--location {REGION}
Install Coginiti Enterprise
1. Update Authentication Token and Install
TOKEN=$(gcloud auth print-access-token)
kubectl kots install coginiti-premium/enterprise-release \
--kotsadm-registry {REGION}-docker.pkg.dev/{PROJECT_NAME} \
--kotsadm-namespace coginiti-repo \
--registry-username oauth2accesstoken \
--registry-password $TOKEN
The installation process will:
- Validate registry information
- Deploy the Admin Console
- Create the namespace
- Wait for datastore to be ready
- Prompt for admin console password (6+ characters)
2. Access Admin Console
The installer will provide a URL. Keep the terminal session open as it provides port-forwarding.
If you accidentally close the terminal, restore access with:
kubectl kots admin-console --namespace {NAMESPACE}
Navigate to http://localhost:8800 in your browser.
Configure Coginiti Enterprise
1. Admin Console Login
Enter the password you provided during installation.
2. Upload License File
Upload the license file provided by your Coginiti support team or download it from the Application Download portal.
3. Configure Artifact Registry Connection
- Password: Enter the output of
gcloud auth print-access-token - Registry Settings: Configure your Artifact Registry details
- Disable Pushing Images: Check this option since images are already uploaded
- Upload Bundle: Select and upload the Coginiti Enterprise airgap bundle
4. Configure Superuser Account
Create the primary administrator account:
- Superuser Name: Admin username for Coginiti Enterprise
- Superuser Password: Strong password (minimum 8 characters)
5. Database Configuration
Get the PostgreSQL server IP address:
gcloud sql instances describe coginiti-pg-server
Configure database connection:
- Postgres Host Type: Select "Postgres IP Address"
- Postgres Instance IP Address: Enter the PostgreSQL server IP
- Database Name:
coginiti_db - Username:
postgres - Password: Password set during PostgreSQL configuration
6. Encryption Configuration
Choose "Generate Encryption key and JWT secret" for new installations.
SAVE YOUR ENCRYPTION KEY AND JWT SECRET securely. These are required for:
- System reinstallation
- Data recovery from backups
- Infrastructure migration
Without these keys, encrypted data cannot be recovered.
7. Domain and SSL Configuration
Configure your production settings:
- Ingress Hostname: Your Coginiti domain (e.g.,
coginiti.example.com) - GCP Managed Certificate Name:
coginiti-certificate - Regional Static Internal IP Address Name:
coginiti-internal-ip - Storage Class:
standard-rwo
8. Preflight Checks
The admin console will validate your configuration:
- ✅ Required Kubernetes Version
- ✅ Minimum 3 nodes in cluster
- ✅ Container Runtime
- ✅ Kubernetes environment check
- ✅ Required storage classes
- ✅ CPU cores requirement (6 or greater)
- ✅ PostgreSQL 15.x or later
- ✅ Private Registry Images Available
9. Deploy Application
Click "Deploy" when preflight checks pass. Monitor the deployment progress in the admin console.
Post-Installation Verification
1. Access Coginiti Enterprise
Navigate to your configured domain (e.g., https://coginiti.example.com) and log in with the superuser credentials.
Since this is an air-gapped deployment with internal load balancer and private DNS, access to Coginiti Enterprise requires one of the following:
- VPN Connection: Connect to your GCP VPC via Cloud VPN or third-party VPN
- Bastion Host: Access through a jump server/bastion host within the VPC
- Cloud IAP: Use Google Cloud Identity-Aware Proxy for secure access
- Private Network: Direct connection from on-premises network connected to GCP VPC
The application is not accessible from the public internet.
2. Verify License Application
The Coginiti Enterprise license should be automatically applied. Verify:
- License information appears correctly
- User limits match your license agreement
- Expiration date is accurate
3. Initial Configuration
Complete these setup tasks:
- Configure user accounts and permissions
- Set up database connections to your data sources
- Configure authentication (SSO, LDAP if required)
- Test basic functionality with sample queries
Troubleshooting
Common Issues
Authentication Token Expiration
Symptoms: Registry authentication failures during deployment
Solution: Regenerate the authentication token:
TOKEN=$(gcloud auth print-access-token)
PostgreSQL Connection Issues
Symptoms: Database connectivity errors during configuration
Solutions:
- Verify PostgreSQL instance is running
- Check VPC peering configuration
- Confirm pg_vector extension is installed
- Verify database user permissions
SSL Certificate Problems
Symptoms: Certificate validation errors
Solutions:
- Verify certificate format is PEM-encoded
- Ensure certificate matches your domain name
- Confirm private key corresponds to certificate
- Check certificate expiration date
Admin Console Access Issues
Symptoms: Cannot access admin console
Solutions:
- Verify kubectl context is set correctly
- Check port-forwarding is active
- Ensure admin console pod is running:
kubectl get pods -n {NAMESPACE}
Getting Help
For installation support:
- Primary Contact: Your Coginiti Account Manager
- Technical Support: support@coginiti.co
- Documentation: Latest installation guides and troubleshooting resources
When contacting support, provide:
- GCP project details and region
- Kubernetes cluster configuration
- Complete error messages and logs
- Network topology and security configurations
Summary
You have successfully installed Coginiti Enterprise on GKE in an air-gapped environment! Key achievements:
✅ Infrastructure: GCP resources provisioned with private networking and internal load balancer ✅ Database: PostgreSQL with pg_vector extension configured ✅ Kubernetes: Private GKE cluster with no internet connectivity ✅ Container Images: Successfully uploaded to private Artifact Registry ✅ Application: Coginiti Enterprise deployed and configured ✅ Security: Encryption keys generated and SSL certificate configured for internal access ✅ Network Isolation: Complete air-gapped deployment with private DNS and internal-only access
Your Coginiti Enterprise instance is now ready for production use in your air-gapped environment. Access is restricted to private network connections only (VPN, bastion host, or Cloud IAP).