4 min read

Run Azure App Service on GCP through Azure Arc

Run Azure App Service on GCP through Azure Arc

In a previous article I went in detail on how you can get started running your own Azure Arc setup and connect your cross-cloud and on-premises systems and Kubernetes clusters. In this article I would like to go in more detail how you are now able to utilize the previously created infrastructure and run Azure App Service on it! Bringing the ecosystem of Azure towards your multi-cloud environment.


I'd love to explain the above through a graphic as illustrated below. Here you have several components:

  • Multi-Cloud / Hybrid Cloud environment (illustrated as "Hosting" below)
  • Azure Application Services with Azure Arc (the top block)

Making it clear that Arc is there to enable us to run Azure Application Services across our cloud environments, no matter the infrastructure layer beneath it.


After the above, let's actually do this ourselves! To deploy an Azure Service we need to have an Azure Arc enabled cluster or server available and execte the following steps:

  1. Enable an Extension (e.g. App Service)
  2. Create a Custom Location (our own "cloud" location!)
  3. Create an App Service

Enable an Extension (App Service)

First we start by enabling an extension on the target cluster. For this we open up the cluster in Azure Arc, navigate to "Extensions" and find the extension we want to install. In our case we will install the App Service extension.

Now we get to the details pane, where a public IP is required. This is the static IP created when you create the Kubernetes Cluster, to find this in GCP we can simply navigate to our GKE instance and locate the public IP endpoint.

All details are now entered and a script will be generated for us. Execute this by copying this to a PowerShell instance of your choice that has access to the cluster and AZ CLI.

Create a Custom Location

Since the Extension is now enabled, we are able to create a custom location. Navigate to Azure Arc "Custom Locations" and click the "Add" button.

This will open up the interface to add a custom location. Just navigate through this, selecting the settings you require.

Once this has been created, we can verify that it has been created by navigating to a kubectl shell and checking the deployed pods. We will see a new namespace being created containing the resources.

App Service Creation

We are almost there! So far we created a App Service enabled Kubernetes cluster on GCP and added the GCP Kubernetes cluster as a target location for Azure App Service instances. Finally we need to deploy App Service on it!

Open Azure Arc and navigate towards "App Service" on the left, creating it in the previously created custom location with the default image.

Congratulations, App Service is now up and running on your own instance! To verify it, open up the GKE console again and verify that an extra pod is running.


As shown in this article, it is trivial to deploy your own Azure Services across your existing hardware! This opens up a lot of scenarios where customers can connect their existing infrastructure running across multiple clouds and easily managing it from an easy to understand portal! Personally, I am a big fan of this solution and cannot wait for it to expand and improve more. Some of my personal learnings:

  • Some errors exist and might be difficult to work with (e.g. I had a stamp issue as well as a Storage Class not existing, requiring some manual intervention - which can be automated). Tickets are being raised and the service is maturing more and more (it is still in preview!)
  • I would love to see more automation happening. Currently a lot of the commands have to be ran manually, but it is prone to making mistakes.

In any case, if you have existing infrastructure and want a good control plane, Azure Arc is definitely a promising service to check out!