AKS-platform: architectuur¶
Deze pagina beschrijft het ontwerp op hoofdlijnen: de layers, de omgevingen, de resource groups en hoe de Azure- en Azure Local-variant één structuur delen.
Referentieontwerp
Dit is de indeling van de referentieconfiguratie. Jouw platform kan andere namen, CIDR-ranges, groottes of switches gebruiken.
Layers¶
De oplossing is in layers opgebouwd. Elke layer is een Terraform module met een deploy_*-switch (de networking layer wordt altijd
geëvalueerd). Een layer gebruikt de outputs van de layers eronder, dus de volgorde telt bij een eerste deployment.
flowchart TB
subgraph tf["Terraform (per platform and environment)"]
net["Networking<br/>spoke, subnets, DNS, network profile"]
idn["Identity<br/>Entra ID groups, managed identities,<br/>workload and CI/CD identities"]
sec["Security policy<br/>Azure Policy, Defender, diagnostics, alerts"]
cls["Cluster baseline<br/>AKS, node pools, maintenance, add-ons"]
kv["Secrets<br/>Key Vault, private endpoint"]
end
subgraph gitops["GitOps repositories (Argo CD)"]
ns["Namespaces, priority classes, RBAC"]
pol["Kyverno policies, network policies, quotas"]
svc["Platform services:<br/>ingress gateway, monitoring, certificates"]
app["Applications"]
end
net --> cls
idn --> cls
net --> kv
net --> sec
cls --> gitops
ns --> app
pol --> app
svc --> app
| Layer | Terraform module (Azure) | Wat het aanmaakt | Switch |
|---|---|---|---|
| Networking | modules/azure/networking |
Resource group, VNet, vier subnets, NSG, route table, Private DNS-zone, publiek ingress-IP (standalone); of data lookups van een bestaande spoke (hub-integrated). Berekent ook het AKS network profile. | network_mode |
| Identity | modules/azure/identity |
Resource group, Entra ID-groepen, break-glass-groep, kubelet managed identity, workloadidentiteiten, CI/CD-identiteiten met federated credentials, optionele roltoewijzingen | deploy_identity |
| Security policy | modules/azure/security-policy |
Azure Policy-toewijzingen, Defender for Cloud-plannen, diagnostic settings, securityalerts, interval van de image cleaner | deploy_security_policy |
| Cluster baseline | modules/azure/cluster-baseline |
Resource group, AKS-cluster, user node pools, roltoewijzingen van de clusteridentiteiten, optionele diagnostic settings | deploy_cluster_baseline |
| Secrets | modules/azure/secrets |
Resource group, Key Vault, private endpoint, optionele diagnostic settings | deploy_key_vault |
De Azure Local-variant heeft per layer een bijpassende module onder modules/azure-local/, met een kleinere scope
(AKS op Azure Local). Gedeelde bouwstenen (Entra ID-groepen, break-glass, identiteiten, roltoewijzingen,
Key Vault) staan in modules/identity/ en modules/secrets/ en worden door beide varianten hergebruikt.
Omgevingen en clusters¶
Het ontwerp draait twee clusters. Productieworkloads draaien alleen op het productiecluster. Development, test en acceptatie draaien samen op het niet-productiecluster, gescheiden door namespaces.
flowchart LR
subgraph prod["Production cluster (aks-prod)"]
pns["Namespaces per team:<br/>team-a-prod"]
end
subgraph nonprod["Non-production cluster (aks-nonprod)"]
dns["team-a-dev"]
tns["team-a-test"]
ans["team-a-accp"]
end
pvnet["Production spoke"] --- prod
nvnet["Non-production spoke"] --- nonprod
| Omgevingswaarde | Platform | Netwerkmodus | Clusternaam in de referentieconfiguratie |
|---|---|---|---|
prod |
azure |
standalone | aks-prod |
nonprod |
azure |
standalone | aks-nonprod |
nonprod-integrated |
azure |
hub-integrated | aks-nonprod-integrated |
prod-integrated |
azure |
hub-integrated | De selector bestaat in de pipeline; geen configuratiebestand in de bronnen |
nonprod, prod |
azure-local |
Azure Local logical network | Ingesteld door de pipelinevariabelen van de omgeving |
De redenen voor twee clusters: blast radius, een onafhankelijke upgradecyclus (eerst niet-productie), andere toegangsregels (ontwikkelaars krijgen buiten productie bredere toegang), kosten en netwerkscheiding. De spokes zijn niet met elkaar gepeerd.
Elk platform en elke omgeving heeft een eigen configuratiebestand (config/<environment>.tfvars), een eigen backendbestand
(config/backend-<environment>.hcl) en dus een eigen Terraform state.
Resource groups¶
| Resource group (Azure) | Inhoud |
|---|---|
rg-<env>-network |
Spoke VNet, subnets, route table, Private DNS-zone, publiek ingress-IP (alleen standalone) |
rg-<env>-identity |
Managed identities (kubelet, workload, CI/CD) |
rg-<env>-aks |
Het AKS-cluster en de user node pools |
rg-<env>-aks-nodes |
Door AKS beheerde node resource group |
rg-<env>-secrets |
Key Vault en de private endpoint |
rg-<env>-security |
Securityalerts, indien ingeschakeld |
Op Azure Local krijgen de groepen voor identity, secrets en security een -arc-suffix (rg-<env>-identity-arc enzovoort). De
resource group van het cluster wordt door de bootstrap aangemaakt en staat in de pipelinevariabelen.
Policyscope
In de Azure-variant krijgt de security policy layer het ID van de network resource group als scope van zijn
Azure Policy-toewijzingen (module.networking.spoke_resource_group_id), terwijl het cluster in rg-<env>-aks staat. Azure
Policy voor Kubernetes geldt voor clusters binnen de toegewezen scope. Bevestig bij het platformteam welke scope in jouw
deployment effectief is.
Naamgeving en tags¶
Resourcenamen volgen <type>-<purpose>-<env>: vnet-<env>, snet-aks-nodes-<env>, mi-kubelet-<env>, mi-cicd-<name>,
fc-github-<name>, kv-<name>. De modules voegen een layer-tag toe. De omgevingsroot voegt environment, managed_by
(terraform) en platform (azure of azure-local) toe, naast de tags project en owner uit de configuratie.
Zie ook Naamgeving en tags voor de platformbrede conventies.
Relatie met de MCP hub en spokes¶
| Modus | Relatie |
|---|---|
| Standalone | De oplossing heeft de hub niet nodig. Ze maakt een eigen spoke aan en peering staat in de code maar is uitgeschakeld. |
| Hub-integrated | De oplossing gebruikt een spoke uit de landing zone, Private DNS-zones van de hub en het egresspad van de hub. De hub moet de vereisten uit Netwerk leveren. Zie de Architectuurreferentie voor het hub-and-spokemodel. |