Implementación desde un registro de contenedor privado en Kubernetes local mediante Azure Container Registry y AKS Arc
Se aplica a: Azure Local, versión 23H2
En este artículo se describe cómo implementar imágenes de contenedor desde un registro de contenedor privado mediante Azure Container Registry, que puede ejecutar en su propio centro de datos en implementaciones de AKS Arc. La implementación se realiza en el clúster de Kubernetes local hospedado por AKS. Azure Container Registry permite compilar, almacenar y administrar imágenes y artefactos de contenedor en un registro privado para todo tipo de implementaciones de contenedor.
En el artículo se describe cómo crear un registro de contenedor privado en Azure e insertar la imagen de contenedor en el registro de contenedor privado. Después, puede implementar desde el registro privado en el clúster de Kubernetes local hospedado en AKS Arc.
Para más información sobre Azure Container Registry, consulte la documentación de Azure Container Registry.
Requisitos previos
Compruebe que tiene los requisitos siguientes:
- Conocimientos básicos de los conceptos de Kubernetes.
- Un clúster de AKS que esté en funcionamiento.
- CLI de Azure instalada
- El entorno kubectl local configurado para que apunte al clúster de AKS.
Creación de un registro de contenedor privado en Azure
Para crear un registro de contenedor, comience con un grupo de recursos. Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure. Cree un grupo de recursos con el comando az group create
. En el ejemplo siguiente se crea un grupo de recursos en la región eastus :
az group create --name <RESOURCE_GROUP_NAME> --location eastus
Cree una instancia de Container Registry con el comando az acr create y proporcione su propio nombre del registro. El nombre del registro debe ser único dentro de Azure y contener entre 5 y 50 caracteres alfanuméricos. En el resto de este artículo, <acrName>
se usa como marcador de posición para el nombre del registro de contenedor, pero puede proporcionar su propio nombre de registro único. La SKU básica es un punto de entrada optimizado para costos con fines de desarrollo que proporciona un equilibrio de almacenamiento y rendimiento:
az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic
Después de crear el registro de contenedor, use el comando siguiente para crear una entidad de servicio, por lo que puede acceder al registro de contenedor desde Kubernetes:
az ad sp create-for-rbac /
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RG_NAME>/providers/Microsoft.ContainerRegistry/registries/<REGISTRY_NAME> /
--role Contributor /
--name <SERVICE_PRINCIPAL_NAME>
Azure Container Registry admite tres roles de acceso. El rol Colaborador se usa con más frecuencia por los desarrolladores de aplicaciones. Sin embargo, en escenarios reales, es posible que tenga que crear varias entidades de servicio en función del tipo de acceso necesario:
- Colaborador: este rol ofrece acceso de inserción y extracción para el repositorio.
- Lector: este rol solo permite el acceso de extracción para el repositorio.
- Propietario: este rol le permite asignar roles a otros usuarios, además del acceso de inserción y extracción para el repositorio.
El comando anterior debe generar una salida similar al texto siguiente:
{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
Una vez creada correctamente la entidad de servicio, copie el appId y la contraseña en una ubicación segura para usarlo más adelante en la implementación.
Para más información sobre cómo trabajar con entidades de servicio y Azure Container Registry, consulte Autenticación de Azure Container Registry con entidades de servicio.
Inicio de sesión en el registro de contenedor privado
Para usar la instancia de Container Registry, primero debe iniciar sesión. Puede usar la CLI de Azure o la CLI de Docker para iniciar sesión.
Opción 1: Inicio de sesión desde la CLI de Azure
Use el comando az acr sign in y proporcione el nombre único asignado al registro de contenedor en el paso anterior:
az acr login --name <REGISTRY_NAME>
Opción 2: Inicio de sesión desde la CLI de Docker
Para usar la CLI de Docker para acceder al registro de contenedor, escriba el siguiente comando en un terminal de Bash o PowerShell:
docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>
En cualquiera de las dos opciones, el comando debe devolver un mensaje de inicio de sesión correcto cuando se complete.
Inserción de una imagen en el registro de contenedor
Una vez que haya iniciado sesión correctamente, puede empezar a insertar la imagen en Container Registry. En primer lugar, ejecute el comando docker images para ver la lista de imágenes en el equipo local:
REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/azure-functions/dotnet 3.0 9f8ad1bdee67 5 months ago
540MB
poemfinder-app latest 2d9bef425603 6 months ago 208MB
Para empezar, etiquete la imagen mediante el comando docker y, a continuación, use docker tag
push
para insertarla en el registro de contenedor:
docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Compruebe que la imagen se ha etiquetado correctamente mediante la ejecución del comando docker images de nuevo. Después de confirmarlo, ejecute docker push
para insertar en el registro de contenedor, como se indica a continuación:
docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Para confirmar que la imagen se insertó correctamente en el registro de contenedor, ejecute el siguiente comando:
az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table
Implementación de una imagen desde el registro de contenedor en AKS
Para implementar la imagen de contenedor desde el registro de contenedor en el clúster de Kubernetes, cree secretos de Kubernetes para almacenar las credenciales del registro. Kubernetes usa un secreto de extracción de imágenes para almacenar la información necesaria para autenticarse en el registro. Para crear el secreto de extracción para un registro de contenedor, proporcione el identificador de la entidad de servicio, la contraseña y la dirección URL del Registro:
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>
En la tabla siguiente se describen los parámetros de entrada:
Valor | Descripción |
---|---|
secret-name |
Nombre de la imagen extrae el secreto; por ejemplo, acr-secret . |
namespace |
Espacio de nombres de Kubernetes en el que se va a colocar el secreto. Solo es necesario si desea colocar el secreto en un espacio de nombres distinto del espacio de nombres predeterminado. |
<REGISTRY_NAME> |
Nombre del registro de contenedor. Por ejemplo, myregistry . --docker-server es el nombre completo del servidor de inicio de sesión del Registro. |
appId |
Identificador de la entidad de servicio que Kubernetes usa para acceder al registro. |
password |
Contraseña de entidad de servicio. |
Una vez creado el secreto de extracción de imágenes, puede usarlo para crear pods e implementaciones de Kubernetes. Proporcione el nombre del secreto en imagePullSecrets
en el archivo de implementación, como se muestra en el ejemplo siguiente:
apiVersion: v1
kind: Pod
metadata:
name: poemfinder-app
namespace: mydemoapps
spec:
containers:
- name: poemfinder-app
image: <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: acr-secret
En este ejemplo, poemfinder-app:v1.0
es el nombre de la imagen que se va a extraer del registro de contenedor y acr-secret
es el nombre del secreto de extracción que creó para acceder al registro. Al implementar el pod, Kubernetes extrae automáticamente la imagen del registro si la imagen aún no está presente en el clúster.
Puede guardar la configuración de pod anterior en un archivo como pod-example.yaml y, a continuación, implementarla en Kubernetes, como se indica a continuación:
kubectl create -f pod-example.yaml
Para confirmar que el pod se creó correctamente con la imagen de contenedor del registro de contenedor, ejecute kubectl describe pod <POD_NAME>, que debe mostrar la imagen de contenedor usada para crear el pod.