AKS-platform: cluster baseline¶
De cluster baseline is de standaardconfiguratie van elk AKS-cluster van de oplossing. Het is de Terraform layer
cluster-baseline (modules aks-cluster, node-pools, cluster-identities, diagnostic-settings). Deze pagina somt de
instellingen op die ertoe doen en de waarden van de referentieconfiguratie.
Referentieontwerp, jouw deployment kan afwijken
De onderstaande waarden zijn gelezen uit de Terraform modules en de configuratiebestanden nonprod en prod van de Azure-
variant. Het ontwerpdocument beschrijft een paar andere waarden; de verschillen worden genoemd waar ze ertoe doen.
Vastgelegd in de module¶
Deze instellingen staan in de module en kunnen niet met een variabele worden uitgezet.
| Instelling | Waarde | Waarom |
|---|---|---|
| Entra ID-integratie | Aan, met Azure RBAC voor Kubernetes-autorisatie | Mensen melden zich aan met Entra ID. |
| Lokale accounts | Uitgeschakeld | Geen gedeelde admin-credential (local_account_disabled = true). |
| Toegang tot de API server | VNet-integratie in een eigen subnet | De API server heeft een privéadres in de spoke, geen publiek endpoint. |
| OIDC issuer en workload identity | Ingeschakeld | Pods krijgen Azure-toegang zonder opgeslagen secrets (Identiteit en toegang). |
| Azure Policy add-on | Ingeschakeld | Azure Policy voor Kubernetes (Security policy). |
| System node pool | Naam system, autoscaling, managed OS-disk, alleen kritieke add-ons, label node-pool=system |
Houdt applicatiepods van de systeemnodes af. |
| Clusteridentiteit | Eén user-assigned managed identity, gebruikt voor zowel het control plane als de kubelet | Zie Clusteridentiteiten. |
| Netwerkplugin | Azure CNI in overlay-modus met de Calico network policy engine | Zie Netwerk. |
Omgevingswaarden¶
| Instelling | Productie | Niet-productie |
|---|---|---|
| Clusternaam | aks-prod |
aks-nonprod |
| Kubernetes-versie | Minor versie vastgepind in de configuratie (1.34 in de referentiebestanden) | Hetzelfde |
| SKU-tier | Standard (met SLA) |
Free |
| Upgradekanaal | none (handmatig) |
patch |
| VM-grootte system pool | Standard_D4s_v5 |
Standard_D2s_v5 |
| Nodes system pool (min tot max) | 3 tot 5 | 1 tot 2 |
| Zones system pool | 1, 2, 3 | 1 |
| Max pods per node system pool | 30 | 100 |
VM-grootte user pool general |
Standard_D4s_v5 |
Standard_D4s_v5 |
Nodes user pool general (min tot max) |
3 tot 20 | 1 tot 5 |
Zones user pool general |
1, 2, 3 | 1 |
Max pods per node user pool general |
30 | 100 |
| Label user pool | workload-type=general |
workload-type=general |
| OS-disk | 128 GB, managed | 128 GB, managed |
| Surge tijdens upgrades (user pool) | 33% | 33% |
| Resource group | rg-prod-aks (nodes in rg-prod-aks-nodes) |
rg-nonprod-aks (nodes in rg-nonprod-aks-nodes) |
Ontwerpdocument versus code
Het ontwerpdocument beschrijft niet-productie als 2 tot 3 systeemnodes en 2 tot 10 usernodes over zones 1 en 2, met
30 pods per node. Het configuratiebestand nonprod stelt de kleinere waarden hierboven in, om kosten te besparen. Het hub-integrated
niet-productiebestand gebruikt dezelfde groottes als nonprod.
User node pools zijn een map in de configuratie. Een pool toevoegen (bijvoorbeeld een dedicated ingress-, platform-, spot- of GPU-pool) is een configuratiewijziging: naam, VM-grootte, min en max aantal, zones, disk size, max pods, labels, taints en surge. De pool- module schakelt autoscaling in op elke pool.
Upgrades en onderhoudsvensters¶
| Productie | Niet-productie | |
|---|---|---|
| Kubernetes-versie-upgrades | Handmatig, in het venster, nadat niet-productie is gevalideerd | Het patch-kanaal past patchversies automatisch toe; minor upgrades blijven handmatig |
| Auto-upgradevenster | Zaterdag 03:00, 4 uur, UTC+1 | Dinsdag 20:00, 4 uur, UTC+1 |
| Venster voor node-OS | Zaterdag 03:00, 4 uur, UTC+1 | Dinsdag 20:00, 4 uur, UTC+1 |
Beide vensters zijn wekelijks. De offset staat vast, dus het venster schuift een uur ten opzichte van de lokale tijd als de zomertijd begint of eindigt. Pas de offset in de configuratie aan als dat uitmaakt.
Het ontwerpdocument noemt het node image-venster voor productie zondag en voor niet-productie woensdag. De configuratiebestanden stellen het in op dezelfde dag als het Kubernetes-upgradevenster.
Regels uit het ontwerp:
- niet-productie wordt als eerste geüpgraded en productie volgt na een validatieperiode, zodat beide clusters in de stabiele toestand dezelfde minor versie draaien;
- een minor versie kan op AKS niet worden teruggedraaid. Het redmiddel na een mislukte upgrade is een forward fix of een rollback op workloadniveau;
- controleer vóór een minor upgrade op verwijderde Kubernetes-API's (het ontwerp noemt
kubentenpluto); - Terraform houdt de versie bij, dus een handmatige versiewijziging buiten Terraform verschijnt als drift.
Add-ons en opties¶
| Optie | Referentieconfiguratie | Opmerkingen |
|---|---|---|
| Azure Policy add-on | Aan | Vastgelegd in de module. |
| Key Vault Secrets Provider (CSI driver) | Aan in nonprod, prod en nonprod-integrated, met secret rotation elke 2 minuten |
Het ontwerpdocument zegt dat de CSI driver niet wordt gebruikt en dat applicaties Key Vault met de SDK lezen. De codeswitch staat in de referentiebestanden aan. |
| Azure Monitor (Container Insights) | Uit | Heeft een Log Analytics workspace-ID nodig. |
| Image cleaner | Uit | Draait, als hij aan staat, elke 168 uur (7 dagen). |
| Managed Prometheus | Niet in de code | Het ontwerp zegt dit later te evalueren. |
| AKS diagnostic settings | Uit (deploy_aks_diagnostics = false) |
Het productiebestand somt de categorieën op die vóór go-live moeten worden ingeschakeld: kube-apiserver, kube-audit-admin, kube-controller-manager, guard, cloud-controller-manager. Heeft een Log Analytics workspace nodig. |
| Defender for Containers | Uit | Zie Security policy. |
Het ontwerp zegt dat diagnostic settings verplicht zijn vóór go-live in productie, met een retentie van 90 dagen (productie) en 30 dagen (niet-productie) in Log Analytics. Retentie is een eigenschap van de workspace en wordt niet door deze oplossing ingesteld.
Clusteridentiteiten¶
De identity layer maakt per cluster één user-assigned managed identity aan (mi-kubelet-<env>). De cluster baseline gebruikt die
als control plane-identiteit en als kubelet-identiteit. De module cluster-identities geeft hem deze Azure-rollen:
| Rol | Scope | Doel |
|---|---|---|
| Network Contributor | Node-subnet | Nodes aan het subnet koppelen |
| Network Contributor | API server-subnet | VNet-integratie van de API server |
| Private DNS Zone Contributor | Elke private DNS-zone in aks_private_dns_zone_ids |
Private DNS-records beheren (geen ingesteld in de referentiebestanden) |
| Managed Identity Operator | De identiteit zelf | De kubelet-identiteit aan de node scale sets toewijzen |
| AcrPull | Elke registry in aks_acr_ids |
Images ophalen zonder pull secrets (geen ingesteld in de bestanden voor productie en nonprod) |
De omgevingsroot wijst ook Network Contributor op het spoke-VNet toe aan dezelfde identiteit.
Ontwerpdocument versus code
Het IAM-ontwerpdocument beschrijft een system-assigned control plane-identiteit en een aparte user-assigned kubelet-identiteit. De code gebruikt één user-assigned identiteit voor beide. Beschouw de code als leidend.
Bootstrap voor GitOps¶
De cluster baseline geeft GitOps een bereikbaar, geauthenticeerd cluster met workload identity en een network policy engine. Hij rolt geen namespaces, RBAC of platformservices uit. Het ontwerp noemt deze als GitOps-bootstrapresources:
| Resource | Doel |
|---|---|
Namespaces platform-system, gateway-system, monitoring, policy-system |
Thuis van platformcomponenten |
Priority class platform-critical (waarde 1000000) |
Kernplatformpods die niet mogen worden geëvicteerd |
Priority class platform-high (waarde 900000) |
GitOps-controller, ingress gateway, certificaatbeheer |
Priority class workload-default (waarde 100000) |
Standaard voor applicatiepods, wordt als eerste gepreempt |
| Cluster role bindings voor de platformgroepen | Platform admin, operator, auditor, break-glass |
Herstelmodel¶
Het ontwerp behandelt een cluster als wegwerpbaar en herbouwbaar: een vernietigd cluster wordt met Terraform herbouwd (het ontwerp verwacht 30 tot 60 minuten) en GitOps herstelt daarna platformservices, RBAC, policies en applicaties. Data op persistent volumes wordt niet gedekt. Plan Azure Backup voor AKS of Velero per workload.
Het ontwerp noemt ook resource locks (CanNotDelete op de productie-resource group en op het state storage account) en
state storage met versioning en soft delete. De Terraform-code van de oplossing maakt geen locks aan. Bevestig bij het
platformteam hoe deze in jouw omgeving zijn ingesteld.