Zum Inhalt

Spoke-Config

Einführung: Ein Spoke ist das Produkt des Hubs

Der Hub existiert, um Spokes zu hosten. Ein Spoke ist das, was ein Consumer-Team tatsächlich erhält: eine subscription, die platziert, mit Tags versehen, angebunden und abgesichert ist. Alles im Hub — firewall, DNS, Policies, Monitoring — ist dafür da, dass Spokes sicher funktionieren. Die Sicht des Consumers findest du unter Was du bekommst. Was ein Spoke-Deployment erstellt und wie sich sein Service Principal und seine Gruppen verhalten, steht in Spoke canvas.

Ein Spoke = eine JSON-Datei = ein workload in einem Spoke-Environment (dev, tst, acc, prd, shared).

Aufbau

Spoke-Dateien liegen unter <env-folder>/spokes/, in einem Unterordner (der Standard-Glob **/*.json braucht einen /):

environments/prod/spokes/
└── data_platform/
    ├── canvas_nonprod_data_platform_dev.json
    └── canvas_prod_data_platform_shrd.json

Regeln:

  • Verwende einen Unterordner pro Team oder workload.
  • Verwende einen eindeutigen Dateinamen über alle Unterordner hinweg. Der Dateiname (ohne .json) wird in Job- und Artefaktnamen verwendet.
  • Verwende ein Muster wie canvas_<workload>_<environment>.json, damit spokeGlob leicht zu schreiben ist.
  • Wenn du die separate spoke-canvas-pipeline betreibst, erwartet sie außerdem, dass der Name mit canvas_ beginnt, auf .json endet und _prod_ oder _nonprod_ enthält.
  • Die Identität des Spokes ist sein state key spoke_<workloadShortName>_<environment>.tfstate, nicht sein Dateiname. Die Datei umzubenennen oder zu verschieben ist unbedenklich; eine Änderung von workloadShortName oder environment erzeugt einen neuen Spoke.

JSON-Inhalt

Schema: src/Xebia.Mcp/Files/json/spokeschema.json (draft-07). Blöcke der obersten Ebene:

Block Enthält
workloadShortName, environment Identität des Spokes (max. 6 Zeichen; nach der Erstellung nie ändern)
azureSubscriptionId, azureSubscriptionName, managementGroupId Welche bestehende subscription, ihr Name und wo sie platziert wird
tags Pflicht: owner, department, workload, pii, costcentre, environment
adInfo Team-Gruppen (ProductTeamGroupNames) und PIM-Verhalten (PIMGroupConfig)
targetRegions primary und additional Regionen
resourceconfiguration.network[] VNets, Subnetze, NSGs, Route Tables, Hub-Anbindung
resourceconfiguration.{storageaccount, keyvault, loganalytics, networkwatcher, privatedns} Optionale Ressourcen (Storage, Key Vault und Log Analytics sind standardmäßig aktiv)
azdo Optionales Azure DevOps-Repo und Service Connection (Spoke-Integrationen)
extensions Optionale Nutzung von shared APIM, ACR, Service Bus, Event Hub und der GitHub-Repository-Extension (Spoke-Integrationen)

Jedes Feld: Spoke-JSON-Referenz. Ein vollständiges minimales Beispiel: Neuer Spoke.

Spoke-weite Standardwerte (Präfixe für Gruppen- und SPN-Namen, Naming-Template für subscriptions, Administrative Unit, SPN-Secret-Rotation) kommen aus mcp.json → SpokeCommon.tenantinfo. Im separaten spoke-canvas-Deployment stehen sie in einer Datei common.tf, zusammen mit den Regionen, IPAM-Pools und PIM-Profilen. Alle sind in Gemeinsame Spoke-Einstellungen beschrieben.

Seite Inhalt
Spoke-JSON-Referenz Jedes Feld der spoke-Datei, einschließlich Adressraum aus einem IPAM-Pool
Gemeinsame Spoke-Einstellungen Einstellungen für alle spokes (common.tf und SpokeCommon)
RBAC und PIM für spokes Gruppen, PIM-Profile und die role map für Data-plane-Rollen von Key Vault und Storage
Spoke-Integrationen Azure-DevOps-Repository und service connection, GitHub-Repository und Federated Credentials

Pipelines, Identitäten und Integrationen für spokes vorbereiten: Die spoke-pipeline vorbereiten und Spoke-Integrationen vorbereiten.

So änderst du einen Spoke oder fügst einen hinzu

flowchart LR
    r["Request<br/>(consumer)"] --> b[Branch] --> e["Add / edit<br/>spoke JSON"] --> pr["PR + review"]
    pr --> ci["CI: spoke run in Plan<br/>spokeGlob = one file"] --> cd["CD: apply<br/>dev → tst → acc → prd"] --> m[Merge]
Ich möchte… Runbook
Einen Spoke hinzufügen Neuer Spoke
Einen Spoke ändern (Subnetze, NSG-Regeln, Zugriff, Tags, Regionen, …) Spoke ändern
Einen Spoke entfernen Spoke löschen

Führe spoke immer mit spokeGlob auf eine Datei aus. Ein breiter Glob plant jeden Spoke, und jeder Spoke, dessen environment nicht in der environments-Liste der pipeline steht (zum Beispiel shared/shrd), lässt den Lauf fehlschlagen.

Spoke-pipeline im Referenz-Repository

spoke.yaml in xms-cloud-platform-config verwendet whatIf: true: der spoke canvas wird nur geplant. Setze whatIf: false (oder stelle es als Parameter bereit), wenn du apply ausführen willst. Siehe Pipelines.