AKS-platform: beslissingen¶
Deze pagina vat de ontwerpbeslissingen van de oplossing samen. Elke rij geeft de beslissing, de reden en waar hij terugkomt. De bronnen leggen de meeste ervan vast als tijdens het ontwerp bevestigd. Waar de code afwijkt van de beslissing, staat dat in de laatste kolom.
Cluster en netwerk¶
| # | Beslissing | Reden | Status in de code |
|---|---|---|---|
| 1 | Twee clusters: productie, en één niet-productiecluster met een namespace per omgeving | Blast radius, onafhankelijke upgrades, andere toegangsregels, compliance, netwerkscheiding | Geïmplementeerd |
| 2 | Twee spokes, geen peering ertussen | Sterke netwerkisolatie | Geïmplementeerd. Er bestaat een derde, hub-integrated cluster voor niet-productie |
| 3 | Azure CNI in overlay-modus | Voorkomt IP-uitputting op het node-subnet, eenvoudige subnetplanning, podranges mogen tussen clusters overlappen | Geïmplementeerd |
| 4 | Calico als network policy engine | Volwassen, brede policy-ondersteuning. Het hoofdstuk over de cluster baseline noemt nog Azure Network Policy | Calico in de code |
| 5 | Private API server met VNet-integratie | Geen publiek endpoint, geen lijst met geautoriseerde IP's nodig | Geïmplementeerd |
| 6 | Lokale accounts uitgeschakeld, Entra ID met Azure RBAC | Eén identiteitsbron, MFA, geen gedeelde admin-credential | Geïmplementeerd |
| 7 | Egress geforceerd via Azure Firewall met een NAT gateway op het firewall-subnet | Inspectie, logging en schaalbare SNAT | Niet uitgerold door de Azure-root. Standalone gebruikt de load balancer. Hub-integrated gebruikt user-defined routing |
| 8 | Gateway API voor ingress, het platform beheert de gateway, teams beheren routes | Geen lock-in aan één controller | Manifests in de GitOps-repository |
| 9 | Private endpoints voor alle PaaS, centraal beheerd door het platformteam | Consistente governance | Alleen Key Vault |
| 10 | Geen web application firewall in de eerste deployment | De eerste deployment eenvoudig houden | Niet aanwezig |
| 11 | Alleen regio westeurope, dus geen regio in resourcenamen |
Eén regio | Geïmplementeerd |
| 12 | Hub-integrated modus als tweede netwerkmodus met hetzelfde outputcontract | De landing zone hergebruiken zonder de layers erboven te wijzigen | Geïmplementeerd. Het ontwerpdocument zegt nog "implementation pending" |
Clusterbeheer¶
| # | Beslissing | Reden | Status in de code |
|---|---|---|---|
| 13 | Dezelfde Kubernetes minor versie in de stabiele toestand, niet-productie eerst | Valideren vóór productie | Proces |
| 14 | Upgradekanaal productie none, niet-productie patch |
Bewuste productiewijzigingen, actuele niet-productie | Geïmplementeerd |
| 15 | System pool met CriticalAddonsOnly, user pool general |
Platform en workloads scheiden | Geïmplementeerd |
| 16 | Productie over drie zones, niet-productie kleiner | Beschikbaarheid versus kosten | Niet-productie is in de code kleiner dan in het ontwerp |
| 17 | Azure Monitor, image cleaner, managed Prometheus en diagnostics standaard uit | Kosten. Diagnostics verplicht vóór go-live in productie | Uit in de referentiebestanden |
| 18 | Defender for Containers uitgeschakeld | Aanvankelijk niet ingeschakeld | Switch bestaat, staat uit |
| 19 | Het cluster is wegwerpbaar: herbouwen met Terraform en herstellen met GitOps | Eenvoud | Back-up van persistent volumes wordt niet gedekt |
| 20 | Eén Terraform-root en state per platform en omgeving, één configuratiebestand per omgeving | Geïsoleerde blast radius, eenvoudige deployment | Geïmplementeerd |
Identiteit en secrets¶
| # | Beslissing | Reden | Status in de code |
|---|---|---|---|
| 21 | Kubernetes-native RBAC uitgerold door GitOps, Azure RBAC voor Azure-resources | GitOps-compatibel, gereviewd via pull request | Geïmplementeerd, Azure RBAC voor Kubernetes staat ook aan |
| 22 | Groepsnaamgeving grp-aks-<scope>-<role>[-<team>][-<env>] |
Voorspelbaar | Geïmplementeerd |
| 23 | Ontwikkelaars in productie alleen lezen, acceptatie beperkt | Least privilege | In de toegangsmatrix |
| 24 | Eén workload identity per applicatie en omgeving | Geen gedeelde rechten | Geïmplementeerd |
| 25 | GitHub Actions met federated identity voor CI/CD, aparte identiteiten per taak | Geen secrets, functiescheiding | Geïmplementeerd |
| 26 | Break-glass via PIM, tijdelijk, gemonitord | Noodtoegang met een spoor | PIM wordt handmatig geconfigureerd |
| 27 | Groepen en roltoewijzingen beheerd door het platformteam in Terraform | Eén eigenaar | Geïmplementeerd |
| 28 | Key Vault met RBAC, alleen private endpoint, purge protection. Applicaties lezen hem met de SDK, geen CSI driver | Scoping per applicatie, geen secrets in etcd | De CSI add-on staat in de referentiebestanden aan |
| 29 | Certificaten in Key Vault, met Key Vault-rotatie, in plaats van cert-manager | Geen extra controller | Niet geverifieerd, cert-manager wordt in het ontwerp ook als platformnamespace genoemd |
Security policy¶
| # | Beslissing | Reden | Status in de code |
|---|---|---|---|
| 30 | Ingebouwde Azure Policy-initiatives vanaf dag één, Kyverno als het zover is | Baseline zonder nieuwe controller, daarna rijkere regels | Azure Policy-toewijzingen op Audit en Deny zoals vermeld in Security policy |
| 31 | Kyverno boven OPA Gatekeeper | YAML, mutatie en generatie in één tool, policy reports | Policies bestaan, allemaal op Audit in de manifests |
| 32 | Policylevenscyclus: audit, daarna afdwingen in niet-productie na 7 dagen, daarna productie na 14 dagen | Geen verrassingen in productie | Proces |
| 33 | Default-deny network policy in elke applicatienamespace | Laterale beweging | Manifests in de GitOps-repository |
| 34 | Policy-uitzonderingen met een tijdslimiet, maximaal 90 dagen, met goedkeuring van security | Geen permanente gaten | Proces |
| 35 | Manifests in het cluster gaan als Helm charts met een configureerbaar labeldomein naar een GitOps-repository | Labels per klant, omgevingsverschillen als waarden | De kopieën in de Terraform-repository zijn deprecated |
Azure Local¶
| # | Beslissing | Reden | Status in de code |
|---|---|---|---|
| 36 | Het cluster aanmaken met de Azure CLI, niet met Terraform | Het aanmaken van het cluster met OIDC en workload identity, en MetalLB, vragen de Azure CLI-flow | Geïmplementeerd in het bootstrapscript |
| 37 | Arc-extensies in plaats van AKS add-ons: Argo CD, Azure Policy, Arc Networking | Add-ons bestaan niet op Azure Local | Geïmplementeerd |
| 38 | MetalLB met ARP, BGP of Both |
Load balancing on premises | Geïmplementeerd |
| 39 | De gedeelde identity- en Key Vault-modules hergebruiken | Hetzelfde model op beide varianten | Geïmplementeerd |