Skip to content

Platform Mesh operator

Purpose

The Platform Mesh operator bootstraps and maintains a Platform Mesh environment. It reconciles a single custom resource — PlatformMesh — and drives all infrastructure provisioning through an ordered pipeline of subroutines.

WARNING

This component is in alpha. APIs may change on short notice, including breaking changes.

Runtime role

Given a PlatformMesh resource the operator:

  1. Deploys infrastructure and application components via FluxCD HelmReleases (or ArgoCD Applications) and OCM Resources.
  2. Configures kcp workspaces, provider connections, and API bindings.
  3. Generates scoped kubeconfig secrets for cross-cluster communication.
  4. Applies feature toggles (UI content configurations, authentication behavior).
  5. Waits for dependent resources to become ready before marking reconciliation complete.

Custom resource

yaml
apiVersion: core.platform-mesh.io/v1alpha1
kind: PlatformMesh
metadata:
  name: platform-mesh-sample
  namespace: platform-mesh-system
spec:
  exposure:
    baseDomain: example.com
    port: 443
    protocol: https
  ocm:
    repo:
      name: platform-mesh
    component:
      name: platform-mesh
    referencePath:
    - name: "core"
  kcp:
    providerConnections:
    - endpointSliceName: core.platform-mesh.io
      path: root:platform-mesh-system
      secret: platform-mesh-operator-kubeconfig
    extraWorkspaces:
    - path: "root:orgs:my-workspace"
      type:
        name: "universal"
        path: "root"
    extraProviderConnections:
    - path: "root:orgs:my-workspace"
      secret: "my-workspace-kubeconfig"
  values:
    service1:
      enabled: true
      targetNamespace: default
  featureToggles:
  - name: "feature-enable-getting-started"

Spec fields

FieldDescription
exposureExternal exposure settings: baseDomain, port, protocol
kcpkcp workspace topology: provider connections, extra workspaces, API bindings
valuesFree-form JSON merged with the profile's components section and passed as Helm values to each service. The merge is recursive — keys present in both the profile and spec.values are combined per nested level, and any leaf value in spec.values wins over the profile
infraValuesFree-form JSON recursively merged with the profile's infra section (same merge semantics as values)
ocmOCM repository, component name, and reference path for component delivery
profileConfigMapOptional reference to profile ConfigMap (name/namespace). Defaults to <instance-name>-profile in the instance namespace
featureTogglesList of named feature flags (see Feature toggles)
waitCustom readiness criteria for dependent resources

Status conditions

The operator reports per-subroutine conditions on the status subresource:

Condition typeMeaning
KcpsetupSubroutinekcp workspace and API binding setup
ProvidersecretSubroutineProvider kubeconfig secret generation
DeploymentSubroutineInfrastructure and component deployment
WaitSubroutineReadiness of downstream resources
ReadyOverall readiness (all subroutines succeeded)

Controllers

The operator binary provides the following controllers:

ControllerWatchesPurpose
PlatformMeshReconcilerPlatformMesh (core.platform-mesh.io/v1alpha1)Bootstraps and maintains the environment via subroutines
ResourceReconcilerResource (delivery.ocm.software/v1alpha1)Syncs OCM-resolved artifacts into FluxCD sources / ArgoCD Applications
ProviderReconcilerProvider (providers.platform-mesh.io/v1alpha1)Provisions kcp workspaces and kubeconfig Secrets for service providers
ManagedProviderReconcilerManagedProvider (providers.platform-mesh.io/v1alpha1)Orchestrates end-to-end onboarding of platform-owned services

PlatformMesh subroutines

The PlatformMeshReconciler processes the PlatformMesh resource through an ordered pipeline of subroutines. Each can be individually enabled or disabled via operator flags.

Deployment

Deploys platform-mesh infrastructure and application components using Go templates:

  • Reads the profile ConfigMap and renders Go templates from gotemplates/infra/ and gotemplates/components/.
  • Creates OCM Resources, HelmReleases (FluxCD) or Applications (ArgoCD) for each enabled service.
  • The profile's components.services.<name>.values (broad config) are deep-merged with PlatformMesh.spec.values (overrides), processed through Go template variable substitution, and passed 1-to-1 as spec.values to each service's HelmRelease or as helm.values to each ArgoCD Application.
  • Manages the authorization webhook secret (issuer, certificate, kcp webhook, CA bundle).
  • Waits for cert-manager to be ready before deploying component services.
  • Waits for the Istio control plane (istio-istiod if Istio is enabled).
  • Waits for kcp infrastructure (RootShard, FrontProxy).

Template variables available include baseDomain, baseDomainPort, port, protocol, iamWebhookCA, helmReleaseNamespace, kubeConfigEnabled, and deploymentTechnology.

KcpSetup

Initializes the kcp workspace hierarchy:

  • Creates workspaces for all paths referenced in providerConnections.
  • Provisions all necessery kcp resources from the in the /manifests/kcp folder using go templates.
  • Creates extra workspaces declared in spec.kcp.extraWorkspaces.
  • Configures default API bindings from spec.kcp.extraDefaultAPIBindings.

ProviderSecret

Generates kubeconfig secrets for provider connections:

  • Creates one Kubernetes Secret per entry in providerConnections and extraProviderConnections.
  • Supports two authentication modes:
    • Scoped (default) — writes a kubeconfig with a ServiceAccount token and RBAC derived from the APIExport.
    • AdminAuth — writes cluster-admin certificate material.
  • Updates secrets when the connection configuration changes.

FeatureToggles

Applies optional feature-flag manifests during reconciliation (disabled by default).

Wait

Blocks reconciliation until downstream resources satisfy readiness criteria:

  • By default waits for the platform-mesh-operator-infra-components HelmRelease to report Ready=True.
  • Custom criteria can be defined in spec.wait.resourceTypes:
yaml
spec:
  wait:
    resourceTypes:
    - group: helm.toolkit.fluxcd.io
      version: v2
      kind: HelmRelease
      namespace: default
      conditionStatus: "True"
      conditionType: "Ready"

Defaults

Fills in default values for ocm.repo.name and ocm.component.name when not explicitly set.

ResourceReconciler

A separate controller that watches OCM Resource objects (delivery.ocm.software/v1alpha1). When an OCM Resource's status is updated with resolved artifact information, this controller syncs those references into the corresponding FluxCD or ArgoCD objects so that the deployment technology can fetch and deploy them.

The deployment technology is determined from the profile ConfigMap (deploymentTechnology: fluxcd or argocd).

FluxCD mode — behavior is driven by repo and artifact annotations (or labels) on the Resource object:

repoartifactAction
ocichartCreates/updates a FluxCD OCIRepository with the resolved image reference and version tag
gitchartCreates/updates a FluxCD GitRepository with the resolved commit and repo URL
helmchartCreates/updates a FluxCD HelmRepository and patches the HelmRelease chart version
oci or helmimagePatches an existing HelmRelease values path with the resolved image tag

ArgoCD mode — updates ArgoCD Application objects:

artifactAction
chartUpdates spec.source.repoURL and spec.source.targetRevision on the ArgoCD Application
imageUpdates the image tag within spec.source.helm.values on the ArgoCD Application

Additional annotations:

AnnotationPurpose
forOverride the target HelmRelease name (format: namespace/name or name)
pathDot-separated path within spec.values to set the image tag (default: image.tag)
version-pathDot-separated path within Resource status to read the version (default: status.resource.version)
unsuspendWhen "true", sets spec.suspend: false on the target HelmRelease after updating

Feature toggles

NameDescription
feature-enable-getting-startedApplies ContentConfiguration for the Getting Started UI page
feature-accounts-in-accountsApplies ContentConfiguration for accounts within the account context
feature-enable-account-iam-uiApplies ContentConfiguration for the IAM UI Members section
feature-disable-email-verificationDisables email verification in WorkspaceAuthenticationConfiguration
feature-disable-contentconfigurationsDisables loading of all ContentConfiguration manifests

Configuration

Operator flags

FlagDefaultDescription
--workspace-dir/operator/Directory containing operator manifests and templates
--kcp-url(auto-detected)kcp API server URL
--kcp-namespaceplatform-mesh-systemNamespace where kcp components run
--kcp-front-proxy-namefrontproxyName of the kcp front-proxy service
--kcp-front-proxy-port8443Port of the kcp front-proxy
--kcp-root-shard-namerootName of the kcp root shard
--kcp-cluster-admin-secret-namekcp-cluster-admin-client-certSecret with cluster-admin credentials
--subroutines-deployment-enabledtrueEnable the Deployment subroutine
--subroutines-deployment-enable-istiotrueEnable Istio integration in Deployment
--subroutines-kcp-setup-enabledtrueEnable the KcpSetup subroutine
--subroutines-provider-secret-enabledtrueEnable the ProviderSecret subroutine
--subroutines-feature-toggles-enabledfalseEnable the FeatureToggles subroutine
--subroutines-wait-enabledtrueEnable the Wait subroutine
--remote-runtime-kubeconfig(none)Kubeconfig for the remote runtime cluster
--remote-runtime-infra-secret-name(none)Secret name for FluxCD to reach the runtime cluster
--remote-runtime-infra-secret-key(none)Secret key for FluxCD to reach the runtime cluster
--remote-infra-kubeconfig(none)Kubeconfig for a remote infra cluster (only needed if Local != Infra)

Profile ConfigMap

The operator reads its deployment blueprint from a profile ConfigMap linked to the PlatformMesh resource by naming convention: a PlatformMesh instance named foo expects a ConfigMap foo-profile in the same namespace (overridable via spec.profileConfigMap).

The ConfigMap must contain a profile.yaml key with two sections:

  • infra — infrastructure components (cert-manager, traefik, etcd-druid, gateway-api) with enabled state, Helm values, intervals
  • components — application services with enabled state, chart source, Helm values, dependsOn, syncWave, imageResources

The profile itself is rendered as a Go template with variables derived from spec.exposure (for example, {{ .baseDomain }}).

Configuration and values flow

Profile ConfigMap (components.services.<name>.values)   ← broad/general config

        ▼  deep-merge (spec.Values takes precedence)
PlatformMesh CR (spec.values.services.<name>.values)    ← per-instance overrides

        ▼  Go template rendering + variable substitution
Go Templates → HelmRelease spec.values / ArgoCD Application helm.values (1-to-1 per service)

The profile provides general configuration for all services. The PlatformMesh CR's spec.values provides per-instance customization — it is deep-merged on top of the profile. After merging, Go template expressions are resolved and the resulting values are set directly as each service's HelmRelease spec.values or ArgoCD Application spec.source.helm.values.

Deployment technologies

The operator supports two deployment technologies, configured per-section in the profile:

  • FluxCD (deploymentTechnology: fluxcd) — creates HelmRelease and OCM Resource objects
  • ArgoCD (deploymentTechnology: argocd) — creates ArgoCD Application objects with sync-wave ordering

Remote deployment

Remote deployment is used when the Runtime cluster (KCP, OCM) and the Infra cluster (FluxCD/ArgoCD) are different clusters.

ClusterRole
OperatorWhere the operator pod runs
RuntimeKCP, OCM Resources, PlatformMesh CR, profile ConfigMap
InfraFluxCD HelmReleases / ArgoCD Applications, OCIRepositories, HelmRepositories

When using remote deployment:

  • The PlatformMesh resource and profile ConfigMap must be created on the runtime cluster — the operator reconciles them remotely.
  • --remote-runtime-kubeconfig points the operator's manager to the runtime cluster.
  • --remote-infra-kubeconfig is only needed if the operator does not run on the infra cluster (Operator != Infra).
  • HelmReleases gain spec.kubeConfig.secretRef pointing to the runtime cluster secret.
  • ArgoCD Applications use destination.server to point to the remote runtime cluster.

Known limitation: the operator currently supports only a single remote deployment per operator instance.

Environment variables

VariableDescription
KUBECONFIGKubeconfig for the cluster hosting the PlatformMesh resource

When unset the operator uses in-cluster credentials.

Installation

The operator is distributed as a Helm chart from the Platform Mesh OCI registry.

Quick install

bash
helm install platform-mesh-operator \
  oci://ghcr.io/platform-mesh/helm-charts/platform-mesh-operator \
  --namespace platform-mesh-system --create-namespace

Chart details

Chartoci://ghcr.io/platform-mesh/helm-charts/platform-mesh-operator
Typeapplication
Sourceplatform-mesh/helm-charts

Dependencies bundled with the chart:

DependencyPurpose
commonShared Helm template snippets
platform-mesh-operator-crdsCRD definitions (can be disabled via crds.enabled)

Helm values

KeyTypeDefaultDescription
crds.enabledbooltrueInstall the PlatformMesh CRD via sub-chart
deployment.replicasint1Number of operator pod replicas
image.namestringghcr.io/platform-mesh/platform-mesh-operatorContainer image
log.levelstring"debug"Log verbosity level
operator.leaderElectbooltrueEnable leader election for HA
extraArgslist["--subroutines-feature-toggles-enabled=true"]Additional CLI flags passed to the operator binary
idp.registrationAllowedboolfalseAllow IDP self-registration
istio.enabledboolfalseEnable Istio sidecar injection for the operator pod
tracing.enabledboolfalseEnable OpenTelemetry tracing
tracing.collector.endpointstringobservability-opentelemetry-collector.observability.svc.cluster.local:4317OTLP collector endpoint
remoteInfra.enabledboolfalseEnables reconciliation of PlatformMesh resources on remote clusters
remoteInfra.secretNamestring"platform-mesh-kubeconfig"Secret containing kubeconfig for remote PlatformMesh resource access
remoteInfra.secretKeystring"kubeconfig"Key within the remote-infra secret
remoteRuntime.enabledboolfalseDeploy infrastructure artefacts to a remote cluster
remoteRuntime.secretNamestring"platform-mesh-secret"Secret containing kubeconfig for the remote runtime cluster
remoteRuntime.secretKeystring"kubeconfig"Key within the remote-runtime secret
remoteRuntime.infra.secretNamestring"platform-mesh-secret"Secret containing kubeconfig for the runtime infra cluster
remoteRuntime.infra.secretKeystring"kubeconfig"Key within the infra secret

Value override mechanism

The chart uses the common library's common.getKeyValue lookup function. Values resolve in this priority order:

  1. <key>Override in chart values (highest priority)
  2. global.<key> in chart or parent chart values
  3. <key> in chart values
  4. common.defaults.<key> from the common library (lowest priority)

This allows umbrella charts to set shared defaults via global.* while individual charts can still override locally.

Integration

  • kcp — the operator creates the workspace hierarchy and provider connections that form the control plane topology.
  • OCM (Open Component Model) — delivers versioned component descriptors. The operator creates OCM Resource objects, and the ResourceReconciler syncs resolved artifacts into FluxCD/ArgoCD.
  • FluxCD — the operator creates HelmRelease and source resources (OCIRepository, HelmRepository, GitRepository) managed by the Flux controllers.
  • ArgoCD — alternatively, the operator creates Application objects managed by the ArgoCD controller, with sync-wave ordering and automated sync policies.
  • Istio — deployed as infrastructure; the operator ensures its sidecar is present before communicating with kcp.

Repository

EU and German government funding logos

Funded by the European Union – NextGenerationEU.

The views and opinions expressed are solely those of the author(s) and do not necessarily reflect the views of the European Union or the European Commission. Neither the European Union nor the European Commission can be held responsible for them.