Ga naar inhoud

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:

  1. maakt de resource group aan, als die niet bestaat;
  2. 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;
  3. controleert dat de OIDC issuer is ingeschakeld en leest de URL ervan;
  4. schakelt de Arc Networking-runtime voor MetalLB in (met een terugval die de extensie microsoft.arcnetworking installeert);
  5. maakt de MetalLB load balancer aan met het IP-bereik en de advertise-modus (ARP, BGP of Both);
  6. maakt een BGP-peer aan als de modus er een nodig heeft (peernaam, beide AS-nummers en het peeradres zijn dan verplicht);
  7. 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.