Skip to main content
Feedback

Preparing your Kubernetes cluster for Flex Runtime

Updated 
note

Boomi Flex Runtime is part of Boomi's Early Access program, which offers beta versions of Boomi innovations on an "as is" basis, with no warranties. These features are not final production releases, are unsupported under Boomi's service agreements and support services, and are not intended for production use. While Boomi will work to address issues encountered during the preview and welcomes participant feedback, any feedback provided — whether ideas, suggestions, code, or recommendations, oral or written — is irrevocably assigned to Boomi, LP. By participating, you confirm you have the authority to provide that feedback, will not assert any intellectual property claims against Boomi, and that Boomi may freely implement it without violating any party's rights. If a beta feature doesn't meet Boomi's standards or raises significant concerns, it may never reach general availability, and Boomi cannot guarantee any particular innovation will be released in a supported form. Note that some innovations may only be available as open source or for specific runtime configurations. Documentation may be provided as PDFs, online, or on Community forums.

Refer to the Early Access page to view current programs and request Early Access for a specific feature.

Before installing a Flex Runtime, prepare your Kubernetes cluster as detailed below, so it meets all of the requirements.

Diagram of the Flex Runtime responsibility boundary

Step 1. Create a Kubernetes cluster

Flex Runtime runs on any conformant Kubernetes distribution: managed Kubernetes from any cloud provider, or self-managed, including bare metal. Nothing in the runtime is tied to a specific cloud.

RequirementValue
Kubernetes versionLatest stable release
Node architecturelinux/amd64 or linux/arm64
StorageNetwork File System

Step 2. Create a namespace

Each runtime occupies its own namespace and is the only runtime in it. Several of the resources a runtime creates are named the same in every installation, so two runtimes in one namespace would collide. For more than one runtime, create a namespace per runtime and repeat these steps.

kubectl create namespace <name>

Step 3. Create the storage volume and claim

The runtime keeps all of its state on a single persistent volume claim. Several pods mount it simultaneously, potentially across nodes.

PropertyValue
Access modeReadWriteMany
OwnershipWritable by UID 1000 and GID 1000
Claim nameAny name must match what is entered in the Runtime Management UI

Create both the PersistentVolume and the PersistentVolumeClaim resources in the runtime's namespace. The runtime only ever sees the claim.

The provisioning of the volume is specific to your cloud vendor, so follow your vendor's documentation:

PlatformDocumentation
AWSAmazon EFS CSI driver
AzureAzure NetApp Files with AKS
OtherAny CSI driver or static PersistentVolume definition that provides ReadWriteMany over NFS

The runtime's pods run as a non-root user UID 1000, and the volume must be writable by that user.

Step 4. Allow outbound network access

The cluster needs outbound HTTPS on port 443 to:

DestinationPurpose
platform.boomi.comRuntime registration, configuration, and lifecycle commands
ghcr.ioPulling runtime and workload images

Images are publicly available at https://github.com/OfficialBoomi/. No registry credentials or image pull secret is required.

Step 5. Inbound traffic to the runtime

The runtime creates a Kubernetes Service named ingress-gateway in its namespace. It is of type ClusterIP, and it is the single entry point for all traffic into the runtime from outside. It listens on two ports:

PortProtocol
8080HTTP, plaintext only
8443HTTPS, TLS only

5a. Choose how traffic reaches the Service

Any standard Kubernetes routing mechanism works. Pick whichever matches what the cluster already does for other applications, and follow that implementation's documentation:

OptionDocumentation
Gateway APIRecommended. Upstream Kubernetes APIs, portable across vendors. Only the GatewayClass behind them is vendor-specific. Gateway API
AWSAWS Load Balancer Controller for EKS
AzureApplication Gateway for Containers
OtherAny Ingress controller or load balancer integration

Each of these routes to the same destination, the ingress-gateway Service in the runtime's namespace, and all traffic bound for the runtime should be directed there. The gateway performs its own routing onward, matching each request to the workload that should handle it.

The port you route to is determined by where TLS terminates. Route to port 8080 when your load balancer terminates TLS and the remaining connection to the runtime carries plaintext, and to port 8443 when traffic should remain encrypted the whole way. Both are supported, and the two sections below describe each in turn.

5b. TLS terminated before the runtime

In this scenario, the client's TLS session ends somewhere in your own infrastructure, whether at the load balancer or at a Gateway or ingress controller running inside the cluster, and the final connection to the runtime carries plaintext HTTP. It suits environments where the network between your routing layer and the runtime's pods is already trusted, and where certificate management is best kept in one place at the edge.

Diagram of the TLS terminated before the runtime

Route to the ingress-gateway Service on port 8080. Nothing further is required.

5c. End to end TLS

In this scenario, traffic remains encrypted the whole way to the runtime. The client's TLS session terminates in your own infrastructure as before, and whichever component makes the final connection to the runtime, whether the load balancer itself or a Gateway or ingress controller within the cluster, opens a new TLS connection to ingress-gateway. Each hop is encrypted under its own certificate, and no private key of yours is ever handed to Boomi. It suits environments where policy requires that traffic is never plaintext on the wire, including inside the cluster.

Image diagram of the End to end TLS

On that final connection, ingress-gateway presents a certificate issued by the runtime's own internal certificate authority. The component connecting to it will not trust that authority by default, and must be given the authority's certificate to validate what it is presented with.

The runtime publishes that certificate into its own namespace as a ConfigMap named boomi-runtime-ca, holding the certificate under the key ca.crt. The runtime creates and maintains it, so it requires no action on your part, and it is the trust bundle your routing layer should be configured against.

Route to the ingress-gateway Service on port 8443 over HTTPS, and validate the certificate it presents against that ConfigMap. If using a Gateway, it is expressed as a BackendTLSPolicy, shown below. Other mechanisms express the same thing in their own terms, so consult your implementation's documentation for how it consumes a backend trust bundle.

apiVersion: gateway.networking.k8s.io/v1
kind: BackendTLSPolicy
metadata:
name: ingress-gateway
namespace: <namespace>
spec:
targetRefs:
- group: ""
kind: Service
name: ingress-gateway
sectionName: https
validation:
caCertificateRefs:
- group: ""
kind: ConfigMap
name: boomi-runtime-ca
hostname: ingress-gateway.<namespace>.svc.cluster.local
On this Page