Overview
Connectors run on Kubernetes using Apache Camel K, providing:- Automatic scaling based on load
- High availability with multiple replicas
- Environment isolation (dev, staging, test, UAT)
- API gateway through Azure API Management (APIM) to publish, secure, and monitor connector APIs
- Service mesh integration for secure communication
Environments
The platform provides multiple runtime environments:Environment access
To access runtime environments, you need appropriate roles assigned inself-service.tfvars:
{env}-rw: Full access (read-write) to the environment{env}-ro: Read-only access to the environment{env}-apim-rw: API Management contributor access{env}-apim-ro: API Management reader access{env}-apim-subs-ro: Reader access to subscriptions, including primary and secondary keys{env}-apim-subs-rw: Subscription management access{env}-apim-cred-manager: Credential manager access
Accessing Azure resources
Access Azure resources to manage and monitor your connector deployments.Azure portal access
- Navigate to Azure Portal
- Sign in with your Azure AD credentials
- Select your subscription/resource group
- Access resources like:
- Kubernetes clusters
- API Management instances
- Storage accounts
- Key Vaults
Set up kubectl for Azure
Deployment process
Deploy your connectors using the GitOps workflow through theapplications-live repository.
Applications-live repository
Connectors are deployed through theapplications-live repository, which manages runtime configurations.
Access requirements
To deploy connectors, you need:- GitHub team membership:
applications-liveteam - Runtime access: Appropriate Banking OS roles
Deployment namespace
Every workload you deploy through theapplications-live repository runs in a Kubernetes namespace. You set that namespace on the ArgoCD Application, under spec.destination.namespace. The same rule covers connectors, custom APIs, agents, Model Context Protocol (MCP) servers, and scheduled jobs that you build.
The documentation for each workload type explains how to set the namespace for that type. This section covers which namespace to use, and how to get a namespace.
Namespaces the platform manages
The platform provisions and manages every namespace you deploy into. Here, managed means the platform provisions the namespace. The Managed track is the separate repository track in GitHub organization and repository structure. A managed namespace includes:- Network policy enforcement: On hardened runtimes, the policy isolates the namespace from every other namespace.
infra-resourcessupport: You can enable PostgreSQL databases, Redis caches, and blob storage for the namespace.- An Azure managed identity and a Kubernetes service account: The platform creates these when you enable one of those shared resources.
- Sync Hub connectivity: On installations that have Sync Hub enabled, the network policy allows workloads labeled as Sync Hub producers to reach the Sync Hub services. Those services publish to Azure Service Bus. For more information, see Sync Hub.
- Istio configuration that you manage: You set this in
runtimes/{runtime}/istio/values.yamlinapplications-live.
grandcentral is a separate platform namespace on the cluster. The product name is Banking OS.
Managed track: The gc-<domain> namespace holds the productized connectors that Backbase runs for you under a service level agreement (SLA). Only Backbase support teams can deploy into that namespace.
DevHub track: The devhub-grandcentral and devh-gc-<domain> namespaces are where you deploy the workloads you build. Backbase services teams, partners, and customers deploy and run their own custom workloads in these namespaces.
Each runtime holds namespaces from both tracks. Use the following table to find where your workloads belong:
A domain can appear on both tracks. If Backbase runs the productized Finastra connectors for you in
gc-finastra, your Finastra workloads still go in devh-gc-finastra. The two namespaces do not share secrets, policies, or identities. Support for each namespace sits with a different party.
In dev runtimes you can create namespaces of your own, without a request and without waiting. Use that namespace as a sandbox for a short experiment, a chart you want to try, or a demo you plan to delete. Keep that work out of the shared namespace while that work is still in progress.
A namespace you create this way isn’t a managed namespace. It doesn’t include the platform features listed earlier. You can’t add a network policy to it yourself. It exists only on that
dev cluster. From test onward, the platform creates every namespace.Choose a namespace
devhub-grandcentral is the default DevHub namespace, and you can deploy into it. For stronger isolation, Backbase recommends a dedicated namespace for the business domain that the workload serves.
Name a dedicated namespace devh-gc-<domain>. Here, devh is short for DevHub. Use the same name in every runtime. Each runtime is a separate cluster, so devh-gc-payments is also the namespace your production workloads run in.
Namespaces created before this convention use a
dev- prefix, such as dev-gc-payments. That prefix means DevHub. The dev runtime is a separate cluster name. Those namespaces keep their names. Use devh- when you request a dedicated namespace.- Network isolation: From
testonward, aNetworkPolicypermits traffic inside each namespace and denies traffic across namespace boundaries. Workloads that share a namespace can reach each other. No other namespace can reach workloads in your namespace. Backbase manages these policies through platform infrastructure as code. You cannot change them fromapplications-live. To open a boundary between two namespaces, raise a Service Desk request. - Policy scope: Istio objects, such as
AuthorizationPolicy,PeerAuthentication, and egressServiceEntryandVirtualService, are namespace-scoped. You configure them inruntimes/{runtime}/istio/values.yamlinapplications-live. In a dedicated namespace, the rules you write apply only to your own workloads. - Secret scope: Kubernetes secrets are namespace-scoped. A service account can mount secrets only in its own namespace. When a namespace enables a shared platform resource in
infra-resources/resources.yaml, the platform creates an Azure managed identity and a Kubernetes service account for it. Workloads in separate namespaces then do not share database or cache credentials. - Observability: The namespace is a standard label on platform logs and metrics. You can scope queries, dashboards, and alerts to a single domain when you debug. For more information, see Monitor.
- Resource names: Kubernetes resource names have to be unique only within a namespace. In a dedicated namespace, your release, service, and
ConfigMapnames can’t collide with names from another domain.
applications-live. A shared namespace gives you no separation from the other workloads in it.
Request a namespace
devhub-grandcentral already exists. Request a namespace only when you want a dedicated one.
A namespace works on its own. If your workloads need shared platform resources, such as PostgreSQL, Redis, or blob storage, declare the namespace in infra-resources/resources.yaml.
Namespace creation is not self-service. To request a namespace, raise a ticket with the Service Desk. Include the installation, the runtime (such as dev), and the namespace name you want.
Request namespace permissions from the Service Desk. The infra-resources/resources.yaml file in the applications-live repository grants a namespace access to shared platform resources, such as PostgreSQL, Redis, and blob storage. That file doesn’t create namespaces or manage namespace permissions.
Deployment workflow
Prepare your connector
Ensure your connector is:- ✅ Built successfully
- ✅ Tested locally
- ✅ Merged to
mainbranch - ✅ Version tagged
Configure runtime settings
In theapplications-live repository, add an ArgoCD Application for your connector and the values for that runtime. For the file layout and a sample Application, see Deploy a custom API and connector and Configure connectors.
Create deployment pull request
- Create a branch in
applications-liverepository - Add or update connector configuration
- Follow PR title format:
feat(GC-123): Deploy my-custom-connector to dev - Create Pull Request targeting
mainbranch
Review and approve
- Default reviewers: All
applications-liveteam members are automatically assigned - Custom reviewers: Can be configured per runtime in
self-service.tfvars - Auto-approval: Available for specific runtimes (e.g., dev)
Deployment execution
After PR merge:- Pipeline validates configuration
- Connector is deployed to Kubernetes
- Health checks verify successful deployment
- Connector becomes available in the target environment
Promote to a higher runtime
There’s no separate promotion tool. To move a connector to a higher runtime, open a pull request in the applications-live repository. It repeats the tested configuration in the next runtime folder. The following diagram shows the flow: To promote a connector, follow these steps:- Confirm the version works in the lower runtime.
- Open a pull request that sets the same chart
targetRevisionand values inruntimes/{next-runtime}/appsandruntimes/{next-runtime}/values. If the API changed, add the APIM entries too. - Get review. By default, members of the
applications-liveteam are the reviewers. You can set runtime-specific reviewers withruntime_codeowners_override. - Merge the pull request. ArgoCD syncs the change.
- Verify the connector with an API call.
- Don’t run a later chart version in a higher runtime than in lower runtimes.
- Runtimes vary per installation. Common sets are dev, stg, and prd, or dev, stg, test, and uat.
- If you want a bot to approve pull requests for a runtime such as dev, set
auto_approve_runtimes. You can’t combine it withruntime_codeowners_override.
Runtime configuration
Environment variables
Configure connector behavior using environment variables:Secrets management
Manage sensitive data through:- GitHub Secrets: Managed in self-service repository
- Kubernetes Secrets: Injected at runtime
- Azure Key Vault: For production secrets
Resource limits
Configure resource allocation:Container registry
Connector images are stored in:- Customer ACR:
GC_CUSTOMER_ACR_BASE_URL(available as GitHub secret) - Enterprise ACR:
GC_ENTERPRISE_ACR_BASE_URL(available as GitHub secret)
- Images are automatically built and pushed during CI/CD
- Use the image reference in your deployment configuration
- Format:
<registry>/<image-name>:<tag>
- Access container registry through Azure Portal
- Use Azure CLI:
az acr repository list --name <registry-name> - Azure Container Registry Documentation
API management integration
APIM access
Connectors can be exposed through APIM: APIM Roles:{env}-apim-ro: Read API definitions and subscriptions{env}-apim-rw: Create and modify APIs{env}-apim-subs-rw: Manage subscriptions and keys{env}-apim-cred-manager: Manage OAuth credentials
Publish your API
- Access APIM Portal for your environment
- Create or import API definition
- Configure backend to point to your connector
- Set up policies (rate limiting, authentication, etc.)
- Publish API for consumers
Subscription management
- Create subscriptions for API consumers
- Manage keys (primary and secondary)
- Rotate keys for security
- Monitor usage through APIM analytics
Scaling and performance
Scale your connectors to handle varying workloads.Horizontal scaling
Connectors automatically scale based on:- CPU utilization
- Memory usage
- Request queue length
- Custom metrics
Manual scaling
Adjust replica count in deployment configuration:Performance tuning
Optimize connector performance:- Connection pooling: Configure pool sizes
- Threading: Adjust thread pool configurations
- Caching: Implement caching strategies
- Batch processing: Process messages in batches
Health checks and readiness
Configure health checks to ensure your connector is running correctly.Health endpoints
Connectors expose health endpoints:- Liveness:
/health/live- Is the connector running? - Readiness:
/health/ready- Is the connector ready to serve traffic?
Monitoring health
Kubernetes uses health checks to:- Restart unhealthy pods
- Route traffic only to ready instances
- Prevent deployment of unhealthy versions
Rolling updates and rollbacks
Deploy updates with zero downtime and roll back if issues occur.Rolling updates
When deploying new versions:- New pods are created with updated image
- Traffic gradually shifts to new pods
- Old pods terminate after traffic migration
- Zero-downtime deployment achieved
Rollback process
If issues occur:- Identify problematic version
- Revert configuration in
applications-live - Create PR to rollback
- Merge PR to trigger rollback deployment
Environment-specific deployments
Each environment has specific access requirements and deployment processes.Development environment
- Purpose: Active development and testing
- Access: Developers with
dev-rwrole - Deployment: Frequent, often auto-approved
- Configuration: Development API endpoints
Staging environment
- Purpose: Integration testing
- Access: QA teams with
stg-rwrole - Deployment: Before production releases
- Configuration: Staging API endpoints
Test environment
- Purpose: System and performance testing
- Access: Test teams with
test-rwrole - Deployment: For comprehensive testing
- Configuration: Test API endpoints
UAT environment
- Purpose: User acceptance testing
- Access: Business users with
uat-rwrole - Deployment: Pre-production validation
- Configuration: Production-like settings
Troubleshooting
Resolve common issues that occur during deployment and runtime.Deployment failures
Issue: Connector fails to deploy- Check: Configuration syntax in
applications-live - Check: Image availability in container registry
- Check: Resource quotas and limits
- Check: Health check endpoints
- Resources: Kubernetes Troubleshooting
- Check: Application logs in DataDog or Grafana
- Check: Environment variables and secrets
- Check: External API connectivity
- Check: Resource limits (memory/CPU)
Runtime issues
Issue: High latency or timeouts- Check: External API response times
- Check: Resource constraints
- Check: Network connectivity
- Check: Connection pool settings
- Check: Resource limits and requests
- Check: Memory leaks in code
- Check: Thread pool configurations
- Check: Message queue backlogs
Access issues
Issue: Cannot access Kubernetes cluster- Check: Azure login:
az login - Check: Cluster credentials:
az aks get-credentials - Check: Role assignments in Azure Portal
- Check: kubectl configuration:
kubectl config view
Best practices
- Start with dev: Deploy to dev environment first
- Test thoroughly: Validate in staging before production
- Monitor deployments: Watch logs during and after deployment
- Use health checks: Implement proper health endpoints
- Configure resources: Set appropriate resource limits
- Manage secrets: Never hardcode credentials
- Version control: Tag and version all deployments
- Documentation: Document deployment procedures
Accessing runtime resources
Access runtime resources to manage and troubleshoot your connectors.Kubernetes access
With appropriate roles, access Kubernetes clusters:Service Bus explorer
Access Service Bus for message queue management:- Requires appropriate Azure roles
- Connect via Service Bus Explorer or Azure Portal
- Monitor queues and topics
- Manage subscriptions