Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
9e368cf
feat(global-router): add a crate for types the Global Router componen…
atchernych Oct 26, 2026
008d8f2
refactor(global-router): drop doc comments that restate their items
atchernych Oct 26, 2026
71f89c9
fix(global-router): check a registration's model and correct three do…
atchernych Oct 27, 2026
8e30f3c
fix(global-router): let a client follow any lease the service grants
atchernych Oct 27, 2026
8b6c23e
feat(global-router): name a pool's PoolRelay by every address of its pod
atchernych Oct 27, 2026
c7ee161
test(global-router): drop checks the JSON round trips already make
atchernych Oct 27, 2026
48637b7
feat(global-router): add the pool discovery contract and its stores
atchernych Oct 27, 2026
03eae14
fix(global-router): mark a stale MCS view incomplete and log empty ones
atchernych Oct 27, 2026
36125d9
docs(global-router): say that an MCS watch stream waits for its first…
atchernych Oct 27, 2026
c410173
perf(global-router): read EndpointSlice lists from the API server's c…
atchernych Oct 27, 2026
959e2d5
perf(global-router): list EndpointSlices unpaged, so the cache serves…
atchernych Oct 27, 2026
a962b76
docs(global-router): say that pool Services need a ServiceExport, not…
atchernych Oct 27, 2026
1a1372a
fix(global-router): address the standards review of the discovery stores
atchernych Oct 27, 2026
ce637fc
fix(global-router): address the second review of the discovery stores
atchernych Oct 27, 2026
130aaef
fix(global-router): address the third review of the discovery stores
atchernych Oct 27, 2026
0d55a3c
feat(http-server): copy the reusable HTTP server core from #17178
atchernych Oct 26, 2026
8ae83b1
feat(global-router): add the Global Discovery HTTP service
atchernych Oct 27, 2026
4a70569
feat(global-router): add a container image and manifest for the Globa…
atchernych Oct 27, 2026
a38eb3d
fix(global-router): accept hyphenated pool suffixes and state the man…
atchernych Oct 27, 2026
d0dc8fb
fix(global-router): bound the lease the Global Discovery Service grants
atchernych Oct 27, 2026
f8d3d54
refactor(global-router): pass registrations and listings straight thr…
atchernych Oct 27, 2026
6db71b3
fix(global-router): bound how long the Kubernetes client waits
atchernych Oct 27, 2026
b4dd92d
feat(global-router): take MCS pool models from registrations
atchernych Oct 26, 2026
c506f67
fix(global-router): accept a hyphenated frontend Service suffix
atchernych Oct 27, 2026
272d33e
fix(global-router): address the second review of the registrations join
atchernych Oct 27, 2026
896e50d
fix(global-router): address the third review of the registrations join
atchernych Oct 27, 2026
c6efecb
Merge branch 'main' into atchernych/global-common
atchernych Oct 28, 2026
4bb3f61
Merge branch 'atchernych/global-common' into atchernych/global-discov…
atchernych Oct 28, 2026
5d30317
Merge branch 'atchernych/global-discovery-service' into atchernych/gl…
atchernych Oct 28, 2026
4f75f39
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Oct 28, 2026
7919ee9
Merge branch 'main' into atchernych/global-common
atchernych Oct 29, 2026
4323f2a
refactor(global-router): rename the shared types as reviewers asked
atchernych Oct 29, 2026
5aadafa
refactor(global-router): build the discovery client on the shared types
atchernych Oct 29, 2026
0a33716
Merge branch 'atchernych/global-common' into atchernych/global-discov…
atchernych Oct 29, 2026
69d703e
refactor(global-router): follow the shared types' renames
atchernych Oct 29, 2026
8428c92
Merge branch 'atchernych/global-discovery-service' into atchernych/gl…
atchernych Oct 29, 2026
e3f8acd
refactor(global-router): follow the shared types' renames
atchernych Oct 29, 2026
af79260
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Oct 29, 2026
547d554
Merge branch 'main' into atchernych/global-discovery-service
atchernych Oct 29, 2026
2a80836
docs(global-router): document the stores' watch streams, as the bots …
atchernych Oct 29, 2026
459c03f
fix(global-router): use Karmada's real Service name limit, 55
atchernych Oct 29, 2026
c09f797
Merge branch 'atchernych/global-discovery-service' into atchernych/gl…
atchernych Oct 29, 2026
f5c0508
docs(global-router): word the Karmada name check for any exported Ser…
atchernych Oct 29, 2026
044d6b5
Merge branch 'atchernych/global-discovery-service' into atchernych/gl…
atchernych Oct 29, 2026
cca47f9
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Oct 29, 2026
fb5ba6c
refactor(global-router): split --store into --pool-discovery and --re…
atchernych Oct 29, 2026
530fc45
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Oct 29, 2026
d829bc7
refactor(global-router): tighten the new flags after an adversarial r…
atchernych Oct 29, 2026
43d260f
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Oct 29, 2026
06b4f63
docs(global-router): call the discovery implementations backends, not…
atchernych Oct 29, 2026
4bd3635
Merge branch 'atchernych/global-discovery-service' into atchernych/gl…
atchernych Oct 29, 2026
f2ca6be
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Oct 29, 2026
952f1ff
ci(global-router): cover the Global Discovery Service image and manifest
atchernych Oct 29, 2026
c5760a3
fix(global-router): check the Global Discovery Service flags, and ans…
atchernych Oct 29, 2026
8e0fc02
fix(global-router): run the example manifest under restricted Pod Sec…
atchernych Oct 29, 2026
fad5749
fix(global-router): make every flag mistake a usage error, and warn w…
atchernych Oct 29, 2026
822175e
docs(global-router): say what the watch stream waits for
atchernych Oct 29, 2026
260d5e6
feat(global-router): reserve POST /routers until router registration …
atchernych Oct 29, 2026
39a56e0
docs(global-router): say how callers treat a partial list
atchernych Oct 29, 2026
2e823f7
docs(global-router): say when GET /pools is partial and how callers t…
atchernych Oct 29, 2026
bc1eeed
Merge branch 'atchernych/global-discovery-service' into atchernych/gl…
atchernych Oct 30, 2026
457e1ba
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Oct 30, 2026
a5e58d8
fix(global-router): check the frontend and peer flags as the router f…
atchernych Oct 30, 2026
c4d7898
refactor(global-router): move registration sharing between instances …
atchernych Oct 30, 2026
c666e8f
fix(global-router): check the suffixes with clap, and keep frontends …
atchernych Oct 30, 2026
0917613
Merge branch 'main' into atchernych/global-discovery-service
atchernych Oct 30, 2026
00bec2a
Merge branch 'atchernych/global-discovery-service' into atchernych/gl…
atchernych Oct 30, 2026
6be74bc
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Oct 30, 2026
1803850
docs(global-router): say how registrations match MCS pools
atchernych Oct 30, 2026
7332626
fix(global-router): list every Ready PoolRelay pod of a pool
atchernych Oct 30, 2026
b844440
Merge branch 'atchernych/global-discovery-service' into atchernych/gl…
atchernych Oct 30, 2026
619ffed
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Oct 30, 2026
47ee94b
docs(global-router): say a pool's registrations come from its PoolRelays
atchernych Oct 30, 2026
2ba2b8b
fix(global-router): keep joining the pool sources after a failed watch
atchernych Oct 30, 2026
892659d
fix(global-router): restart the join's backoff and log the frontend w…
atchernych Oct 30, 2026
98c2a63
fix(global-router): cap request bodies at 64 KiB
atchernych Oct 30, 2026
d8f5672
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Oct 30, 2026
88c07e4
Merge branch 'main' into atchernych/global-discovery-http
atchernych Nov 2, 2026
7f61b37
docs(global-router): give the manifest's path from the repository root
atchernych Nov 2, 2026
ea29da0
Merge branch 'atchernych/global-discovery-http' into atchernych/disco…
atchernych Nov 2, 2026
451d353
Merge branch 'main' into atchernych/discovery-pool-registrations
atchernych Nov 3, 2026
6636a36
Merge branch 'main' into atchernych/discovery-pool-registrations
atchernych Nov 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions container/global-discovery-service.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,23 @@
# cluster (not through Karmada). Replace IMAGE with the pushed image, for example
# from the repository root:
# sed "s#IMAGE#<registry>/global-discovery-service:<tag>#" container/global-discovery-service.yaml | kubectl apply -f -
# It needs only read access to EndpointSlices. It lists the pools whose
# `<DGD name>-pool-relay` Services Karmada imports, and the replicas of the
# Global Router Service named by the --router-* arguments: set those to the
# router's namespace, its Service and the port PoolRelays connect to.
# It needs only read access to EndpointSlices. PoolRelays register their pools
# with it (POST /pools), and it lists a pool while its registration is live and
# Karmada imports a Ready endpoint of its `<DGD name>-pool-relay` Service. The
# pool's frontends are the Ready endpoints of its `<DGD name>-frontend` Service,
# exported the same way. It also lists the replicas of the Global Router
# Service named by the --router-* arguments: set those to the router's
# namespace, its Service and the port PoolRelays connect to.
#
# It reads the imported slices with the pod's credentials, so this cluster
# needs a ServiceImport for each pool's PoolRelay Service and for the router
# Service. To read the Karmada control plane instead, which holds every
# exported Service's slices, mount its kubeconfig from a Secret, point
# needs a ServiceImport for each pool's PoolRelay and frontend Services and for
# the router Service. To read the Karmada control plane instead, which holds
# every exported Service's slices, mount its kubeconfig from a Secret, point
# KUBECONFIG at it, and grant the same read access there.
#
# With the default --registration-storage=memory, one instance keeps only the
# registrations it receives, so run one, and have every PoolRelay register
# with it.
apiVersion: v1
kind: Namespace
metadata:
Expand Down
1 change: 1 addition & 0 deletions lib/global-discovery-service/src/backends.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@

pub mod kubernetes;
pub mod memory;
pub mod registered;
mod stream;
19 changes: 12 additions & 7 deletions lib/global-discovery-service/src/backends/kubernetes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,13 @@
//!
//! Each pool's PoolRelay Service, named `<DGD name>-pool-relay` by default,
//! needs a `ServiceExport`, and so does the router's Service in the hub, so
//! its replicas appear in every importing cluster. A pool is live while a
//! PoolRelay endpoint is Ready. Its `relay_identities` are the addresses of
//! every Ready PoolRelay pod, for routers on a trusted network to admit each
//! of the pool's active-active replicas.
//! its replicas appear in every importing cluster. Read alone, a pool is live
//! while a PoolRelay endpoint is Ready. Its `relay_identities` are the
//! addresses of every Ready PoolRelay pod, for routers on a trusted network to
//! admit each of the pool's active-active replicas. The service also needs a
//! live registration, which says what the pool serves
//! ([`crate::backends::registered`]), and reads the pool's frontend addresses
//! from its exported frontend Service, named `<DGD name>-frontend` by default.
//!
//! With Karmada, a Service name may have at most 55 characters: DGD names up
//! to 44 with the default `-pool-relay` suffix. Karmada imports a Service as
Expand All @@ -33,10 +36,12 @@
//! changed.
//!
//! ```ignore
//! let registrations = Arc::new(MemoryPoolStore::new(lease));
//! let imported = McsPoolDirectory::new(client.clone(), mcs, suffix, frontends)?;
//! let backend = PoolDiscoveryBackend {
//! pools: Arc::new(McsPoolDirectory::new(client.clone(), mcs, suffix)),
//! pools: Arc::new(RegisteredPoolDirectory::new(Arc::new(imported), registrations.clone(), lease)),
//! routers: Arc::new(McsReplicaDirectory::new(client, &router, mcs)),
//! registrar: None,
//! registrar: Some(registrations),
//! };
//! service::serve(listener, backend, None, shutdown).await?;
//! ```
Expand All @@ -47,5 +52,5 @@ mod hub;
mod mcs;

pub use endpoints::{ExportedService, McsReplicaDirectory};
pub use hub::McsPoolDirectory;
pub use hub::{FrontendService, McsPoolDirectory};
pub use mcs::{KARMADA_MAX_SERVICE_NAME, McsImplementation};
Loading
Loading