Creación de un vínculo privado a una aplicación de contenedor de Azure con Azure Front Door (versión preliminar)
En este artículo, aprenderá a conectarse directamente desde Azure Front Door a Azure Container Apps mediante un vínculo privado en lugar de la red pública de Internet. En este tutorial, se crea un entorno de perfiles de carga de trabajo de Azure Container Apps, una Azure Front Door, y se conectan de forma segura a través de un vínculo privado. A continuación, verifique la conectividad entre su aplicación de contenedor y Azure Front Door.
Requisitos previos
Cuenta de Azure con una suscripción activa.
- Si no tiene ninguna, puede crear una gratis.
Esta característica solo está disponible con CLI de Azure. Para asegurarse de que ejecuta la versión más reciente de la CLI de Azure, ejecute el siguiente comando.
az upgrade
La versión más reciente de la extensión Azure Container Apps para la CLI de Azure. Para asegurarse de que ejecuta la versión más reciente, ejecute el siguiente comando.
az extension add --name containerapp --upgrade --allow-preview true
Nota:
A partir de mayo de 2024, las extensiones de la CLI de Azure ya no habilitan las características en versión preliminar de forma predeterminada. Para acceder a las características de la versión preliminar de Container Apps, instale la extensión Container Apps con
--allow-preview true
.Esta característica solo se admite para entornos de perfil de carga de trabajo.
Para obtener más información sobre los requisitos previos y la configuración, consulte Inicio rápido: Implemente su primera aplicación en contenedor con containerapp up.
Establecimiento de variables de entorno
Establezca las siguientes variables de entorno.
RESOURCE_GROUP="my-container-apps"
LOCATION="centralus"
ENVIRONMENT_NAME="my-environment"
CONTAINERAPP_NAME="my-container-app"
AFD_PROFILE="my-afd-profile"
AFD_ENDPOINT="my-afd-endpoint"
AFD_ORIGIN_GROUP="my-afd-origin-group"
AFD_ORIGIN="my-afd-origin"
AFD_ROUTE="my-afd-route"
Creación de un grupo de recursos de Azure
Cree un grupo de recursos para organizar los servicios relacionados con la implementación de la aplicación contenedora.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION
Creación de un entorno
Creación del entorno de Container Apps.
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Recupere el identificador de entorno. Se usa para configurar el entorno.
ENVIRONMENT_ID=$(az containerapp env show \ --resource-group $RESOURCE_GROUP \ --name $ENVIRONMENT_NAME \ --query "id" \ --output tsv)
Deshabilite el acceso a la red pública para el entorno.
az containerapp env update \ --id $ENVIRONMENT_ID \ --public-network-access Disabled
Implementación de una aplicación de contenedor
Ejecute el siguiente comando para implementar una aplicación de contenedor en su entorno.
az containerapp up \ --name $CONTAINERAPP_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --environment $ENVIRONMENT_NAME \ --image mcr.microsoft.com/k8se/quickstart:latest \ --target-port 80 \ --ingress external \ --query properties.configuration.ingress.fqdn
Recupere el punto de conexión de la aplicación contenedora.
ACA_ENDPOINT=$(az containerapp show \ --name $CONTAINERAPP_NAME \ --resource-group $RESOURCE_GROUP \ --query properties.configuration.ingress.fqdn \ --output tsv)
Si va al punto de conexión de la aplicación contenedora, recibirá
ERR_CONNECTION_CLOSED
porque el entorno de la aplicación contenedora tiene deshabilitado el acceso público. En su lugar, se usa un punto de conexión de AFD para acceder a la aplicación de contenedor.
Creación de un perfil de Azure Front Door
Cree un perfil de AFD. El vínculo privado no se admite para orígenes en un perfil AFD con SKU Standard_AzureFrontDoor
.
az afd profile create \
--profile-name $AFD_PROFILE \
--resource-group $RESOURCE_GROUP \
--sku Premium_AzureFrontDoor
Creación de un punto de conexión de Azure Front Door
Agregue un punto de conexión al perfil de AFD.
az afd endpoint create \
--resource-group $RESOURCE_GROUP \
--endpoint-name $AFD_ENDPOINT \
--profile-name $AFD_PROFILE \
--enabled-state Enabled
Creación de un grupo de origen de Azure Front Door
Cree un grupo de origen de AFD.
az afd origin-group create \
--resource-group $RESOURCE_GROUP \
--origin-group-name $AFD_ORIGIN_GROUP \
--profile-name $AFD_PROFILE \
--probe-request-type GET \
--probe-protocol Http \
--probe-interval-in-seconds 60 \
--probe-path / \
--sample-size 4 \
--successful-samples-required 3 \
--additional-latency-in-milliseconds 50
Cree un origen de Azure Front Door
Agregue un origen de AFD al grupo de origen.
az afd origin create \
--resource-group $RESOURCE_GROUP \
--origin-group-name $AFD_ORIGIN_GROUP \
--origin-name $AFD_ORIGIN \
--profile-name $AFD_PROFILE \
--host-name $ACA_ENDPOINT \
--origin-host-header $ACA_ENDPOINT \
--priority 1 \
--weight 500 \
--enable-private-link true \
--private-link-location $LOCATION \
--private-link-request-message "AFD Private Link Request" \
--private-link-resource $ENVIRONMENT_ID \
--private-link-sub-resource-type managedEnvironments
Enumeración de conexiones de punto de conexión privado
Ejecute el siguiente comando para enumerar las conexiones de punto de conexión privado para su entorno.
az network private-endpoint-connection list \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --type Microsoft.App/managedEnvironments
Registre el id. del recurso de conexión del punto de conexión privado de la respuesta. La conexión del punto de conexión privado tiene un
properties.privateLinkServiceConnectionState.description
valor deAFD Private Link Request
. El id. de recurso de conexión del punto de conexión privado es similar al siguiente./subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.App/managedEnvironments/my-environment/privateEndpointConnections/<PRIVATE_ENDPOINT_CONNECTION_ID>
No confunda esto con el id. de punto de conexión privado, que es similar al siguiente.
/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/eafd-Prod-centralus/providers/Microsoft.Network/privateEndpoints/<PRIVATE_ENDPOINT_ID>
Aprobación de la conexión del punto de conexión privado
Ejecute el siguiente comando para aprobar la conexión. Reemplace <MARCADOR DE POSICIÓN> por el id. de recurso de conexión de punto de conexión privado que registró en la sección anterior.
az network private-endpoint-connection approve --id <PRIVATE_ENDPOINT_CONNECTION_RESOURCE_ID>
Agregar una ruta
Ejecute el siguiente comando para asignar el punto de conexión que creó anteriormente al grupo de origen. Los puntos de conexión privados en Azure Container Apps solo admiten el tráfico HTTP entrante. No se admite el tráfico TCP.
az afd route create \
--resource-group $RESOURCE_GROUP \
--profile-name $AFD_PROFILE \
--endpoint-name $AFD_ENDPOINT \
--forwarding-protocol MatchRequest \
--route-name $AFD_ROUTE \
--https-redirect Enabled \
--origin-group $AFD_ORIGIN_GROUP \
--supported-protocols Http Https \
--link-to-default-domain Enabled
Acceso a la aplicación de contenedor desde Azure Front Door
Recupere el nombre de host del punto de conexión de AFD.
az afd endpoint show \ --resource-group $RESOURCE_GROUP \ --profile-name $AFD_PROFILE \ --endpoint-name $AFD_ENDPOINT \ --query hostName \ --output tsv
El nombre de host es similar al siguiente ejemplo.
my-afd-endpoint.<HASH>.b01.azurefd.net
Vaya al nombre de host. Verá la salida de la imagen de la aplicación de contenedor de inicio rápido.
El perfil de AFD tarda unos minutos en implementarse globalmente, por lo que si no ve el resultado esperado al principio, espere unos minutos y luego actualice.
Limpieza de recursos
Si no va a seguir usando esta aplicación, puede quitar el my-container-apps del grupo de recursos. Esto elimina la instancia de Azure Container Apps y todos los servicios asociados. También elimina el grupo de recursos que el servicio Container Apps ha creado automáticamente y que contiene los componentes de red personalizados.
Precaución
El comando siguiente elimina el grupo de recursos especificado y todos los recursos que contiene. Si los recursos que están fuera del ámbito de esta guía existen en el grupo de recursos especificado, también se eliminarán.
az group delete --name $RESOURCE_GROUP