Skip to content

feat(global-router): integrate Karmada and MCS support - #17270

Merged
sachalmalick merged 5 commits into
codex/global-router-reserved-gpu-computefrom
codex/global-router-mcs-integration
Oct 25, 2026
Merged

sachalmalick merged 5 commits into
codex/global-router-reserved-gpu-computefrom
codex/global-router-mcs-integration

Conversation

@sachalmalick

Copy link
Copy Markdown
Contributor

Summary

Cherry-pick all five commits from #16963 onto the reserved GPU infrastructure branch, preserving source authors and cherry-pick references. Resolve conflicts with the operator-config cleanup so public examples retain synthetic identifiers and the CPU entry point continues to load explicitly selected local deployment settings.

This is the integration layer of a PR stack: GPU infrastructure → Karmada/MCS integration → existing four-region fleet setup and live findings. No merge to global-router-v2 or main is performed.

Part of #17269.

Validation

  • TypeScript build and all 59 combined CDK tests passed before the four-region extension.
  • Existing private-route logical IDs remain unchanged; public example route IDs are synthetic.
  • Live validation in the follow-up reuses the running hub and preserves the original Ohio–West route stacks. The original public-route extension was synthesized and reviewed but was not deployed in that run.

atchernych and others added 5 commits October 25, 2026 06:59
A deployment with `multiCluster` set is ready for Karmada and the SIG
Multicluster (MCS) API:

- An ingress rule from each peer VPC range on the EKS cluster security
  group, since MCS EndpointSlices list pod addresses.
- The peer ranges are excluded from source NAT in the VPC CNI
  (`AWS_VPC_K8S_CNI_EXCLUDE_SNAT_CIDRS` on `aws-node`), so traffic
  between the clusters keeps its pod address.
- The MCS ServiceExport and ServiceImport CRDs, copied from Karmada
  1.19.0.
- In the hub only, the Karmada 1.19.0 control plane from the release
  Helm chart, with every image pinned. Its API is an internal NLB on
  TCP 5443 that only the member VPCs can reach, and its certificate
  covers `*.elb.<region>.amazonaws.com`.

Ohio is the hub (`aws-ohio`) and West a member (`aws-west`); the names
match the Global Router's site IDs. The peering stacks can also route
the public subnets, so a bastion can reach the other VPC; existing
private routes keep their logical IDs.

Members join with `karmadactl register`, using a short-lived token from
the hub, so the join is a documented step after deployment. The README
also covers moving the running clusters off the hand-installed Karmada.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Anna Tchernych <atchernych@nvidia.com>
(cherry picked from commit 220c0ed)
Set `publicRouteTableIds` for both POC VPCs. In each VPC these are the
only two route tables with an internet gateway route, which belong to
publicSubnet1 and publicSubnet2. `deployment=both` now also adds a route
to the peer VPC in each of them, so a bastion can reach the other VPC,
including the Karmada API load balancer, without a proxy pod.

The synthesized peering stacks gain OhioToWestPublicRoute1-2 and
WestToOhioPublicRoute1-2 and change nothing else; the existing routes
keep their logical IDs.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Anna Tchernych <atchernych@nvidia.com>
(cherry picked from commit e0115f7)
MCS lists pod addresses, so a Global Router that takes a Relay address
from discovery connects to the Relay pod directly. Without the peer
ingress rule, Ohio reached a West Relay only through its NLB. The rule
reaches pods only because the node launch templates set no security
groups, so EKS gives the nodes the cluster security group that the rule
is on. Assert both, so a launch template change cannot silently break
direct pod traffic between the clusters.

The README now says why the rule exists, and no longer says that no
broad worker ingress rule is added.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Anna Tchernych <atchernych@nvidia.com>
(cherry picked from commit a1749b0)
- Install the Karmada control plane only with `-c karmada=true`. The
  running clusters still have a Karmada that was installed by hand, so
  every routine Ohio deployment would have tried, and failed, to install
  the chart.
- Keep the chart's setup Job for 15 minutes and lower the Helm timeout
  to 10. Helm 4 waits for every resource to be ready at once and counts
  the Job, deleted 10 seconds after it finishes, as never ready, so the
  first install would hang until the kubectl Lambda timed out.
- Keep the MCS CRDs and the Karmada release when they leave the stack or
  a deployment rolls back. The CRDs may predate the stack, deleting one
  deletes every ServiceExport and ServiceImport, and the chart's
  uninstall hook deletes the CRDs and its own namespace.
- Turn on the controller's PropagateDeps feature gate, which the chart
  turns off. Without it, a propagated ServiceImport never brings its
  derived Service and EndpointSlices.
- Admit ICMP "fragmentation needed" from the peer VPC, so Path MTU
  Discovery works over inter-Region peering.
- Fix the join steps: run the register command that `token create`
  prints, with `--cluster-name`, and on Ohio with
  `--namespace karmada-agent`, because `karmada-system/karmada-kubeconfig`
  belongs to the control plane there.

Cleanups: peer ranges must be valid VPC ranges that do not overlap the
cluster's own VPC; the Karmada version must match the vendored CRDs; the
component image tags that repeated the release chart's own pins are
gone, and kubectl uses the chart's digest field; the CRD refresh loop no
longer overwrites the files on a failed download, and crds/README.md
keeps the upstream license notice; the tests now fail when a dependency,
image pin, patch type or peering ID changes; and the comments, stack
descriptions, MCS wording and a moved docs link are corrected.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Anna Tchernych <atchernych@nvidia.com>
(cherry picked from commit 5b05c6a)
The README said the ServiceImport's PropagationPolicy must set
`propagateDeps: true`. Karmada's PropagationPolicy webhook already sets
it for any policy that selects a ServiceImport, which is why the manual
test on the POC clusters worked without it. What the import needs is
the controller's PropagateDeps feature gate, which CDK turns on.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Anna Tchernych <atchernych@nvidia.com>
(cherry picked from commit cf40408)
@copy-pr-bot

copy-pr-bot Bot commented Oct 25, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@github-actions github-actions Bot added feat documentation Improvements or additions to documentation labels Oct 25, 2026
@sachalmalick
sachalmalick marked this pull request as ready for review October 25, 2026 07:35
@sachalmalick
sachalmalick requested a review from a team as a code owner October 25, 2026 07:35
@sachalmalick
sachalmalick merged commit 0997e8b into codex/global-router-reserved-gpu-compute Oct 25, 2026
24 of 27 checks passed
@sachalmalick
sachalmalick deleted the codex/global-router-mcs-integration branch October 25, 2026 07:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation feat size/XXL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants