You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/about/design/service-provider.md
+17-38Lines changed: 17 additions & 38 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,13 +11,13 @@ This document outlines the `ServiceProvider` domain and its technical considerat
11
11
12
12
## Non-Goals
13
13
14
-
-`ServiceProviders` are not required to deploy their `DomainService` on `WorkloadClusters`. For now, a `DomainService` can be deployed on either a `WorkloadCluster` or `MCPCluster`.
14
+
-`ServiceProviders` are not required to deploy their `DomainService` on `WorkloadClusters`. For now, a `DomainService` can be deployed on either a `WorkloadCluster` or `MCPCluster`. However, newly developed services should prioritize deploying their workloads on `WorkloadClusters`.
15
15
- Define a `ServiceProvider` model that implements a higher level `API`/`Run` platform concept (e.g., to allow flexible deployment models, e.g. with `ClusterProvider`[kcp](https://github.com/kcp-dev/kcp))
16
16
17
17
## Terminology
18
18
19
-
-`End users`: These are the consumers of services provided by an openMCP platform installation. They operate on the `OnboardingCluster` and `MCPCluster` (see [deployment model](#deployment-model)).
20
-
-`Operators`: These are either human users or technical systems that are responsible for managing an openMCP platform installation. While they may operate on any cluster, their primary focus is on the `PlatformCluster` and `WorkloadCluster`.
19
+
-`End Users`: These are the consumers of services provided by an openMCP platform installation. They operate on the `OnboardingCluster` and `MCPCluster` (see [deployment model](#deployment-model)).
20
+
-`Platform Operators`: These are either human users or technical systems that are responsible for managing an openMCP platform installation. While they may operate on any cluster, their primary focus is on the `PlatformCluster` and `WorkloadCluster`.
21
21
22
22
## Domain
23
23
@@ -42,7 +42,7 @@ A `ServiceProvider` defines a `ServiceProviderAPI` to allow end users to request
42
42
43
43
```mermaid
44
44
graph LR
45
-
USR[User]
45
+
USR[EndUser]
46
46
SPA[ServiceProviderAPI]
47
47
DSA[DomainServiceAPI]
48
48
USR -->|manages instances|SPA
@@ -57,7 +57,7 @@ While both are end user facing, they serve different purposes:
57
57
```mermaid
58
58
sequenceDiagram
59
59
%% participants
60
-
participant usr as User
60
+
participant usr as EndUser
61
61
participant sp as ServiceProvider
62
62
participant ds as DomainService
63
63
@@ -70,12 +70,12 @@ sequenceDiagram
70
70
71
71
### Config
72
72
73
-
A `ServiceProvider` defines a `ServiceProviderConfig` that enables platform operators to specify different offerings of a managed `DomainService`. For example, tenant 1 can consume the `ServiceProviderAPI` for `Crossplane` through a `CrossplaneProviderConfig``A`, which allows the installation of Crossplane versions `v1` and `v2`. In contrast, tenant 2 is restricted to consuming only `Crossplane` version `v1` through `CrossplaneProviderConfig``B`.
73
+
A `ServiceProvider` defines a `ServiceProviderConfig` that contains provider-specific options for platform operators to specify a managed service offering. For example, [service-provider-crossplane](https://github.com/openmcp-project/service-provider-crossplane/) allows platform operators to decide which Crossplane providers can be installed by end user as part of the managed service.
74
74
75
75
```mermaid
76
76
graph LR
77
-
%% Operator
78
-
OP[Operator]
77
+
%% PlatformOperator
78
+
OP[PlatformOperator]
79
79
SP[ServiceProvider]
80
80
SPA[ServiceProviderAPI]
81
81
SPC[ServiceProviderConfig]
@@ -96,7 +96,7 @@ End users need to be aware of a) the available managed services, and b) valid in
96
96
97
97
A) The available service offerings are made visible by installing the `ServiceProviderAPI` on the `OnboardingCluster` (see [deployment model](#deployment-model)). This ensures that any platform tenant is aware of all available `ServiceProviderAPIs`. In other words, the platform does not hide its end-user-facing feature set, even if a user belongs to a tenant that cannot successfully consume a specific `ServiceProviderAPI`.
98
98
99
-
B) Valid input values are communicated through `ServiceProviderConfig` objects created on the `OnboardingCluster`. A user from a tenant without an associated `ServiceProviderConfig` can technically still request a `DomainService` through a `ServiceProviderAPI`, but any attempt to deploy the `DomainService` will be denied by the `ServiceProvider`. It is important to note that `ServiceProviderConfigs` are owned and managed by the platform operator.
99
+
B) Valid input values are communicated through a yet-to-be-defined 'Marketplace'-like API provided by a `PlatformService`. Note: This is still work in progress and outside the scope of this document.
100
100
101
101
### Deployment Model
102
102
@@ -107,13 +107,13 @@ graph TD
107
107
%% Onboarding Cluster
108
108
subgraph OnboardingCluster
109
109
SPAPI[ServiceProviderAPI]
110
-
SPC[ServiceProviderConfig]
111
110
end
112
111
113
112
%% Platform Cluster
114
113
subgraph PlatformCluster
115
114
SPO[openMCP-operator]
116
115
SP[ServiceProvider]
116
+
SPC[ServiceProviderConfig]
117
117
end
118
118
119
119
%% MCP Cluster
@@ -124,7 +124,7 @@ graph TD
124
124
125
125
%% edges
126
126
SP -->|reconciles|SPAPI
127
-
SPAPI -->|references|SPC
127
+
SP -->|uses|SPC
128
128
SP -->|manages|DSAPI
129
129
SP -->|manages|DS
130
130
DS -->|reconciles|DSAPI
@@ -152,6 +152,10 @@ graph TD
152
152
Crossplane -->|reconciles|Bucket
153
153
```
154
154
155
+
:::info
156
+
In the long term, the goal is to deploy every `DomainService` on `WorkloadClusters`. Newly developed services should prioritize deploying their workloads on `WorkloadClusters` rather than `MCPClusters`.
157
+
:::
158
+
155
159
## Validation
156
160
157
161
A `ServiceProvider` is considered healthy if both its `API` and `Run` components have been successfully synced and are ready for consumption.
@@ -193,9 +197,9 @@ Main tasks towards MCP/Workload Clusters (based on watching the `ServiceProvider
193
197
194
198
In this context, `reconcileScope` holds the `ServiceProviderConfig` and provides clients to access onboarding, mcp and workload clusters.
195
199
196
-
Main tasks towards Onboarding/Platform Cluster (based on `ServiceProviderConfig` location):
200
+
Main tasks towards Platform Cluster:
197
201
198
-
-resolve and validate `ServiceProviderConfig` against `DomainService` context (e.g. available `ReleaseChannel` options)
202
+
-Resolve `ServiceProviderConfig`. If no `ServiceProviderConfig` can be resolved, the service request will fail.
199
203
200
204
### Reconcile Sequence
201
205
@@ -233,31 +237,6 @@ The following artifacts are derived from this document and must be continuously
233
237
234
238
The remainder of this document contains topics that are out of scope for now.
235
239
236
-
### Release Channel Detour
237
-
238
-
Technically, a `ServiceProvider` requires configuration information about the artifact versions it can use to deploy a service. To address this, openMCP introduces the concept of `ReleaseChannels`, which define the available artifacts (e.g. container images, helm charts, etc.) within the context of an openMCP installation. A `ServiceProvider` indirectly consumes a `ReleaseChannel` through its `ServiceProviderConfig`:
239
-
240
-
```mermaid
241
-
graph TD
242
-
subgraph Platform
243
-
subgraph ServiceProvider
244
-
SPC[ServiceProviderConfig]
245
-
SP[ServiceProvider]
246
-
end
247
-
TN[Tenant]
248
-
RC[ReleaseChannel]
249
-
end
250
-
251
-
%% edges
252
-
SP -->|one...uses...many|SPC
253
-
SPC ---|many...references subset of artifacts...one|RC
254
-
SPC ---|many...allows access...many|TN
255
-
```
256
-
257
-
:::info
258
-
A `ServiceProviderConfig` may include configuration parameters beyond just `ReleaseChannel` information or artifact versions. In this sense, it is more than just a 'version pinning' mechanism.
259
-
:::
260
-
261
240
### Multicluster Execution Model
262
241
263
242
Multi-cluster functionality for `ServiceProvider` is a design goal for future iterations and might get integrated into `service-provider-runtime`. This would generally enable to run any `DomainService` on shared `WorkloadCluster`.
0 commit comments