Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
385786e
Add Aspire.Hosting.Azure.Kubernetes package (Phase 1)
mitchdenny Apr 12, 2026
7638a43
Add AKS support implementation spec
mitchdenny Apr 12, 2026
61a5220
Add unit tests for AzureKubernetesEnvironment
mitchdenny Apr 12, 2026
f23be85
Add workload identity, VNet delegation, and NSP support
mitchdenny Apr 12, 2026
11c7a3c
Add AddNodePool and WithNodePoolAffinity for workload scheduling
mitchdenny Apr 12, 2026
1a29a02
Auto-create default user node pool when none configured
mitchdenny Apr 12, 2026
051a02c
Fix publish: add inner K8s environment to model for Helm chart genera…
mitchdenny Apr 12, 2026
f8956b1
Generate valid AKS Bicep instead of empty output placeholders
mitchdenny Apr 12, 2026
1d26d83
Add ACR integration and fix localhive packaging
mitchdenny Apr 12, 2026
9187250
Fix localhive to include NonShipping packages in hive
mitchdenny Apr 12, 2026
3bfb352
Fix MethodAccessException: use public AddKubernetesEnvironment API
mitchdenny Apr 12, 2026
7963370
Revert localhive.ps1 changes
mitchdenny Apr 13, 2026
604b85e
Clean up ConfigureAksInfrastructure: remove stale ProvisioningOutput …
mitchdenny Apr 13, 2026
c295eea
Add kubeconfig isolation for AKS deployments
mitchdenny Apr 13, 2026
2b22a18
Fix resource group resolution: read from Azure config instead of Para…
mitchdenny Apr 13, 2026
46d0a3e
Fix: use resource name directly instead of BicepOutputReference for c…
mitchdenny Apr 13, 2026
ba1613f
Fix: depend on provision-azure-bicep-resources aggregation step
mitchdenny Apr 13, 2026
7c46d80
Fix: wire container registry to inner K8s env at creation time, not d…
mitchdenny Apr 13, 2026
c018fb2
Fix push steps blocking: wire push to depend on ACR provisioning
mitchdenny Apr 13, 2026
74bff0a
Fix push dependency: use provision-azure-bicep-resources aggregation …
mitchdenny Apr 13, 2026
25ce77b
Fix push-prereq: find step by name and add provision dependency
mitchdenny Apr 13, 2026
e250b80
Add diagnostic logging to push step wiring
mitchdenny Apr 13, 2026
28bf36c
Fix push steps having no dependencies in K8s compute environment
mitchdenny Apr 13, 2026
c54c0f4
Fix resource group resolution: query Azure directly via az aks list
mitchdenny Apr 13, 2026
30504f2
Fix az aks get-credentials arguments: quote values and clean resource…
mitchdenny Apr 13, 2026
28670fc
Fix resource group query: use az resource list instead of az aks list
mitchdenny Apr 13, 2026
015ebd6
Fix resource group from deployment state + attach ACR to AKS
mitchdenny Apr 13, 2026
0f6f85e
Add AcrPull role assignment in Bicep instead of CLI
mitchdenny Apr 13, 2026
f0424c6
Add AKS cluster info and get-credentials command to deploy summary
mitchdenny Apr 13, 2026
b839964
Fix Bicep BCP120: use compile-time values for role assignment name
mitchdenny Apr 13, 2026
a80f61a
Fix first deploy: fall back to az CLI when deployment state not loaded
mitchdenny Apr 13, 2026
362eaa7
Support multi-environment AKS with shared ACR and WithComputeEnvironment
mitchdenny Apr 13, 2026
fe0e964
Add multi-environment targeting test
mitchdenny Apr 13, 2026
046b82d
Fix publish to include compute resources in Helm chart templates
mitchdenny Apr 13, 2026
96a571b
Fix Helm template parse error for Azure Bicep output references
mitchdenny Apr 13, 2026
fdd0c8c
Add VNet subnet integration for AKS via WithDelegatedSubnet
mitchdenny Apr 14, 2026
b0136ce
Fix: AKS doesn't support subnet delegation — add WithSubnet extension
mitchdenny Apr 14, 2026
bf29813
Resolve IValueProvider expressions in Helm values at deploy time
mitchdenny Apr 14, 2026
357192e
Fix composite expressions with deferred values + scope Helm chart names
mitchdenny Apr 14, 2026
acefeb0
Fix deferred value detection: recurse into connection strings and exp…
mitchdenny Apr 14, 2026
92e5532
Fix Helm key: use env var name instead of value expression for deferr…
mitchdenny Apr 14, 2026
20eb686
Move node pool to base K8s package with WithNodePool API
mitchdenny Apr 14, 2026
576ad5e
Add AzureVmSizes constants class and generator tool
mitchdenny Apr 14, 2026
099e800
Support per-node-pool subnet via WithSubnet on AksNodePoolResource
mitchdenny Apr 14, 2026
908e60c
Implement workload identity via AppIdentityAnnotation
mitchdenny Apr 14, 2026
1b163d2
Fix empty workload identity clientId in ServiceAccount annotation
mitchdenny Apr 14, 2026
9f55b49
Fix missing workload identity pod label
mitchdenny Apr 14, 2026
25e6d6c
Rename AzureVmSizes to AksNodeVmSizes
mitchdenny Apr 14, 2026
cf7e65c
Update AKS spec to reflect current implementation
mitchdenny Apr 14, 2026
d43689d
Query all US regions for VM sizes in GenVmSizes tool
mitchdenny Apr 15, 2026
1ef07be
Address PR review: pragmas and DelegatedSubnetAnnotation
mitchdenny Apr 15, 2026
a6024e3
Enable ATS exports for all AKS public APIs
mitchdenny Apr 15, 2026
3695c9d
Refactor az CLI usage to shared ProcessSpec/ProcessUtil infrastructure
mitchdenny Apr 15, 2026
8aa4690
Use IFileSystemService for kubeconfig temp directory
mitchdenny Apr 15, 2026
09cc84d
Capture kubeconfig via stdout to control file permissions
mitchdenny Apr 15, 2026
87a89c4
Remove redundant HelmValue allocation in ResolveUnknownValue
mitchdenny Apr 15, 2026
5a9682b
Fix node pool model bugs and update AKS API version
mitchdenny Apr 15, 2026
b31c15f
Migrate to Azure.Provisioning.ContainerService SDK
mitchdenny Apr 15, 2026
be0d80d
Fix cluster name resolution after Azure.Provisioning migration
mitchdenny Apr 15, 2026
1db30e4
Fix code review findings
mitchdenny Apr 15, 2026
cf7626c
Fix markdownlint errors in AKS spec
mitchdenny Apr 15, 2026
6c18f28
Address James's PR feedback
mitchdenny Apr 15, 2026
df21ad9
Remove AsPrivateCluster and WithSkuTier public APIs
mitchdenny Apr 15, 2026
c9c918d
Add T1.1 AKS E2E deployment test with Azure Provisioning
mitchdenny Apr 15, 2026
08656d5
Add Tier 1 AKS E2E deployment tests (T1.2-T1.7)
mitchdenny Apr 15, 2026
6ed6a9a
Add TypeScript AppHost AKS E2E deployment tests
mitchdenny Apr 15, 2026
a199abb
Remove WithVersion public API — use ConfigureInfrastructure instead
mitchdenny Apr 15, 2026
05e1c5a
Remove non-functional WithContainerInsights and WithAzureLogAnalytics…
mitchdenny Apr 15, 2026
fdb363c
Fix AppHost.cs modification in all AKS E2E tests
mitchdenny Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions .github/workflows/update-azure-vm-sizes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Update Azure VM Sizes

on:
workflow_dispatch:
schedule:
- cron: '0 6 1 * *' # Monthly on the 1st at 06:00 UTC

permissions:
contents: write
pull-requests: write

jobs:
generate-and-pr:
runs-on: ubuntu-latest
if: ${{ github.repository_owner == 'microsoft' }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Azure Login
uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}

- name: Generate updated Azure VM size descriptors
working-directory: src/Aspire.Hosting.Azure.Kubernetes/tools
run: |
set -e
"$GITHUB_WORKSPACE/dotnet.sh" run GenVmSizes.cs

- name: Generate GitHub App Token
id: app-token
uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6
with:
app-id: ${{ secrets.ASPIRE_BOT_APP_ID }}
private-key: ${{ secrets.ASPIRE_BOT_PRIVATE_KEY }}

- name: Create or update pull request
uses: ./.github/actions/create-pull-request
with:
token: ${{ steps.app-token.outputs.token }}
branch: update-azure-vm-sizes
base: main
commit-message: "[Automated] Update Azure VM Sizes"
labels: |
area-integrations
area-engineering-systems
title: "[Automated] Update Azure VM Sizes"
body: "Auto-generated update of Azure VM size descriptors (AksNodeVmSizes.Generated.cs)."
2 changes: 2 additions & 0 deletions Aspire.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@
<Project Path="src/Aspire.Hosting.Azure.EventHubs/Aspire.Hosting.Azure.EventHubs.csproj" />
<Project Path="src/Aspire.Hosting.Azure.Functions/Aspire.Hosting.Azure.Functions.csproj" />
<Project Path="src/Aspire.Hosting.Azure.KeyVault/Aspire.Hosting.Azure.KeyVault.csproj" />
<Project Path="src/Aspire.Hosting.Azure.Kubernetes/Aspire.Hosting.Azure.Kubernetes.csproj" />
<Project Path="src/Aspire.Hosting.Azure.Kusto/Aspire.Hosting.Azure.Kusto.csproj" />
<Project Path="src/Aspire.Hosting.Azure.Network/Aspire.Hosting.Azure.Network.csproj" />
<Project Path="src/Aspire.Hosting.Azure.OperationalInsights/Aspire.Hosting.Azure.OperationalInsights.csproj" />
Expand Down Expand Up @@ -467,6 +468,7 @@
<Project Path="tests/Aspire.Hosting.Analyzers.Tests/Aspire.Hosting.Analyzers.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.Foundry.Tests/Aspire.Hosting.Foundry.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.Azure.Kusto.Tests/Aspire.Hosting.Azure.Kusto.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.Azure.Kubernetes.Tests/Aspire.Hosting.Azure.Kubernetes.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.Azure.Tests/Aspire.Hosting.Azure.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.Containers.Tests/Aspire.Hosting.Containers.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.DevTunnels.Tests/Aspire.Hosting.DevTunnels.Tests.csproj" />
Expand Down
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
<PackageVersion Include="Azure.Provisioning.AppService" Version="1.3.1" />
<PackageVersion Include="Azure.Provisioning.ApplicationInsights" Version="1.1.0" />
<PackageVersion Include="Azure.Provisioning.ContainerRegistry" Version="1.1.0" />
<PackageVersion Include="Azure.Provisioning.ContainerService" Version="1.0.0-beta.3" />
<PackageVersion Include="Azure.Provisioning.CognitiveServices" Version="1.2.0" />
<PackageVersion Include="Azure.Provisioning.CosmosDB" Version="1.0.0" />
<PackageVersion Include="Azure.Provisioning.EventHubs" Version="1.1.0" />
Expand Down
620 changes: 620 additions & 0 deletions docs/specs/aks-support.md

Large diffs are not rendered by default.

30 changes: 30 additions & 0 deletions src/Aspire.Hosting.Azure.Kubernetes/AksNetworkProfile.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Aspire.Hosting.Azure.Kubernetes;

/// <summary>
/// Network profile configuration for an AKS cluster.
/// </summary>
internal sealed class AksNetworkProfile
{
/// <summary>
/// Gets or sets the network plugin. Defaults to "azure" for Azure CNI.
/// </summary>
public string NetworkPlugin { get; set; } = "azure";

/// <summary>
/// Gets or sets the network policy. Defaults to "calico".
/// </summary>
public string? NetworkPolicy { get; set; } = "calico";

/// <summary>
/// Gets or sets the service CIDR.
/// </summary>
public string ServiceCidr { get; set; } = "10.0.4.0/22";

/// <summary>
/// Gets or sets the DNS service IP address.
/// </summary>
public string DnsServiceIP { get; set; } = "10.0.4.10";
}
35 changes: 35 additions & 0 deletions src/Aspire.Hosting.Azure.Kubernetes/AksNodePoolConfig.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Aspire.Hosting.Azure.Kubernetes;

/// <summary>
/// Configuration for an AKS node pool.
/// </summary>
/// <param name="Name">The name of the node pool.</param>
/// <param name="VmSize">The VM size for nodes in the pool.</param>
/// <param name="MinCount">The minimum number of nodes.</param>
/// <param name="MaxCount">The maximum number of nodes.</param>
/// <param name="Mode">The mode of the node pool.</param>
public sealed record AksNodePoolConfig(
string Name,
string VmSize,
int MinCount,
int MaxCount,
AksNodePoolMode Mode);

/// <summary>
/// Specifies the mode of an AKS node pool.
/// </summary>
public enum AksNodePoolMode
{
/// <summary>
/// System node pool for hosting system pods.
/// </summary>
System,

/// <summary>
/// User node pool for hosting application workloads.
/// </summary>
User
}
30 changes: 30 additions & 0 deletions src/Aspire.Hosting.Azure.Kubernetes/AksNodePoolResource.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Aspire.Hosting.Kubernetes;

namespace Aspire.Hosting.Azure.Kubernetes;

/// <summary>
/// Represents an AKS node pool with Azure-specific configuration such as VM size and autoscaling.
/// Extends the base <see cref="KubernetesNodePoolResource"/> with provisioning configuration
/// that is used to generate Azure Bicep for the AKS agent pool profile.
/// </summary>
/// <param name="name">The name of the node pool resource.</param>
/// <param name="config">The Azure-specific node pool configuration.</param>
/// <param name="parent">The parent AKS environment resource.</param>
public class AksNodePoolResource(
string name,
AksNodePoolConfig config,
AzureKubernetesEnvironmentResource parent) : KubernetesNodePoolResource(name, parent.KubernetesEnvironment)
{
/// <summary>
/// Gets the parent AKS environment resource.
/// </summary>
public AzureKubernetesEnvironmentResource AksParent { get; } = parent ?? throw new ArgumentNullException(nameof(parent));

/// <summary>
/// Gets the Azure-specific node pool configuration.
/// </summary>
public AksNodePoolConfig Config { get; } = config ?? throw new ArgumentNullException(nameof(config));
}
Loading
Loading