Azure AKS
Azure Kubernetes Service platform managed with Terraform (infrastructure) and Helm (workloads). Provisions an AKS cluster with PostgreSQL, Azure Container Registry, and Key Vault in West Europe.
Architecture Overview
Layer |
Tool |
Purpose |
|---|---|---|
Provider |
— |
Azure West Europe region |
Network |
Terraform |
VNet with dedicated subnets |
Resources |
Terraform |
AKS, PostgreSQL, ACR, Key Vault |
Namespace |
Helm |
Traefik ingress controller |
Deployment |
— |
Production instance |
Configuration
Validation rules, remote repository reference, and integration requirements for the platform.
apiVersion: strata.huybrechts.xyz/v1
kind: configuration
meta:
name: azure_aks_config
annotations:
description: Azure AKS platform — Terraform + Helm on Azure Kubernetes Service
labels:
version: "1.0.0"
tags: [azure, aks, configuration]
spec:
layering:
- name: environment
description: "Deployment environment (dev, staging, prd)"
required: true
deployment:
additional_properties: false
properties:
environment:
pattern: "^(dev|staging|prd)$"
required: true
description: "Target environment"
zones:
- name: eu_west
description: "Western Europe (Netherlands, UK, France)"
regions:
- westeurope
- uksouth
- francecentral
- name: us_east
description: "US East (Virginia, New York)"
regions:
- eastus
- eastus2
remotes:
- name: azure_aks
type: gitops
repository: git@github.com:your-org/azure-aks-config.git
reference: main
source_path: .
deploy_path: .
integrations:
- name: git
type: git
capabilities: [repository]
required: true
validation:
command: git --version
min_version: "2.30.0"
authentication:
method: cli
- name: terraform
type: terraform
capabilities: [infrastructure]
required: true
validation:
command: terraform --version
min_version: "1.6.0"
authentication:
method: cli
- name: azure_cli
type: azure_cli
capabilities: [infrastructure]
required: true
validation:
command: az --version
authentication:
method: cli
- name: kubectl
type: kubectl
capabilities: [container]
required: true
validation:
command: kubectl version --client
authentication:
method: cli
- name: helm
type: helm
capabilities: [container]
required: true
validation:
command: helm version
min_version: "3.12.0"
authentication:
method: cli
- name: infracost
type: infracost
capabilities: [cost]
required: false
validation:
command: infracost --version
min_version: "0.10.0"
authentication:
method: cli
Workspace
Infrastructure blueprint — wires providers, provisioners, topology, resources, and namespaces together.
apiVersion: strata.huybrechts.xyz/v1
kind: workspace
meta:
name: azure_aks_platform
annotations:
description: Azure AKS platform workspace — Terraform provisions, Helm deploys
labels:
version: "1.0.0"
tags: [azure, aks, workspace]
spec:
providers:
- name: azure_westeurope
file: "@azure_aks/stack/azure-provider-westeurope.yaml"
provisioners:
- name: terraform
provisioner: terraform
source:
repository: azure_aks
source_path: terraform
- name: helm
provisioner: helm
source:
repository: azure_aks
source_path: charts
topology:
- name: aks_cluster
provider: azure_westeurope
provisioner: terraform
type: kubernetes
components:
- resource: aks_cluster
- resource: postgres
- resource: acr
- resource: keyvault
namespaces:
- namespace: platform
resources:
- name: aks_cluster
file: "@azure_aks/stack/azure-res-aks.yaml"
description: Azure Kubernetes Service cluster
- name: postgres
file: "@azure_aks/stack/azure-res-postgres.yaml"
description: Azure Database for PostgreSQL Flexible Server
- name: acr
file: "@azure_aks/stack/azure-res-acr.yaml"
description: Azure Container Registry
- name: keyvault
file: "@azure_aks/stack/azure-res-keyvault.yaml"
description: Azure Key Vault for secrets management
namespaces:
- name: platform
file: "@azure_aks/stack/azure-ns-platform.yaml"
Provider
apiVersion: strata.huybrechts.xyz/v1
kind: provider
meta:
name: azure_westeurope
annotations:
description: Azure West Europe region
labels:
version: "1.0.0"
tags: [azure, provider, westeurope]
spec:
properties:
type: azure
region: westeurope
Network
VNet with dedicated subnets for AKS nodes, PostgreSQL, and private endpoints.
apiVersion: strata.huybrechts.xyz/v1
kind: network
meta:
name: azure_net_platform
annotations:
description: Azure Virtual Network for the AKS platform
labels:
version: "1.0.0"
tags: [azure, network, vnet]
spec:
networks:
- name: vnet_platform
description: Platform VNet for AKS and supporting services
address_space:
- value: "10.0.0.0/16"
subnets:
- name: snet_aks
cidr:
value: "10.0.0.0/20"
description: AKS node pool subnet
- name: snet_postgres
cidr:
value: "10.0.16.0/24"
description: PostgreSQL delegated subnet
- name: snet_endpoints
cidr:
value: "10.0.17.0/24"
description: Private endpoints (ACR, Key Vault)
Resources
AKS Cluster
apiVersion: strata.huybrechts.xyz/v1
kind: resource
meta:
name: azure_aks_cluster
annotations:
description: Azure Kubernetes Service cluster
labels:
version: "1.0.0"
tags: [azure, aks, resource, kubernetes]
spec:
properties:
provider_type: azure
resource_type: aks_cluster
category: compute
subcategory: kubernetes
configuration:
kubernetes_version: "1.30"
node_pool_vm_size: Standard_D4s_v5
node_pool_count: 3
node_pool_min: 2
node_pool_max: 5
network_plugin: azure
network_policy: calico
PostgreSQL Flexible Server
apiVersion: strata.huybrechts.xyz/v1
kind: resource
meta:
name: azure_postgres
annotations:
description: Azure Database for PostgreSQL — Flexible Server
labels:
version: "1.0.0"
tags: [azure, resource, postgresql, database]
spec:
properties:
provider_type: azure
resource_type: postgresql_flexible
category: database
subcategory: relational
configuration:
sku_name: GP_Standard_D2s_v3
storage_mb: 32768
postgresql_version: "16"
geo_redundant_backup: true
high_availability:
mode: ZoneRedundant
Azure Container Registry
apiVersion: strata.huybrechts.xyz/v1
kind: resource
meta:
name: azure_acr
annotations:
description: Azure Container Registry for storing container images
labels:
version: "1.0.0"
tags: [azure, resource, acr, registry]
spec:
properties:
provider_type: azure
resource_type: container_registry
category: container
subcategory: registry
configuration:
sku: Premium
admin_enabled: false
geo_replication:
- westeurope
- uksouth
Key Vault
apiVersion: strata.huybrechts.xyz/v1
kind: resource
meta:
name: azure_keyvault
annotations:
description: Azure Key Vault for secrets and certificate management
labels:
version: "1.0.0"
tags: [azure, resource, keyvault, secrets]
spec:
properties:
provider_type: azure
resource_type: key_vault
category: security
subcategory: secrets
configuration:
sku: premium
soft_delete_retention_days: 90
purge_protection: true
enable_rbac_authorization: true
Namespace
Application namespace grouping the platform’s Helm modules.
apiVersion: strata.huybrechts.xyz/v1
kind: namespace
meta:
name: azure_aks_ns_platform
annotations:
description: Platform namespace — ingress, monitoring, and shared services
labels:
version: "1.0.0"
tags: [azure, aks, namespace, platform]
spec:
modules:
- name: traefik
file: "@azure_aks/stack/azure-mod-traefik.yaml"
Module
Traefik Ingress Controller
apiVersion: strata.huybrechts.xyz/v1
kind: module
meta:
name: azure_aks_mod_traefik
annotations:
description: Traefik ingress controller deployed via Helm on AKS
labels:
version: "1.0.0"
tags: [azure, aks, module, traefik, ingress]
spec:
type: helm
source:
chart_repository: https://helm.traefik.io/traefik
chart_name: traefik
chart_version: "28.0.0"
kubernetes_namespace: traefik
services:
- name: traefik
configuration:
ingressClass:
enabled: true
isDefaultClass: true
service:
type: LoadBalancer
annotations:
service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path: /ping
Environment
Production environment variables and secrets (sensitive values are resolved from the environment at runtime).
apiVersion: strata.huybrechts.xyz/v1
kind: environment
meta:
name: azure_aks_env_prd
annotations:
description: Production environment for Azure AKS platform
labels:
version: "1.0.0"
tags: [azure, aks, production, environment]
spec:
variables:
- key: WORKSPACE
store: constant
value: azure_aks
- key: ENVIRONMENT
store: constant
value: prd
- key: AZURE_SUBSCRIPTION_ID
store: environment
value: AZURE_SUBSCRIPTION_ID
- key: AZURE_RESOURCE_GROUP
store: constant
value: rg-aks-prd-westeurope
- key: AZURE_LOCATION
store: constant
value: westeurope
- key: AKS_CLUSTER_NAME
store: constant
value: aks-platform-prd
- key: ACR_NAME
store: constant
value: acrplatformprd
- key: KEYVAULT_NAME
store: constant
value: kv-platform-prd
- key: POSTGRES_SERVER_NAME
store: constant
value: psql-platform-prd
secrets:
- key: ARM_CLIENT_ID
store: environment
value: ARM_CLIENT_ID
- key: ARM_CLIENT_SECRET
store: environment
value: ARM_CLIENT_SECRET
- key: ARM_TENANT_ID
store: environment
value: ARM_TENANT_ID
Deployment
The concrete production deployment instance — binds workspace, environment, and stages.
apiVersion: strata.huybrechts.xyz/v1
kind: deployment
meta:
name: azure_aks_deploy_prd
annotations:
description: Production deployment for Azure AKS platform
labels:
version: "1.0.0"
tags: [azure, aks, production, deployment]
spec:
layers:
environment: prd
properties:
environment: prd
workspace:
name: azure_aks_platform
description: Azure AKS Platform Workspace
file: "@azure_aks/stack/azure-ws-platform.yaml"
environments:
- "@azure_aks/environments/azure-aks-env-prd.yaml"
stages:
- name: infrastructure
provisioner: terraform
scope: all
on_failure: stop
- name: platform
provisioner: helm
scope: all
depends_on: [infrastructure]
on_failure: stop