An Azure service that provides serverless Kubernetes, an integrated continuous integration and continuous delivery experience, and enterprise-grade security and governance.
Hello Padmanabhan
To deploy (publish) an AKS‑based application together with its dependent Azure resources (such as Key Vault, Storage, databases, Log Analytics, etc.), Microsoft recommends using a two‑offer deployment pattern when distributing via Azure Marketplace, or a single Infrastructure‑as‑Code (IaC) deployment when deploying internally.
For Marketplace publishing, the officially recommended approach is a two‑offer model:
Offer A – Kubernetes Application (Cluster Extension)
- Contains only the Kubernetes application logic
- Keeps the ARM/UI definition simple
- Installed as a cluster extension on AKS
Offer B – Azure Managed Application
- Wraps Offer A
- Deploys all required Azure infrastructure and AKS in a single ARM/Bicep template
- Installs the Kubernetes application as part of the same deployment
Using this model, the managed application ARM template can deploy:
-
Microsoft.ContainerService/managedClusters(AKS) -
Microsoft.KubernetesConfiguration/extensions(your AKS app) - Supporting resources such as Key Vault, Storage, databases, Log Analytics, etc.
This ensures customers get a single‑click, end‑to‑end deployment of the AKS application and all required Azure resources in a consistent and supported manner.
Limitation: This approach creates a new AKS cluster; it does not support deploying into an existing customer‑managed AKS cluster.
Reference Links:
https://4sight.cloud/blog/a-step-by-step-guide-to-publishing-your-software-on-azure-marketplace
https://learn.microsoft.com/en-us/azure/aks/deploy-application-template
https://learn.microsoft.com/en-us/azure/aks/learn/quick-kubernetes-deploy-bicep?tabs=azure-cli
When you deploy your solution using the two‑offer Marketplace model (Kubernetes application + Azure Managed Application), Microsoft does not recommend passing sensitive values such as database passwords directly into Helm values.
Instead, the supported and secure pattern is:
Azure Managed Application → Azure Key Vault → AKS (Helm) via Secrets Store CSI Driver.
Managed Application ( ARM/Bicep)
- Deploy PostgreSQL (Azure Database for PostgreSQL)
- Capture:
- DB host
- DB name
- DB username
- DB password
- Store these values as Key Vault secrets
- Grant AKS managed identity read access to Key Vault
- This step is fully supported in Azure Managed Applications https://www.azurecitadel.com/marketplace/azureappma/maaks/
AKS Cluster Setup
- Enable Azure Key Vault Provider for Secrets Store CSI Driver
- AKS uses Managed Identity to authenticate to Key Vault
- No credentials stored in code or Helm values
Kubernetes Application (Offer A – Helm / Cluster Extension)
- Helm chart defines:
-
SecretProviderClass - Volume mount from Key Vault
- Secrets are injected into pods as:
- Environment variables or
- Mounted files
-
This is the supported way to pass dynamic secrets into Helm deployments
https://learn.microsoft.com/en-us/azure/aks/csi-secrets-store-driver
Please note that Azure Managed Application offers always create a new AKS cluster as part of deployment. Deploying the solution into an existing, customer‑managed AKS cluster is not supported with this Marketplace model.
Thanks.