Skip to content
Back to skills

Aks

ASecurity

Expert coverage of Azure Kubernetes Service (AKS): node pools, workload identity, Azure CNI options, AKS Automatic, NAP (Karpenter), add-ons, and hybrid scenarios. Use for \"AKS\", \"Azure Kubernetes\", \"Azure CNI\", \"AKS Automatic\", \"workload identity Azure\", \"az aks\", \"Node Auto Provisioning AKS\".

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 24, 2026
devopsbashnodekubernetesazureterraformgitapisecurityperformance

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 24, 2026

npx -y skills add chrishuffman5/domain-expert --skill aks --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Aks?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Aks
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/chrishuffman5-aks/badge)](https://www.skillsdirectory.com/skills/chrishuffman5-aks)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: aks
description: "Expert coverage of Azure Kubernetes Service (AKS): node pools, workload identity, Azure CNI options, AKS Automatic, NAP (Karpenter), add-ons, and hybrid scenarios. Use for \"AKS\", \"Azure Kubernetes\", \"Azure CNI\", \"AKS Automatic\", \"workload identity Azure\", \"az aks\", \"Node Auto Provisioning AKS\"."
license: MIT
---

# Azure AKS

This skill covers Azure Kubernetes Service (AKS), including:

- AKS managed control plane (free and paid tiers, SLA)
- Node pools (system vs user, VM sizes, autoscaling, taints)
- AKS Automatic (fully managed, GA since 2026)
- Node Auto Provisioning (Karpenter on AKS, GA 2026)
- Networking (Azure CNI, kubenet, Azure CNI Overlay, Cilium-powered CNI)
- Workload Identity (replacing AAD Pod Identity)
- AKS add-ons (monitoring, policy, Istio, secrets CSI, Defender)
- Storage (Azure Disk CSI, Azure Files CSI, Blob CSI)
- Security (Defender for Containers, Azure Policy, managed identity)
- Hybrid and multi-cloud (Azure Arc-enabled Kubernetes)

## How to Approach Tasks

1. **Classify** the request:
   - **Architecture** -- Load `references/architecture.md` for control plane, networking, compute, identity
   - **Node management** -- Node pool design, autoscaling, AKS Automatic, NAP
   - **Networking** -- CNI selection, ingress, load balancing, DNS
   - **Security** -- Workload identity, Defender, Azure Policy, managed identity
   - **Troubleshooting** -- Node issues, networking, identity errors, upgrade failures

2. **Identify context** -- Which tier (free/standard/premium)? Which CNI? AKS Automatic or standard? Ask if unclear.

3. **Load context** -- Read the reference file for deep technical detail.

4. **Apply** -- Provide Azure CLI (`az aks`), Bicep, Terraform, or kubectl examples as appropriate.

5. **Validate** -- Suggest `az aks show`, `kubectl get nodes`, Azure Monitor queries.

## AKS Control Plane

- Managed by Azure: API server and etcd run in Azure-managed infrastructure
- **Free tier**: no SLA, no uptime guarantee (dev/test only)
- **Standard tier**: 99.95% SLA (or 99.99% with Availability Zones), Cluster Autoscaler, multiple node pools
- **Premium tier**: Standard + long-term support (LTS), Microsoft-backed patch SLA
- Upgrade: one minor version at a time; automatic upgrades available (patch, stable, rapid, node image channels)

```bash
# Create AKS cluster
az aks create \
  --resource-group myRG \
  --name myAKS \
  --node-count 3 \
  --node-vm-size Standard_D4s_v5 \
  --network-plugin azure \
  --network-plugin-mode overlay \
  --tier standard \
  --enable-managed-identity \
  --enable-oidc-issuer \
  --enable-workload-identity \
  --zones 1 2 3
```

## Node Pools

### System vs User Node Pools

```bash
# System pool (runs kube-system, CoreDNS, metrics-server)
az aks nodepool add \
  --resource-group myRG \
  --cluster-name myAKS \
  --name system \
  --node-count 3 \
  --node-vm-size Standard_D4s_v5 \
  --mode System \
  --node-taints CriticalAddonsOnly=true:NoSchedule

# User pool (application workloads)
az aks nodepool add \
  --resource-group myRG \
  --cluster-name myAKS \
  --name workers \
  --node-count 3 \
  --node-vm-size Standard_D8s_v5 \
  --mode User \
  --enable-cluster-autoscaler \
  --min-count 2 \
  --max-count 20 \
  --zones 1 2 3
```

**Best practice**: separate system and user node pools. Taint system pool with `CriticalAddonsOnly=true:NoSchedule` to prevent application pods from landing on system nodes.

### Specialized Node Pools

```bash
# GPU node pool
az aks nodepool add \
  --resource-group myRG \
  --cluster-name myAKS \
  --name gpu \
  --node-vm-size Standard_NC6s_v3 \
  --node-count 1 \
  --node-taints sku=gpu:NoSchedule \
  --labels workload=gpu

# Spot VM pool (cost optimization)
az aks nodepool add \
  --resource-group myRG \
  --cluster-name myAKS \
  --name spot \
  --priority Spot \
  --spot-max-price -1 \
  --eviction-policy Delete \
  --node-vm-size Standard_D4s_v5 \
  --enable-cluster-autoscaler \
  --min-count 0 \
  --max-count 10
```

## AKS Automatic

GA since 2026. Removes infrastructure decisions -- Azure manages node pools, autoscaling, OS patching, and security hardening automatically. Comparable to GKE Autopilot.

```bash
az aks create \
  --resource-group myRG \
  --name myAKS-auto \
  --sku automatic
```

**What AKS Automatic manages**:
- Node pool creation and sizing based on workload requirements
- OS patching and security updates
- Default security hardening (Pod Security Standards enforced)
- Network policy enforcement
- Built-in monitoring and logging

**When NOT to use AKS Automatic**:
- Custom node configurations needed (kernel tuning, custom kubelet settings)
- Specific VM SKUs required (GPU, high-memory, confidential computing)
- Windows containers
- Need for SSH access to nodes

## Node Auto Provisioning (NAP)

Karpenter-based node provisioning for AKS (GA early 2026):

```bash
az aks update --resource-group myRG --name myAKS --enable-node-auto-provisioning
```

NAP dynamically creates nodes matching pending pod requirements, similar to Karpenter on EKS. Selects optimal VM sizes and consolidates underutilized nodes.

## Networking

### CNI Options

| CNI | Pod IP Source | Performance | Use Case |
|-----|-------------|-------------|----------|
| kubenet | Non-VNet IPs (NAT) | Lower (NAT overhead) | Simple, IP conservation |
| Azure CNI | VNet IPs per pod | High (direct routing) | VNet integration needed |
| Azure CNI Overlay | Overlay IPs, node VNet IPs | High | Scale + VNet integration |
| Azure CNI + Cilium | eBPF dataplane | Highest | Best performance + observability |

**Azure CNI Overlay** (recommended for most new clusters): pods get IPs from a private overlay CIDR (e.g., 10.244.0.0/16), nodes get VNet IPs. Eliminates IP exhaustion issues while maintaining VNet integration for node-level communication.

**Azure CNI powered by Cilium**: eBPF-based dataplane for service load balancing, NetworkPolicy enforcement, and observability (Hubble). Replaces kube-proxy.

```bash
az aks create \
  --resource-group myRG \
  --name myAKS \
  --network-plugin azure \
  --network-plugin-mode overlay \
  --network-dataplane cilium
```

### Ingress Options

| Option | Type | Managed By |
|--------|------|-----------|
| Application Gateway Ingress Controller (AGIC) | L7 | Azure (add-on) |
| NGINX Ingress | L7 | Self-managed |
| Azure Service Mesh (Istio) | L7 + mTLS | Azure (add-on) |
| Internal Load Balancer | L4 | Azure (annotation) |

```yaml
# Internal load balancer annotation
apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer
```

## Workload Identity

Replaces the deprecated AAD Pod Identity. Federated credentials between Azure AD and Kubernetes ServiceAccounts:

```yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: storage-reader
  namespace: production
  annotations:
    azure.workload.identity/client-id: "CLIENT_ID_GUID"
  labels:
    azure.workload.identity/use: "true"
```

```bash
# Enable on cluster
az aks update --resource-group myRG --name myAKS \
  --enable-oidc-issuer --enable-workload-identity

# Create federated credential
az identity federated-credential create \
  --name aks-fed-cred \
  --identity-name myManagedIdentity \
  --resource-group myRG \
  --issuer "$(az aks show -g myRG -n myAKS --query oidcIssuerProfile.issuerUrl -o tsv)" \
  --subject "system:serviceaccount:production:storage-reader"
```

**Pod must have the label**: `azure.workload.identity/use: "true"` on the pod (not just the ServiceAccount) for the webhook to inject the AZURE_CLIENT_ID, AZURE_TENANT_ID, and AZURE_FEDERATED_TOKEN_FILE environment variables.

## AKS Add-ons

| Add-on | Purpose |
|--------|---------|
| Azure Monitor (Container Insights) | Metrics, logs, Live View |
| Azure Policy | OPA/Gatekeeper-based policy enforcement |
| Istio Service Mesh | mTLS, traffic management |
| Secrets Store CSI (Key Vault) | Mount Key Vault secrets as volumes |
| Defender for Containers | Runtime threat detection |
| Blob CSI Driver | Azure Blob storage volumes |
| Web App Routing | Managed NGINX ingress + cert management |

## Common Patterns

### Multi-Region HA

```bash
# Cluster per region
az aks create -g myRG-eastus -n aks-eastus --location eastus ...
az aks create -g myRG-westus -n aks-westus --location westus ...

# Azure Front Door for global load balancing
# Azure Traffic Manager for DNS-based failover
```

### Hybrid with Azure Arc

```bash
# Connect non-AKS cluster to Azure
az connectedk8s connect --name on-prem-cluster --resource-group myRG

# Deploy configurations via GitOps (Flux)
az k8s-configuration flux create \
  --name app-config \
  --cluster-name on-prem-cluster \
  --resource-group myRG \
  --cluster-type connectedClusters \
  --url https://github.com/myorg/k8s-config \
  --branch main
```

## Reference Files

- `references/architecture.md` -- Node pool internals, CNI deep dive, workload identity mechanics, AKS Automatic architecture, storage options, security model. Read for architecture and design questions.

Files in this skill

  • SKILL.md8.9 KB
  • references/architecture.md10.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…