Ga naar inhoud

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.