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, damitspokeGlobleicht zu schreiben ist. - Wenn du die separate spoke-canvas-pipeline betreibst, erwartet sie außerdem, dass der Name mit
canvas_beginnt, auf.jsonendet 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 vonworkloadShortNameoderenvironmenterzeugt 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.
Zugehörige Referenzseiten¶
| 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.