Implementación desde un registro de contenedor privado en Kubernetes local mediante Azure Container Registry
Se aplica a: AKS en Azure Local 22H2, AKS en Windows Server
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 AKS habilitado por las implementaciones de Azure 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 habilitado por Arc.
Para más información sobre Container Registry en Azure, 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 local
kubectl
configurado para que apunte al clúster de AKS. Puede usar el comando de PowerShell Get-AksHciCredential para configurar el clúster para el acceso mediantekubectl
.
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 de PowerShell. 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>
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 y appId
password
en una ubicación segura para usarla más adelante en la implementación.
Para más información sobre cómo trabajar con entidades de servicio y 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: Iniciar 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: Iniciar 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>
Con cualquiera de las dos opciones, el comando debe devolver un mensaje de "inicio de sesión correcto" una vez completado.
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 el registro de contenedor. En primer lugar, ejecute el docker images
comando 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 docker tag
comando y después úsela docker 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 ejecutando el docker images
comando de nuevo. Después de confirmarlo, ejecute docker push
para insertar en el registro de contenedor, como se muestra 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>
donde:
Value | Descripción |
---|---|
secret-name |
Nombre de la imagen extrae el secreto, por ejemplo, acr-secret . |
namespace |
Espacio de nombres de Kubernetes en el que 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.
Pasos siguientes
En este artículo, ha aprendido a implementar una imagen de contenedor desde Azure Container Registry en AKS Arc. A continuación, puede: