Inicio rápido: Uso de Azure App Configuration en Azure Kubernetes Service
En Kubernetes, configure pods para consumir la configuración de ConfigMaps. Permite desacoplar la configuración de las imágenes de contenedor, lo que hace que las aplicaciones sean fácilmente portables. El proveedor de Kubernetes de Azure App Configuration puede construir ConfigMaps y secretos a partir de sus valores de clave y referencias de Key Vault en Azure App Configuration. Permite aprovechar las ventajas de Azure App Configuration para centralizar el almacenamiento y la administración de la configuración sin que haya cambios en el código de la aplicación.
ConfigMap se puede consumir como variable de entorno o como un archivo montado. En este inicio rápido, incorporará el proveedor de Kubernetes de Azure App Configuration en una carga de trabajo de Azure Kubernetes Service en la que se ejecuta una aplicación ASP.NET Core sencilla que consume la configuración de un archivo JSON.
Sugerencia
Consulte las opciones para las cargas de trabajo hospedadas en Kubernetes para acceder a Azure App Configuration.
Nota:
Este inicio rápido le guiará a través de la configuración del proveedor de Kubernetes de Azure App Configuration. Opcionalmente, puede usar los siguientes comandos Azure Developer CLI con la plantilla azure-appconfig-aks
para aprovisionar recursos de Azure e implementar la aplicación de ejemplo que usa este inicio rápido. Para más información sobre esta plantilla, visite el repositorio de azure-appconfig-aks en GitHub.
azd init -t azure-appconfig-aks
azd up
Requisitos previos
- Un almacén de App Configuration. Crear un almacén.
- Una instancia de Azure Container Registry. Cree un registro.
- Un clúster de Azure Kubernetes Service (AKS) al que se concede permiso para extraer imágenes de Azure Container Registry. Creación de un clúster de AKS.
- SDK de .NET 6.0 o versiones posteriores.
- CLI de Azure
- Docker Desktop
- helm
- kubectl
Creación de una aplicación que se ejecuta en AKS
En esta sección, creará una aplicación web de ASP.NET Core sencilla que se ejecuta en Azure Kubernetes Service (AKS). La aplicación lee la configuración de un archivo JSON local. En la sección siguiente, lo habilitará para consumir la configuración desde Azure App Configuration sin cambiar el código de la aplicación. Si ya tiene una aplicación de AKS que lea la configuración de un archivo, puede omitir esta sección e ir a Uso del proveedor de Kubernetes de App Configuration. Solo tiene que asegurarse de que el archivo de configuración generado por el proveedor coincide con la ruta de acceso del archivo usada por la aplicación.
Crear una aplicación
Use la interfaz de la línea de comandos (CLI) de .NET y ejecute el siguiente comando para crear un proyecto de aplicación web ASP.NET Core en un nuevo directorio MyWebApp:
dotnet new webapp --output MyWebApp --framework net6.0
Abra Index.cshtml en el directorio Pages y actualice el contenido con el código siguiente.
@page @model IndexModel @using Microsoft.Extensions.Configuration @inject IConfiguration Configuration @{ ViewData["Title"] = "Home page"; } <style> h1 { color: @Configuration["Settings:FontColor"]; } </style> <div class="text-center"> <h1>@Configuration["Settings:Message"]</h1> </div>
Cree un directorio de configuración en la raíz del proyecto y agregue un archivo mysettings.json al mismo con el siguiente contenido.
{ "Settings": { "FontColor": "Black", "Message": "Message from the local configuration" } }
Abra program.cs y agregue el archivo JSON al origen de configuración, para lo que debe llamar al método
AddJsonFile
.// Existing code in Program.cs // ... ... // Add a JSON configuration source builder.Configuration.AddJsonFile("config/mysettings.json", reloadOnChange: true, optional: false); var app = builder.Build(); // The rest of existing code in program.cs // ... ...
Incluir la aplicación en contenedores
Ejecute el comando dotnet publish para compilar la aplicación en modo de versión y crear los recursos en el directorio publicado.
dotnet publish -c Release -o published
Cree un archivo denominado Dockerfile en la raíz del directorio de su proyecto, ábralo en un editor de texto y escriba el siguiente contenido. Un Dockerfile es un archivo de texto que no tiene una extensión y que se usa para crear una imagen de contenedor.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime WORKDIR /app COPY published/ ./ ENTRYPOINT ["dotnet", "MyWebApp.dll"]
Ejecute el siguiente comando para compilar una imagen de contenedor denominada aspnetapp.
docker build --tag aspnetapp .
Inserción de la imagen en Azure Container Registry
Ejecute el comando az acr login para iniciar sesión en el registro de contenedor. En el ejemplo siguiente se inicia sesión en un registro denominado myregistry. Reemplace el nombre del Registro por el suyo.
az acr login --name myregistry
El comando devuelve
Login Succeeded
una vez que el inicio de sesión es correcto.Use la etiqueta docker para crear una etiqueta myregistry.azurecr.io/aspnetapp:v1 para la imagen aspnetapp.
docker tag aspnetapp myregistry.azurecr.io/aspnetapp:v1
Sugerencia
Para revisar la lista de las etiquetas e imágenes de Docker existentes, ejecute
docker image ls
. En este escenario, debería ver al menos dos imágenes:aspnetapp
ymyregistry.azurecr.io/aspnetapp
.Use docker push para cargar la imagen en el registro de contenedor. Por ejemplo, el siguiente comando inserta la imagen en un repositorio denominado aspnetapp con la etiqueta v1 en el registro myregistry.
docker push myregistry.azurecr.io/aspnetapp:v1
Implementación de la aplicación
Cree un directorio de Implementación en el directorio raíz del proyecto.
Agregue un archivo deployment.yaml al directorio Implementación con el siguiente contenido para crear una implementación. Reemplace el valor de
template.spec.containers.image
por la imagen que creó en el paso anterior.apiVersion: apps/v1 kind: Deployment metadata: name: aspnetapp-demo labels: app: aspnetapp-demo spec: replicas: 1 selector: matchLabels: app: aspnetapp-demo template: metadata: labels: app: aspnetapp-demo spec: containers: - name: aspnetapp image: myregistry.azurecr.io/aspnetapp:v1 ports: - containerPort: 80
Agregue un archivo service.yaml al directorio Implementación con el siguiente contenido para crear un servicio LoadBalancer.
apiVersion: v1 kind: Service metadata: name: aspnetapp-demo-service spec: type: LoadBalancer ports: - port: 80 selector: app: aspnetapp-demo
Ejecute el siguiente comando para implementar la aplicación en el clúster de AKS.
kubectl create namespace appconfig-demo kubectl apply -f ./Deployment -n appconfig-demo
Ejecute el siguiente comando y obtenga la dirección IP externa expuesta por el servicio LoadBalancer.
kubectl get service aspnetapp-demo-service -n appconfig-demo
Abra una ventana del explorador y vaya a la dirección IP que obtuvo en el paso anterior. La página web tiene este aspecto:
Uso del proveedor de Kubernetes de App Configuration
Ahora que tiene una aplicación que se ejecuta en AKS, implementará el proveedor de Kubernetes de App Configuration en el clúster de AKS que se ejecuta como controlador de Kubernetes. El proveedor recupera datos del almacén de App Configuration y crea un ConfigMap, que se puede consumir como archivo JSON montado en un volumen de datos.
Configuración del almacén de Azure App Configuration
Agregue los siguientes pares clave-valor al almacén de App Configuration y deje Etiqueta y Tipo de contenido con sus valores predeterminados. Para obtener más información sobre cómo agregar pares clave-valor a un almacén mediante Azure Portal o la CLI, vaya a Creación de un par clave-valor.
Clave | Valor |
---|---|
Settings:FontColor | Verde |
Settings:Message | Hola desde Azure App Configuration |
Configuración del proveedor de Kubernetes de App Configuration
Para obtener las credenciales de acceso para su clúster de AKS, ejecute el siguiente comando. Reemplace el valor de los parámetros
name
yresource-group
por la instancia de AKS:az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
Instale el proveedor de Kubernetes de Azure App Configuration en el clúster de AKS mediante
helm
:helm install azureappconfiguration.kubernetesprovider \ oci://mcr.microsoft.com/azure-app-configuration/helmchart/kubernetes-provider \ --namespace azappconfig-system \ --create-namespace
Sugerencia
El proveedor de Kubernetes de App Configuration también está disponible como extensión de AKS. Esta integración permite una instalación y administración perfectas a través de la CLI de Azure, las plantillas de ARM o las plantillas de Bicep. El uso de la extensión de AKS facilita las actualizaciones automáticas de versiones secundarias o de parches, lo que garantiza que el sistema esté siempre actualizado. Para obtener instrucciones detalladas sobre la instalación, consulte la extensión Azure App Configuration para Azure Kubernetes Service.
Agregue un archivo appConfigurationProvider.yaml al directorio Implementación con el siguiente contenido para crear un recurso
AzureAppConfigurationProvider
.AzureAppConfigurationProvider
es un recurso personalizado que define los datos que se van a descargar desde un almacén de Azure App Configuration y crea un objeto ConfigMap.apiVersion: azconfig.io/v1 kind: AzureAppConfigurationProvider metadata: name: appconfigurationprovider-sample spec: endpoint: <your-app-configuration-store-endpoint> target: configMapName: configmap-created-by-appconfig-provider configMapData: type: json key: mysettings.json auth: workloadIdentity: serviceAccountName: <your-service-account-name>
Reemplace el valor del campo
endpoint
por el punto de conexión del almacén de Azure App Configuration. Continúe con el paso siguiente para actualizar la secciónauth
con la información de autenticación.Nota:
AzureAppConfigurationProvider
es un objeto de API declarativo. Define el estado deseado de ConfigMap creado a partir de los datos del almacén de App Configuration con el siguiente comportamiento:- ConfigMap no se creará si ya existe un ConfigMap con el mismo nombre en el mismo espacio de nombres.
- ConfigMap se restablecerá en función de los datos presentes en el almacén de App Configuration si se elimina o modifica por cualquier otro medio.
- ConfigMap se eliminará si se desinstala el proveedor de Kubernetes de App Configuration.
Siga las instrucciones para usar la identidad de carga de trabajo para autenticarse con el almacén de App Configuration. Actualice el archivo appConfigurationProvider.yaml reemplazando el campo
serviceAccountName
por el nombre de la cuenta de servicio que creó. Para obtener más información sobre otros métodos de autenticación, consulte los ejemplos de la sección Autenticación.Actualice el archivo deployment.yaml del directorio Implementación para usar ConfigMap
configmap-created-by-appconfig-provider
como volumen de datos montado. Es importante asegurarse de quevolumeMounts.mountPath
coincide con elWORKDIR
especificado en Dockerfile y el directorio de configuración creado antes.apiVersion: apps/v1 kind: Deployment metadata: name: aspnetapp-demo labels: app: aspnetapp-demo spec: replicas: 1 selector: matchLabels: app: aspnetapp-demo template: metadata: labels: app: aspnetapp-demo spec: containers: - name: aspnetapp image: myregistry.azurecr.io/aspnetapp:v1 ports: - containerPort: 80 volumeMounts: - name: config-volume mountPath: /app/config volumes: - name: config-volume configMap: name: configmap-created-by-appconfig-provider
Ejecute el siguiente comando para implementar los cambios. Reemplace el espacio de nombres si usa la aplicación de AKS existente.
kubectl apply -f ./Deployment -n appconfig-demo
Actualice el explorador. La página muestra el contenido actualizado.
Solución de problemas
Si no ve que la aplicación recoja los datos del almacén de App Configuration, ejecute el siguiente comando para validar que ConfigMap se crea correctamente.
kubectl get configmap configmap-created-by-appconfig-provider -n appconfig-demo
Si configMap no se crea, ejecute el siguiente comando para obtener el estado de recuperación de datos.
kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml
Si el proveedor de Kubernetes de Azure App Configuration recuperó datos del almacén de App Configuration correctamente, la propiedad phase
de la sección de estado de la salida debe ser COMPLETE
, como se muestra en el ejemplo siguiente.
$ kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml
apiVersion: azconfig.io/v1
kind: AzureAppConfigurationProvider
... ... ...
status:
lastReconcileTime: "2023-04-06T06:17:06Z"
lastSyncTime: "2023-04-06T06:17:06Z"
message: Complete sync settings to ConfigMap or Secret
phase: COMPLETE
Si la fase no es COMPLETE
, los datos no se descargan del almacén de App Configuration correctamente. Ejecute el siguiente comando para mostrar los registros del proveedor de Kubernetes de Azure App Configuration.
kubectl logs deployment/az-appconfig-k8s-provider -n azappconfig-system
Uso de registros para solución de problemas adicional. Consulte la sección de preguntas más frecuentes para conocer los problemas comunes.
Preguntas más frecuentes
¿Por qué no se generan ConfigMap o Secret?
Puede seguir los pasos que se indican en la guía para la solución de problemas, con el fin de recopilar registros para obtener información detallada sobre los errores. Estas son algunas de las causas comunes.
- RESPUESTA 403: 403 Prohibido: la identidad configurada carece de los permisos necesarios para acceder al almacén de App Configuration. Consulte la sección Autenticación para ver ejemplos que coincidan con la identidad que usa.
- Se encuentra una referencia de Key Vault en App Configuration, pero "spec.secret" no estaba configurado: una o varias referencias de Key Vault se incluyen en los valores de clave seleccionados, pero no se proporciona la información de autenticación de las instancias de Key Vault. Para mantener la integridad de la configuración, no se carga toda la configuración. Configure la sección
spec.secret
para proporcionar la información de autenticación necesaria. Para más información y ejemplos, consulte Referencia de Key Vault.
¿Por qué el ConfigMap generado no contiene los datos esperados?
Asegúrese de especificar los selectores de valor de clave correctos para que coincidan con los datos esperados. Si no se especifica ningún selector, todos los valores de clave sin una etiqueta se descargarán desde el almacén de App Configuration. Cuando use un filtro clave, compruebe que coincide con el prefijo de los valores de clave esperados. Si los valores de clave tienen etiquetas, asegúrese de especificar el filtro de etiqueta en los selectores. Para obtener más ejemplos, consulte la documentación de la selección de valores de clave.
¿Cómo puedo personalizar la instalación del proveedor de Kubernetes de Azure App Configuration?
Para personalizar la instalación debe especificar valores adicionales de Helm al instalar el proveedor de Kubernetes de Azure App Configuration. Por ejemplo, puede establecer el nivel de registro, configurar el proveedor para que se ejecute en un nodo concreto o deshabilitar la identidad de la carga de trabajo. Para más información, consulte la guía de instalación.
¿Por qué no puedo autenticarme con Azure App Configuration mediante la identidad de carga de trabajo después de actualizar el proveedor a la versión 2.0.0?
A partir de la versión 2.0.0, se requiere una cuenta de servicio proporcionada por el usuario para autenticarse con Azure App Configuration mediante la identidad de carga de trabajo. Este cambio mejora la seguridad mediante el aislamiento del espacio de nombres. Anteriormente, se usaba una cuenta de servicio del proveedor de Kubernetes para todos los espacios de nombres. Para obtener instrucciones actualizadas, consulte la documentación sobre el uso de la identidad de carga de trabajo. Si necesita tiempo para migrar a la versión 2.0.0, puede establecer temporalmente workloadIdentity.globalServiceAccountEnabled=true
durante la instalación del proveedor. Tenga en cuenta que la compatibilidad con el uso de la cuenta de servicio del proveedor quedará en desuso en una futura versión.
Limpieza de recursos
Desinstale el proveedor de Kubernetes de App Configuration del clúster de AKS si desea mantener el clúster de AKS.
helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system
Si no quiere seguir usando los recursos que se han creado en este artículo, elimine el grupo de recursos que creó aquí para evitar cargos.
Importante
La eliminación de un grupo de recursos es irreversible. El grupo de recursos y todos los recursos que contiene se eliminan permanentemente. Asegúrese de que no elimina por accidente el grupo de recursos o los recursos equivocados. Si creó los recursos para este artículo en un grupo de recursos que contenga los recursos que desee conservar, elimine cada recurso de forma individual desde su panel respectivo, en lugar de eliminar el grupo de recursos.
- Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
- En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
- En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
- Seleccione Eliminar grupo de recursos.
- Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.
Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.
Nota:
Si usa la CLI para desarrolladores de Azure para configurar los recursos, puede ejecutar el comando azd down
para eliminar todos los recursos creados por la plantilla azure-appconfig-aks
.
Pasos siguientes
En esta guía de inicio rápido:
- Creó una aplicación que se ejecuta en Azure Kubernetes Service (AKS).
- Ha conectado el clúster de AKS al almacén de App Configuration mediante el proveedor de Kubernetes de App Configuration.
- Ha creado un objeto ConfigMap con datos del almacén de App Configuration.
- Ha ejecutado la aplicación con la configuración del almacén de App Configuration sin cambiar el código de la aplicación.
Para aprender a actualizar las cargas de trabajo de AKS para poner al día dinámicamente la configuración, continúe con el siguiente tutorial.
Para más información sobre el proveedor de Kubernetes de Azure App Configuration, consulte Referencia del proveedor de Kubernetes de Azure App Configuration.