Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
2f73a0a
enable application routing addon
ferantivero Oct 16, 2025
0356bbf
attach an aks ingress private DNS zone to the application routing add-on
ferantivero Oct 16, 2025
84be924
default nginx ingress controller is created with an internal load bal…
ferantivero Oct 16, 2025
eea8850
enablePodSecurityPolicy is not allowed in the latest managed cluster …
ferantivero Oct 16, 2025
eea1112
streamline deploy steps: remove the fixed ilb ip address
ferantivero Oct 16, 2025
c57b934
get rid of traefik installation in favor of enabling the web app rout…
ferantivero Oct 16, 2025
d95c7da
streamline deployment steps: no longer required to import traefik con…
ferantivero Oct 16, 2025
d137309
streamline deployment steps: no longer required to capture the acr in…
ferantivero Oct 16, 2025
96fa917
remove no longer used bicep output acr instance name from deployment …
ferantivero Oct 16, 2025
3036267
create NGINX ingress controller w/ a PIP and an ILB
ferantivero Oct 16, 2025
8868e3a
configure ingress object to use nginx
ferantivero Oct 16, 2025
f08349d
rename kv cert/secret name to be aligned with nginx
ferantivero Oct 17, 2025
de1f019
rbac cluster web app routing identity to kv
ferantivero Oct 17, 2025
d6d4379
integrate web app routing addong with kv
ferantivero Oct 17, 2025
0c16c4d
cover the case for ingress http resource redirection (HTTP308)
ferantivero Oct 20, 2025
6006db0
rbac cluster web app routing identity to pdz
ferantivero Oct 20, 2025
d90837a
customize NginxIngressController to specify which subnet the internal…
ferantivero Oct 20, 2025
f136073
indicate the container port for the aspnet-webapp-sample
ferantivero Oct 20, 2025
a720c60
bug fix: pod affinity selection and node selection
ferantivero Oct 21, 2025
1399639
modify ingress network policy for nginx
ferantivero Oct 22, 2025
cd4a91c
workloads deploy object: general improvements sec, liveness/readiness…
ferantivero Oct 22, 2025
05e98cf
strealine: remove secret management section as this now managed
ferantivero Oct 22, 2025
e1e0b51
remove no longer used UMI for ingress controller in favor of the app-…
ferantivero Oct 22, 2025
3654d35
clean up traefik references
ferantivero Oct 22, 2025
f825b73
Address PR Feedback: correct spelling
ferantivero Nov 3, 2025
5f0d237
Address PR Feedback: uniteresting workload pod level security hardening
ferantivero Nov 3, 2025
a044b3e
Address PR Feedback: improve format, naming conventions and fix typos
ferantivero Nov 6, 2025
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
8 changes: 3 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ Finally, this implementation uses the [ASP.NET Core Docker sample web app](https
- [Flux GitOps Operator](https://fluxcd.io) *[AKS-managed extension]*
- [ImageCleaner (Eraser)](https://learn.microsoft.com/azure/aks/image-cleaner) *[AKS-managed add-on]*
- [Secrets Store CSI Driver for Kubernetes](https://learn.microsoft.com/azure/aks/csi-secrets-store-driver) *[AKS-managed add-on]*
- [Traefik Ingress Controller](https://doc.traefik.io/traefik/v3.4/routing/providers/kubernetes-ingress/)

![Network diagram depicting a hub-spoke network with two peered VNets and main Azure resources used in the architecture.](https://learn.microsoft.com/azure/architecture/reference-architectures/containers/aks/images/secure-baseline-architecture.svg)

Expand Down Expand Up @@ -83,20 +82,19 @@ We perform the prior steps manually here for you to understand the involved comp
Without a workload deployed to the cluster it will be hard to see how these decisions come together to work as a reliable application platform for your business. The deployment of this workload would typically follow a CI/CD pattern and may involve even more advanced deployment strategies (such as blue/green). The following steps represent a manual deployment, suitable for illustration purposes of this infrastructure.

- [ ] Just like the cluster, there are [workload prerequisites to address](./docs/deploy/08-workload-prerequisites.md)
- [ ] [Configure AKS Ingress Controller with Azure Key Vault integration](./docs/deploy/09-secret-management-and-ingress-controller.md)
- [ ] [Deploy the workload](./docs/deploy/10-workload.md)
- [ ] [Deploy the workload](./docs/deploy/09-workload.md)

### 5. :checkered_flag: Validate

Now that the cluster and the sample workload is deployed; it's time to look at how the cluster is functioning.

- [ ] [Perform end-to-end deployment validation](./docs/deploy/11-validation.md)
- [ ] [Perform end-to-end deployment validation](./docs/deploy/10-validation.md)

## :broom: Clean up resources

Most of the Azure resources deployed in the prior steps will incur ongoing charges unless removed.

- [ ] [Clean up all resources](./docs/deploy/12-cleanup.md)
- [ ] [Clean up all resources](./docs/deploy/11-cleanup.md)

## Preview and additional features

Expand Down
10 changes: 6 additions & 4 deletions cluster-manifests/a0008/ingress-network-policy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ spec:
app.kubernetes.io/name: aspnetapp
ingress:
- from:
- namespaceSelector: {}
podSelector:
- namespaceSelector:
matchLabels:
app.kubernetes.io/name: traefik-ingress-ilb
app.kubernetes.io/instance: traefik-ingress-ilb
kubernetes.io/metadata.name: app-routing-system
- podSelector:
matchLabels:
app: nginx-internal-0
app.kubernetes.io/component: ingress-controller
23 changes: 23 additions & 0 deletions cluster-manifests/a0008/nginx-internal.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# ------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License (MIT). See License.txt in the repo root # for license information.
# ------------------------------------------------------------

apiVersion: approuting.kubernetes.azure.com/v1alpha1
kind: NginxIngressController
metadata:
name: nginx-internal
namespace: a0008
labels:
app.kubernetes.io/name: nginx-ingress-ilb
app.kubernetes.io/instance: nginx-ingress-ilb
spec:
ingressClassName: nginx-internal
controllerNamePrefix: nginx-internal
loadBalancerAnnotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "snet-clusteringressservices"
httpDisabled: false
scaling:
maxReplicas: 3
minReplicas: 2
2 changes: 1 addition & 1 deletion contoso-bicycle/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ The web service's host should have these capabilities.

- Deploy the AKS cluster into an existing Azure Virtual Network spoke. Use the existing Azure Firewall in the regional hub for securing outgoing traffic from the cluster.
- Traffic from public-facing website is required to be encrypted. This encryption is implemented with Azure Application Gateway with integrated web application firewall (WAF).
- Use Traefik as the Kubernetes ingress controller.
- Use NGINX as the Kubernetes ingress controller.
- The workload is stateless. No data will be persisted inside the cluster.
- Azure Network Policy will be enabled for use, even though there's a single workload in one line-of-business.
- Azure Container Registry will be used for the container image registry. The cluster will access the registry through Azure Private Link.
Expand Down
3 changes: 1 addition & 2 deletions docs/aks-baseline_details.drawio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading