Ga naar inhoud

Spoke extensions: gedeelde services configureren

Een spoke extension koppelt een spoke aan een gedeelde service, zoals een gedeelde API Management-instance of container registry, op het moment dat de spoke wordt gedeployed. De spoke-deployment geeft de juiste identiteiten toegang en richt in wat het workload team nodig heeft, zodat het team de gedeelde service direct kan gebruiken nadat de spoke is opgeleverd. Niemand hoeft op een aparte wijziging te wachten.

Deze pagina is voor het platformteam: hoe je de gedeelde services configureert, wat elke extensie aanmaakt en hoe je een nieuwe extensie toevoegt. Voor het perspectief van het workload team, zie Shared services.

Herkomst van deze pagina

Spoke extensions zijn geïntroduceerd in spoke canvas 2.9.0 (Geschiedenis). De gedeelde services staan in een eigen spoke, die met dezelfde spoke canvas wordt gedeployed en met de hub is verbonden. Verkeer ernaartoe loopt via de hub-firewall. Bekijk de Bekende problemen voordat je een extensie inschakelt: het spoke-schema accepteert niet elk veld dat de Terraform leest.

Hoe het werkt

flowchart LR
    spoke["Workload spoke<br/>(spoke JSON: extensions.*.enabled)"] -->|"spoke deployment"| ext["Extension code<br/>(pinned to a version tag)"]
    ext -->|"role assignments, groups,<br/>managed identities"| shared["Shared services spoke<br/>APIM, ACR, Service Bus, Event Hub"]
    team["Workload team"] -->|"uses the service"| shared

Twee dingen sturen het gedrag:

  1. Generieke configuratie, eenmaal per platform: waar de gedeelde services staan.
  2. Spoke-specifieke configuratie, per spoke: welke extensies aan staan.

1. Generieke configuratie

In het huidige platform staan de gedeelde services in SpokeCommon.shared_services van mcp.json (Configuratienaslag). In de oudere stand-alone spoke canvas stond hetzelfde blok in common.tf (Upgradehandleidingen). Het blok bevat de subscription van de gedeelde services en, per regio, de resource-ID's:

shared_services = {
  subscription_id = null                       # string, subscription of the shared services
  weu = {                                      # one block per region
    eventhub_resourceid        = null          # resource ID of the Event Hub namespace
    apim_resourceid            = null          # resource ID of the API Management instance
    acr_resourceid             = null          # resource ID of the container registry
    acr_pull_group_object_id   = null          # object ID of the main AcrPull group (needed for the ACR extension)
    acr_push_group_object_id   = null          # object ID of the main AcrPush group (needed for the ACR extension)
    acr_administrative_unit_id = null          # optional, administrative unit for the spoke ACR sub-groups
                                               #   (default: tenantinfo.AdministrativeUnitId)
    servicebus_resourceid      = null          # resource ID of the Service Bus namespace
    acs_resourceid             = null          # resource ID of the Communication Services resource
  }
}

Vul alleen de services in die je draait. Gebruik de regiokey die jouw platform gebruikt (weu in het voorbeeld).

2. Spoke-specifieke configuratie

In de spoke-JSON wordt elke extensie aan- of uitgezet:

"extensions": {
  "apim":       { "enabled": false },
  "acr":        { "enabled": false },
  "servicebus": { "enabled": false },
  "eventhub":   { "enabled": false }
}

Om er een aan te zetten, zet je enabled op true in een pull request (Spoke wijzigen) en draai je de spoke-deployment (Spoke-deployment). De extensiecode draait als onderdeel van die deployment. Het veld wordt beschreven in de Spoke JSON-naslag.

Wat elke extensie aanmaakt

De rollen worden toegewezen aan de groepen van de spoke (Owners, Contributors, Readers) en aan de spoke deployment principal. Zie het identiteitsmodel.

Extensie Wat het inricht
API Management, centraal model (default) API Management Service Contributor voor de spoke deployment principal, de Owners-groep en de Contributors-groep. API Management Service Reader voor de Readers-groep.
API Management, decentraal model Een API Management Workspace per spoke. API Management Workspace Contributor op de workspace voor de spoke deployment principal, Owners en Contributors. API Management Workspace Reader voor Readers.
Azure Container Registry Geen roltoewijzingen op de registry per spoke. AcrPull en AcrPush worden eenmaal toegewezen, aan de hoofdgroepen van de gedeelde registry. Per spoke maakt de extensie twee Entra ID-subgroepen aan, <main AcrPull group name>-<spoke> en <main AcrPush group name>-<spoke>, genest in de hoofdgroepen en eigendom van de service principal van de spoke, en twee managed identities, <prefix>-acrpull-mi en <prefix>-acrpush-mi, die lid zijn van de bijbehorende subgroep.
Event Hub Een nieuwe event hub in de gedeelde namespace. User Access Administrator voor de spoke deployment principal. Azure Event Hub Data Owner en Owner voor Owners, Contributor voor Contributors, Reader voor Readers, allemaal op die event hub.
Service Bus Een groep voor Data Sender and Receiver access to Service Bus messaging entities met de rollen Azure Service Bus Data Sender en Azure Service Bus Data Receiver op de namespace. Leden: Owners en Contributors. Een groep voor Reader access to the Service Bus Namespace met Service Bus Namespace Reader. Leden: Readers en de sender/receiver-groep. De spoke deployment principal krijgt Service Bus Namespace Manager en User Access Administrator, die laatste beperkt tot het toewijzen van de twee datarollen aan groepen.
Communication Services Momenteel niet beschikbaar.

Opmerkingen:

  • ACR. De Owners-, Contributors- en Readers-groepen van de spoke krijgen via de extensie geen toegang tot de registry. Leden die iemand met de hand aan de subgroepen toevoegt, blijven behouden. Het verwijderen van images is bewust niet toegestaan, zodat teams elkaars images niet kunnen verwijderen, met opzet of per ongeluk.
  • Dedicated groepen. Om alle teamgroepen toegang te geven tot een centrale resource, zoals de Bastion host of een registry met de managed templates, gebruik je één dedicated groep in plaats van veel roltoewijzingen. Zie Dedicated group manager.

Integration Platform

Het Integration Platform bouwt bovenop deze extensie een Service Bus-automatisering per entiteit (Service Bus-automatisering). De bron beschrijft de Service Bus-rollen anders dan de tabel hierboven. Controleer de versie van de extensie die je draait voordat je op een van beide vertrouwt.

Een extensie inschakelen: checklist

  1. De gedeelde service bestaat en zijn resource-ID staat in het shared_services-blok van de regio.
  2. Voor ACR: de hoofdgroepen AcrPull en AcrPush bestaan en hun object-ID's zijn ingesteld.
  3. De spoke-JSON zet enabled op true voor de extensie. Draai de config tests (De tests lokaal draaien).
  4. Na de review draait de spoke-deployment. Lees het plan: je verwacht nieuwe roltoewijzingen en groepen, geen deletes.
  5. Controleer het resultaat in Azure (de roltoewijzingen en de groepen in de tabel hierboven) en informeer het workload team.

Een nieuwe extensie bijdragen

Een extensie is code die een spoke-deployment binnenhaalt. Zorg om er een toe te voegen dat:

  • de extensie in een Git-repository staat die de spoke-deployment kan lezen;
  • de repository versietags gebruikt, zodat een spoke-deployment een versie pint;
  • de gedeelde service die je uitbreidt beschikbaar is;
  • het waarom en hoe van de extensie is gedocumenteerd.

Voor een nieuwe gedeelde service beoordelen de functies architectuur, operations en security het verzoek eerst (Servicetypes).