Skip to main content

Ingress to apps deployed on Azure Kubernetes Service (AKS)

In this guide, you'll launch a new cluster with Azure Kubernetes Service (AKS) and a demo app. You'll then add the ngrok Kubernetes Operator to route public traffic directly to your demo app through an encrypted, feature-rich tunnel for a complete proof of concept.

In the end, you'll have learned enough to deploy your next production-ready Kubernetes app with AKS, with the ngrok Kubernetes Operator giving you access to additional features, like observability and resiliency, with no extra configuration complexity.

Here is what you'll be building with:

  • The ngrok Kubernetes Operator: ngrok's official controller for adding secure public ingress and middleware execution to your Kubernetes apps with ngrok's Cloud Edge. With ngrok, you can manage and secure traffic to your apps at every stage of the development lifecycle while also benefitting from simpler configurations, security, and edge acceleration.
  • Azure Kubernetes Service (AKS): A managed Kubernetes environment from Microsoft. AKS simplifies the deployment, health monitoring, and maintenance of cloud native applications, whether you deploy them in Azure, in on-premises data centers, or at the edge. With 40 regions, you should be able to deploy a cluster close to your customers.
This how-to requires:
  1. An ngrok account at the pay-as-you-go or custom tiers.
  2. An Azure account with permissions to create new Kubernetes clusters.
  3. kubectl installed locally.
  4. Helm 3.0.0+ installed locally.

Step 1: Create your cluster in AKS

Start by creating a new managed Kubernetes cluster in AKS. If you already have one, you can skip to Step 2: Install the ngrok Kubernetes Operator.

  1. Go to the Kubernetes services section in your Azure console and click CreateCreate a Kubernetes cluster.

  2. Configure your new cluster with the wizard. The default options are generally safe bets, but there are a few you might want to look at depending on your requirements and budget:

    • Cluster present configuration: You can choose a production-ready deployment, a dev/test deployment, and others.
    • Region: The data center where AKS will deploy your cluster—pick a region geographically close to your primary customers and/or your organization.
    • AKS pricing tier: The Free tier works great with less than 10 nodes, and you can always upgrade to the production tier after deployment.
  3. Click Review + create and wait for Azure to validate your configuration. If you see a Validation failed. warning, check out the errors—they're likely related to quota limits. When it's ready, click Create. Grab a cup of coffee—deployment will take a while.

  4. When AKS completes the deployment, click Go to deployment, then Connect, which will show you options for connecting to your new cluster with kubectl. Follow the instructions to use the Cloud shell or Azure CLI, then double-check AKS has successfully deployed your cluster's underlying services:

    Loading…

Step 2: Install the ngrok Kubernetes Operator

We recommend installing the ngrok Kubernetes Ingress Controller before your end-user apps to separate the steps around infrastructure vs. app configuration.

  1. Create an ngrok static subdomain for ingress if you don't have one already. Navigate to the Domains section of the ngrok dashboard and click Create Domain or New Domain. This static subdomain will be your NGROK_DOMAIN for the remainder of this guide.

  2. Add the ngrok Helm repository if you haven't already.

    Loading…
  3. Set up the AUTHTOKEN and API_KEY exports, which allows Helm to install the Operator using your ngrok credentials. Find your AUTHTOKEN under Your Authtoken in the ngrok dashboard.

    To create a new API key, navigate to the API section of the ngrok dashboard, click the New API Key button, change the description or owner, and click the Add API Key button. Copy the API key token shown in the modal window before closing, as the ngrok dashboard will not show you the token again.

    Loading…
  4. Install the ngrok Kubernetes Operator with Helm under a new ngrok-ingress-controller namespace.

    Loading…
  5. Verify you have successfully installed the ngrok Kubernetes Operator and that pods are healthy.

    Loading…

Step 3: Deploy a demo microservices app

To showcase how this integration works, you'll deploy the AKS Store app, which uses a microservices architecture to connect frontend UI to API-like services, passing data to RabbitMQ and MongoDB in the backend. To showcase the features of AKS, you'll deploy this demo app directly in the Azure Portal.

tip

If you prefer the CLI, save the YAML below to a .yaml file on your local workstation and deploy with kubectl apply -f ....

  1. Click CreateApply a YAML.

  2. Copy and paste the YAML below into the editor.

    Loading…
  3. Click Add to deploy the demo app. To double-check services deployed successfully, click on Workloads in the Azure Portal and look for store-front, rabbitmq, product-service, and order-service in the default namespace. If you prefer the CLI, you can run kubectl get pods for the same information.

Step 4: Add ngrok-based ingress to your demo app

Next, you'll configure and deploy the ngrok Kubernetes Operator to expose your demo app to the public internet through the ngrok Cloud Edge.

  1. In the Azure Portal, click Create→Apply a YAML.

  2. Copy and paste the YAML below into the editor. This manifest defines how the ngrok Kubernetes Operator should route traffic arriving on NGROK_DOMAIN to the store-front service on port 80, which you deployed in the previous step.

    tip

    Make sure you edit line 9 of the YAML below, which contains the NGROK_DOMAIN variable, with the ngrok subdomain you created in the second step.

    Loading…
  3. Click Add to deploy the ingress configuration.

    You can check on the status of the ingress deployment in the Azure Portal at Services and ingressesIngresses. You should see the store-ingress name and your ngrok subdomain. If you need to edit your ingress configuration in the future, click on the ingress item and then the YAML tab.

  4. Navigate to your ngrok subdomain, e.g. https://NGROK_DOMAIN.ngrok.app, in your browser to see the demo app in action. Behind the scenes, ngrok's Cloud Edge routed your request into the ngrok Kubernetes Operator, which then passed it to the store-front service.

    The AKS Store demo app accessible from the public internet

Step 5: Add OAuth authentication to your demo app

Now that your demo app is publicly accessible through the ngrok Cloud Edge, you can quickly layer on additional capabilities, like authentication, without configuring and deploying complex infrastructure. Let's see how that works for restricting access to individual Google accounts or any Google account under a specific domain name.

  1. Apply a new YAML definition to your cluster with the YAML below, replacing YOUR_DOMAIN.TLD with the domain name you'd like to authenticate visitors against.

    Loading…
  2. Edit your ingress definition to connect your ngrok Kubernetes Operator with the NgrokModuleSet configuration you just deployed for OAuth.

    In the Azure Portal, click Services and ingressesIngresses, then store-ingress, then the YAML tab. Add the highlighted YAML below, then validate and save your changes.

    Loading…
  3. Reload your demo app in your browser to see a request to sign in via Google. If the account's domain name matches yours, they'll be given authorization to access your app—otherwise, they'll be redirected to an error page.

What's next?

You've now used the open source ngrok Kubernetes Operator to add public ingress to a demo app on a cluster managed in AKS without having to worry about complex Kubernetes networking configurations. Because ngrok abstracts ingress and middleware execution to its Cloud Edge, you can follow a similar process to route public traffic to your next production-ready app.

You can also extend the integration with additional route modules, like circuit breakers, compression, or edit headers before they are sent to your app. Additional deployment options include name-based virtual hosting, which lets you deploy and manage any number of Kubernetes clusters and apps in AKS, then create unique ngrok edge domains, like foo1.bar.com and foo2.bar.com, to direct traffic to the respective services.

Learn more about the ngrok Kubernetes Operator, or contribute to its ongoing development, by checking out the GitHub repository and the project-specific documentation.