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
@@ -293,8 +304,15 @@ be recognized as a single combined service. For example, if 5 clusters export
293
304
all exporting clusters. Properties of the `ServiceImport` (e.g. ports, topology)
294
305
will be derived from a merger of component `Service` properties.
295
306
296
-
This specification is not prescriptive on exact implementation details. Existing implementations of Kubernetes Service API (e.g. kube-proxy) can be
297
-
extended to present `ServiceImports` alongside traditional `Services`. One often discussed implementation requiring no changes to kube-proxy is to have the mcs-controller maintain ServiceImports and create "dummy" or "shadow" Service objects, named after a mcs-controller managed EndpointSlice that aggregates all cross-cluster backend IPs, so that kube-proxy programs those endpoints like a regular Service. Other implementations are encouraged as long as the properties of the API described in this document are maintained.
307
+
This specification is not prescriptive on exact implementation details. Existing
308
+
implementations of Kubernetes Service API (e.g. kube-proxy) can be extended to
309
+
present `ServiceImports` alongside traditional `Services`. One often discussed
310
+
implementation requiring no changes to kube-proxy is to have the mcs-controller
311
+
maintain ServiceImports and create "dummy" or "shadow" Service objects, named
312
+
after a mcs-controller managed EndpointSlice that aggregates all cross-cluster
313
+
backend IPs, so that kube-proxy programs those endpoints like a regular Service.
314
+
Other implementations are encouraged as long as the properties of the API described
315
+
in this document are maintained.
298
316
299
317
### User Stories
300
318
@@ -305,11 +323,11 @@ the system. The goal here is to make this feel real for users without getting
305
323
bogged down.
306
324
-->
307
325
308
-
#### Different Services Each Deployed to Separate Cluster
326
+
#### Different ClusterIP Services Each Deployed to Separate Cluster
309
327
310
-
I have 2 clusters, each running different services managed by different teams,
311
-
where services from one team depend on services from the other team. I want to
312
-
ensure that a service from one team can discover a service from the other team
328
+
I have 2 clusters, each running different ClusterIP services managed by different
329
+
teams, where services from one team depend on services from the other team. I want
330
+
to ensure that a service from one team can discover a service from the other team
313
331
(via DNS resolving to VIP), regardless of the cluster that they reside in. In
314
332
addition, I want to make sure that if the dependent service is migrated to
315
333
another cluster, the dependee is not impacted.
@@ -323,7 +341,7 @@ access instances of this service in priority order based on availability and
323
341
locality. Requests to my replicated service should seamlessly transition (within
324
342
SLO for dropped requests) between instances of my service in case of failure or
325
343
removal without action by or impact on the caller. Routing to my replicated
326
-
service should optimize for cost metric (e.g.prioritize traffic local to zone,
344
+
service should optimize for cost metric (e.g.prioritize traffic local to zone,
327
345
region).
328
346
329
347
### Constraints
@@ -534,11 +552,11 @@ given `EndpointSlice` will reference its `ServiceImport` using the label
534
552
associated with its `Service` in a single cluster.
535
553
536
554
Each imported `EndpointSlice` will also have a
537
-
`multicluster.kubernetes.io/source-cluster`label with the cluster name, a
538
-
registry-scoped unique identifier for the cluster. The `EndpointSlice`s imported
539
-
for a service are not guaranteed to exactly match the originally exported
540
-
`EndpointSlice`s, but each slice is guaranteed to map only to a single source
541
-
cluster.
555
+
`multicluster.kubernetes.io/source-cluster`label with the cluster id, a
556
+
clusterset-scoped unique identifier for the cluster. The `EndpointSlice`s
557
+
imported for a service are not guaranteed to exactly match the originally
558
+
exported `EndpointSlice`s, but each slice is guaranteed to map only to a single
559
+
source cluster.
542
560
543
561
The mcs-controller is responsible for managing imported `EndpointSlice`s.
544
562
@@ -860,6 +878,19 @@ required by virtue of being two different `ServiceExport`s.
860
878
Note that this puts the burden of enforcing the boundaries of a
861
879
`ServiceExport`'s fungibility on the name/namespace creator.
862
880
881
+
Individually addressing pods backing a Headless service is exempt from the rules
882
+
described in this section. Such a pod may be addressed using the
883
+
`<hostname>.<clusterid>.<svc>.<ns>.svc.clusterset.local` format, where `clusterid`
884
+
must uniquely identify a cluster within a clusterset. The implementation may use
885
+
cluster name as `clusterid`, and this is not ambiguous if all the clusters on
886
+
the clusterset are registered with the same cluster registry. In case a
887
+
clusterset contains clusters registered with multiple registries, cluster name
888
+
may be ambiguous. The implementation may in such case use `clusterid` composed
889
+
of cluster name and an additional DNS label, separated with a dot. The
890
+
additional label gives additional context, which is implementation-dependent and
891
+
may be used for instance to uniquely identify the cluster registry with which a
892
+
cluster is registered.
893
+
863
894
864
895
#### EndpointSlice
865
896
@@ -891,7 +922,7 @@ mcs-controller itself in distributed implementations.
891
922
We recommend creating leases to represent connectivity with source clusters.
892
923
These leases should be periodically renewed by the mcs-controller while the
893
924
connection with the source cluster is confirmed alive. When a lease expires, the
894
-
cluster name and `multicluster.kubernetes.io/source-cluster` label may be used
925
+
cluster id and `multicluster.kubernetes.io/source-cluster` label may be used
895
926
to find and remove all `EndpointSlices` containing endpoints from the
0 commit comments