Otro de los servicios, a día de hoy en preview, que se pueden desplegar en cualquier sitio gracias a Azure Arc es el gateway de API Management. Por si no lo sabías, la ventaja de ello es que tus aplicaciones no necesitan ir hasta Azure para consumir APIs que posiblemente no estén ni siquiera en esta nube sino que, por motivos varios, estén en on-prem o incluso en otras nubes, pero aún así quieras seguir disfrutando de la características que este servicio te da, como la implementación de políticas, obtención de métricas, etcétera. Hoy quiero contarte cómo configurar esta pieza donde quieras gracias a Azure Arc.
Crear un clúster de Kubernetes en AKS
Para este ejemplo voy a utilizar un clúster de Kubernetes en AKS pero, como ya te mostré en el ejemplo con EKS, puedes montarlo donde quieras:
# Variables
RESOURCE_GROUP="k8s-for-apim"
LOCATION="westeurope"
AKS_NAME="aks-apim"
# Create a resource group
az group create --name $RESOURCE_GROUP --location $LOCATION
# Create an AKS cluster
az aks create \
--resource-group $RESOURCE_GROUP \
--name $AKS_NAME \
--generate-ssh-keys \
--location $LOCATION
# Get credentials
az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
Si ya tienes uno, puedes saltarte este paso.
Configurar el clúster con Azure Arc
Al igual que en los artículos anteriores, lo siguiente es conectar este clúster con Azure Arc, para poder gestionar las extensiones que te permitirán desplegar otros servicios de Azure en él, como en el caso de App Service, Azure Functions y Logic Apps que ya te mostré.
# Arc resource group
RESOURCE_GROUP_ARC="arc-resources"
az group create --name $RESOURCE_GROUP_ARC --location $LOCATION
# Connect the cluster to Azure Arc
az connectedk8s connect \
--resource-group $RESOURCE_GROUP_ARC \
--name $AKS_NAME \
--location $LOCATION
# Validate connection
az connectedk8s show --resource-group $RESOURCE_GROUP_ARC --name $AKS_NAME --query "provisioningState"
Ahora ya tienes todo listo para desplegar tu gateway de API Management en un clúster de Kubernetes gestionado por Azure Arc.
Configurar extensión API Management Gateway
El último paso es configurar la extensión que nos permite desplegar esta pieza en tu clúster:
APIM_EXT_NAME="apim-gateway-extension"
NAMESPACE="apim-resources"
GW_KEY="GatewayKey <TOKEN>"
GW_CONFIG_URL="<CONFIGURATION_URL>"
az k8s-extension create \
--cluster-type connectedClusters \
--cluster-name $AKS_NAME \
--resource-group $RESOURCE_GROUP_ARC \
--name $APIM_EXT_NAME \
--extension-type Microsoft.ApiManagement.Gateway \
--scope namespace \
--target-namespace $NAMESPACE \
--configuration-settings gateway.endpoint=$GW_CONFIG_URL \
--configuration-protected-settings gateway.authKey=$GW_KEY \
--configuration-settings service.type='LoadBalancer' --release-train preview
Como ves, además de darle un nombre a la extensión y elegir un namespace para ubicar los recursos de esta, necesitamos dos datos importantes: un token y una URL de configuración. Para conseguir estas necesitas ir a tu recurso de API Management y crear un nuevo gateway. Haz clic en la sección Gateways y pulsa sobre el botón Add. Elige un nombre y una ubicación y haz clic el botón de la parte inferior para confirmar el nuevo gateway. Una vez hecho esto deberías de tener algo como lo siguiente:

Como ves, por ahora no tienes ningún nodo asociado, así que vamos a arreglarlo 😃 Haz clic sobre él y, en el apartado Deployment, puedes ver tanto el token, que sería el valor para GW_KEY (incluyendo la palabra GatewayKey, ya que de lo contrario no funcionará), y Configuration URL que sería el valor para GW_CONFIG_URL:

Copialos y reemplazalos antes de lanzar el comando anterior. Una vez que el proceso finalice podrás comprobar su estado a través del siguiente comando:
#Verify the deployment
az k8s-extension show --cluster-type connectedClusters --cluster-name $AKS_NAME --resource-group $RESOURCE_GROUP_ARC --name $APIM_EXT_NAME
Y también verás en el propio gateway en API Management que ya tiene un nodo configurado correctamente:

¡Saludos!