AKS-platform: AKS op Azure Local¶
Deze pagina beschrijft de tweede variant van de oplossing: AKS op Azure Local (ook AKS Arc genoemd). Het Kubernetes-cluster draait op Azure Local-hardware in een datacenter en wordt beheerd via Azure Arc. Het managementvlak zit in Azure, het runtimevlak is on-premises.
Minder compleet dan de Azure-variant
De bronnen documenteren het ontwerp, het bootstrapscript en de pipelines voor deze variant. In de vastgelegde configuratiebestanden
staat elke layer-switch (deploy_identity, deploy_cluster_baseline, deploy_arc_networking, deploy_argocd,
deploy_azure_policy_extension, deploy_security_policy, deploy_key_vault) op false. Deze documentatie kan niet zeggen
welke layers in een live omgeving actief zijn. Vraag het je platformteam.
Verschillen met de Azure-variant¶
| Aspect | AKS in Azure | AKS op Azure Local |
|---|---|---|
| Managementvlak | Azure | Azure en Azure Arc |
| Runtimevlak | Azure | Azure Local, on-premises |
| Clusterresource | Terraform (azurerm_kubernetes_cluster) |
Azure CLI (az aksarc create) in een bootstrapstap |
| Netwerk | VNet, subnets, NSG | Een logical network dat al bestaat. Terraform geeft alleen de ID door |
| Control plane | Beheerd door Azure | Draait op Azure Local-hardware |
| Load balancing | Azure load balancer | MetalLB, ingeschakeld door de Arc Networking-extensie en geconfigureerd met az k8s-runtime |
| GitOps | Argo CD uit de GitOps-repository | Argo CD als Arc-extensie (microsoft.argocd) |
| Policy | Azure Policy-add-on | Azure Policy-extensie voor Arc (microsoft.policyinsights) |
| Workload identity | Ingebouwd in AKS | Ingeschakeld bij het aanmaken van het cluster (--enable-oidc-issuer --enable-workload-identity) |
| Identiteit en secrets | Entra ID, managed identities, Key Vault | Dezelfde gedeelde modules |
| Defender for Containers | Optioneel | Niet ondersteund op Azure Local |
| Door AKS beheerde add-ons | Beschikbaar | Niet beschikbaar, in plaats daarvan worden Arc-extensies gebruikt |
| Pipeline | GitHub Actions | Azure DevOps (agent van de klant) of GitHub Actions |
Wat wel en niet door Terraform wordt beheerd¶
| Niet beheerd door Terraform | Reden |
|---|---|
| Het Azure Local-cluster | Fysieke infrastructuur met een eigen lifecycle |
| Arc Resource Bridge, custom location, logical network | Prerequisites, moeten bestaan en gezond zijn (Vereisten) |
| VNets, subnets, NSG's, firewall, NAT gateway | Niet van toepassing, fysiek of software-defined netwerk |
| API server VNet integration | Niet van toepassing, de control plane staat on-premises |
| AKS-cluster, OIDC issuer, workload identity | Aangemaakt door de bootstrap |
| MetalLB load balancer en BGP-peers | Aangemaakt door de bootstrap met az k8s-runtime |
| Beheerd door Terraform | Resource |
|---|---|
| Arc-extensies: Argo CD, Azure Policy, Arc Networking | azurerm_arc_kubernetes_cluster_extension |
| Entra ID-groepen, break-glass-groep | azuread_group (gedeelde module) |
| Managed identities en federated credentials | azurerm_user_assigned_identity, azurerm_federated_identity_credential |
| Azure role assignments | azurerm_role_assignment |
| Key Vault | azurerm_key_vault, zonder private endpoint in deze variant |
| Azure Policy assignment (pod security baseline) | azurerm_resource_group_policy_assignment |
| Resource groups | rg-<env>-identity-arc, rg-<env>-secrets-arc, rg-<env>-security-arc |
Deploymentvolgorde¶
flowchart TB
pre["Prerequisites:<br/>Azure Local, Arc Resource Bridge,<br/>custom location, logical network,<br/>firewall path to the control plane"] --> boot
boot["Phase 1: bootstrap<br/>(PowerShell and Azure CLI)"] --> tf
tf["Phase 2: Terraform<br/>(extensions, identity, policy, Key Vault)"] --> gitops
gitops["Argo CD applies the GitOps repositories"]
Fase 1: bootstrap¶
Het bootstrapscript valideert zijn inputs, zorgt dat de Azure CLI-extensies aksarc en k8s-runtime aanwezig zijn,
registreert de resource providers die het nodig heeft, en doet dan het volgende:
- maakt de resource group aan, als die niet bestaat;
- maakt het AKS Arc-cluster aan met de custom location, het logical network, de Entra ID-admingroep, het genereren van een SSH-sleutel en de OIDC issuer en workload identity ingeschakeld. Bestaat het cluster al, dan slaat het het aanmaken over;
- controleert dat de OIDC issuer is ingeschakeld en leest de URL ervan;
- schakelt de Arc Networking-runtime voor MetalLB in (met een terugval die de extensie
microsoft.arcnetworkinginstalleert); - maakt de MetalLB load balancer aan met het IP-bereik en de advertise-modus (
ARP,BGPofBoth); - maakt een BGP-peer aan als de modus er een nodig heeft (peernaam, beide AS-nummers en het peeradres zijn dan verplicht);
- schrijft de cluster-ID en de URL van de OIDC issuer naar een outputbestand.
Resource providers die worden geregistreerd of gecontroleerd: Microsoft.Kubernetes, Microsoft.KubernetesConfiguration,
Microsoft.ExtendedLocation, Microsoft.AzureStackHCI, Microsoft.KubernetesRuntime. Het ontwerpdocument noemt ook
Microsoft.HybridConnectivity en Microsoft.ResourceConnector.
Fase 2: Terraform¶
Terraform heeft twee waarden uit de bootstrap nodig, cluster_id en oidc_issuer_url. De pipeline schrijft ze tijdens de run naar
config/ci.auto.tfvars, uit de bootstrapoutput als beide in dezelfde run draaiden, en anders uit pipeline- of
omgevingsvariabelen. Daarna worden de layers met de switches ingeschakeld, in deze volgorde:
| Stap | Switch | Resultaat |
|---|---|---|
| 1 | deploy_cluster_baseline |
Container voor de extensies |
| 2 | deploy_argocd |
Argo CD-extensie, release train standaard Stable |
| 3 | deploy_azure_policy_extension |
Azure Policy voor Arc |
| 4 | deploy_arc_networking |
Arc Networking-extensie voor MetalLB |
| 5 | deploy_identity |
Groepen, identities, federated credentials |
| 6 | deploy_security_policy |
Pod security baseline-initiative op de resource group van het cluster, effect Audit |
| 7 | deploy_key_vault |
Key Vault |
Terraform installeert alleen de Argo CD-extensie. Applicaties, application sets en projecten komen uit de GitOps-repositories.
De verwachte GitOps-indeling is één map per cluster en omgeving (clusters/azure-local/nonprod, .../prod) in zowel
de platformrepository als de applicatierepository.
Arc Networking en een service principal
De Arc Networking-extensie kan de object-ID van een first-party service principal van Microsoft nodig hebben
(arc_networking_fpa_object_id). De bootstrap probeert die in zijn terugvalpad op te lossen en stopt met een melding als dat
niet lukt. Heeft je account geen leesrechten op de directory, geef de ID dan op in de configuratie.
Niet beschikbaar of onduidelijk¶
- Toegang tot Key Vault vanuit het cluster. De gedeelde Key Vault-module schakelt public network access uit, en de Azure Local-variant maakt geen private endpoint aan. Een cluster on-premises kan de vault dan niet bereiken, tenzij het netwerkontwerp een privépad toevoegt. De bronnen beschrijven er geen.
- Kubernetes policy en RBAC vanuit GitOps worden voor de Azure-variant beschreven. De Azure Local-pagina's noemen alleen de ArgoCD-extensie en de GitOps-mapindeling.
- Grootte van node pools, upgrades en onderhoudsvensters van het Azure Local-cluster worden niet door deze oplossing ingesteld. Het
bootstrapscript maakt het cluster aan met de standaardgroottes van
az aksarc create. - Monitoring en back-up voor Azure Local worden niet beschreven.