El complemento sin credenciales automatiza la autenticación para extraer imágenes y elimina la necesidad de configurar imagePullSecrets de forma repetida. En este tema se describe cómo instalarlo, configurarlo y utilizarlo, junto con notas importantes sobre su uso.
Funcionamiento
Cuando utiliza Container Registry (ACR) como origen de imágenes sin habilitar la extracción anónima, su clúster ACK debe proporcionar un nombre de usuario y una contraseña para autenticar cada extracción. La solución habitual consiste en almacenar estas credenciales en un Secret, pero este enfoque presenta varios inconvenientes:
Los Secrets son texto plano codificado en Base64, lo que representa un riesgo de seguridad si quedan expuestos.
Debe especificar manualmente
imagePullSecretspara cada carga de trabajo.Los Secrets no se pueden compartir entre namespaces.
El complemento sin credenciales funciona de la siguiente manera:
El complemento obtiene credenciales temporales de la instancia de ACR.
El complemento guarda las credenciales temporales en un Secret.
El complemento asocia el Secret con los ServiceAccounts especificados en su configuración.
Las cargas de trabajo que usan estos ServiceAccounts pueden extraer imágenes automáticamente con las credenciales temporales almacenadas en el Secret.
El complemento sin credenciales puede gestionar ServiceAccounts en varios namespaces y actualizar periódicamente las credenciales temporales. Esto reduce los riesgos de seguridad y elimina la necesidad de agregar manualmente imagePullSecrets a sus cargas de trabajo. El uso del complemento sin credenciales es gratuito.
Comparación de complementos
ACK ofrece el complemento aliyun-acr-credential-helper en dos ediciones: administrada y autoadministrada. Solo puede instalar una edición a la vez. A continuación se comparan ambas ediciones.
|
Elemento |
aliyun-acr-credential-helper (administrado) |
aliyun-acr-credential-helper (autoadministrado) |
|
Versiones de clúster compatibles |
Versión 1.22 o posterior de clústeres administrados de ACK, clústeres serverless de ACK o clústeres ACK Edge |
Versión 1.20 o posterior de clústeres administrados de ACK o clústeres dedicados de ACK |
|
Funciones |
|
|
Para actualizar un clúster, consulte Manually upgrade a cluster .
Requisitos previos
Su clúster ejecuta una versión compatible con el complemento sin credenciales. Para obtener más información, consulte la tabla anterior.
-
Cuenta con una instancia de ACR Enterprise Edition.
ImportanteEl complemento sin credenciales solo admite instancias de ACR Enterprise Edition e instancias de ACR Personal Edition creadas el 8 de septiembre de 2024 o antes. Si no puede usar el complemento sin credenciales, consulte How do I use imagePullSecrets?.
Se otorgaron permisos al rol de RAM que usa el complemento sin credenciales. Para obtener más información, consulte Otorgar permisos.
-
Se estableció conectividad de red entre la instancia de ACR Enterprise Edition y el clúster ACK.
Usar el complemento sin credenciales administrado
Paso 1: Instalar el complemento
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Add-ons.
En la página Add-ons, haga clic en la pestaña Security, busque la tarjeta aliyun-acr-credential-helper (managed) y luego haga clic en Install.
-
En la página Install add-on aliyun-acr-credential-helper, revise la configuración de AcrInstanceInfo y las demás opciones. AcrInstanceInfo contiene los ajustes de cada instancia de ACR asociada al complemento. Las demás opciones corresponden a la configuración del complemento. Si no necesita cambiar los namespaces ni los ServiceAccounts que supervisa el complemento, mantenga la configuración predeterminada.
Después de instalar el complemento, puede modificar su configuración haciendo clic en Configurations en la tarjeta aliyun-acr-credential-helper (managed), ubicada en la página Add-ons .
Configuración de asociación de instancias de ACR:
AcrInstanceInfo
Descripción
InstanceId
ID de la instancia de ACR. Puede obtenerlo desde la consola de Container Registry.
ImportanteDeje este campo vacío para las instancias de ACR Personal Edition. Este campo es obligatorio para las instancias de ACR Enterprise Edition.
regionId
ID de la región donde se despliega la instancia de ACR. Puede obtenerlo desde la consola de Container Registry.
ImportanteEste parámetro es obligatorio para extraer imágenes entre regiones.
domains
Nombres de dominio que utiliza el complemento sin credenciales para acceder a la instancia de ACR. De forma predeterminada, incluye todos los nombres de dominio (internet y VPC) de la instancia de ACR especificada. Para indicar varios nombres de dominio, sepárelos con comas (,).
Configuración para la extracción de imágenes entre cuentas
Esta configuración aplica a la extracción de imágenes entre cuentas. Si no necesita esta función, deje los campos vacíos.
assumeRoleARN
No se requiere configuración para las extracciones dentro de la misma cuenta. Para las extracciones entre cuentas, consulte Pull images across accounts.
expireDuration
rrsaRoleARN
rrsaOIDCProviderRoleARN
Paso 2: Extraer una imagen
Después de instalar y configurar el complemento sin credenciales, especifique un ServiceAccount asociado al complemento cuando cree una carga de trabajo. Esto habilita la extracción de imágenes sin credenciales.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
serviceAccountName: my-service-account # Specify a ServiceAccount that is associated with the credential-free add-on.
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Specify the ACR image address.
ports:
- containerPort: 80
Usar el complemento sin credenciales autoadministrado
Paso 1: Instalar el complemento
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Add-ons.
En la página Add-ons, haga clic en la pestaña Security, busque la tarjeta aliyun-acr-credential-helper y luego haga clic en Install.
-
En la página Parameters, seleccione un modo de permiso en la lista desplegable tokenMode y haga clic en OK. Después de instalar el complemento, debe configurarlo antes de poder extraer imágenes. Para obtener más información, consulte Step 2: Update the add-on configuration (add an ACR instance).
tokenMode
Descripción
auto
(Recomendado) El complemento detecta la fecha de creación del clúster y elige automáticamente un modo de permiso. Los clústeres creados antes del 3 de abril de 2023 usan el modo workerRole. Los clústeres creados el 3 de abril de 2023 o después usan el modo managedRole.
ImportanteLas versiones de aliyun-acr-credential-helper publicadas el 3 de abril de 2023 o después incluyen un parámetro que le permite personalizar el rol de RAM del que depende el complemento. Para obtener más información, consulte [Product Change] Announcement on changing the permissions required by the aliyun-acr-credential-helper add-on.
managedRole
El complemento usa el rol AliyunCSManagedAcrRole autorizado en Prerequisites para obtener permisos.
workerRole
El complemento usa el rol de RAM de worker del clúster para obtener permisos. Debe otorgar permisos específicos a dicho rol de RAM de worker.
ImportanteSeleccione este modo si necesita extraer imágenes entre cuentas asumiendo un rol.
Paso 2: Actualizar la configuración del complemento
Una vez instalado el complemento sin credenciales, debe configurar el ConfigMap acr-configuration para agregar una instancia de ACR antes de extraer imágenes. Puede hacerlo mediante la consola o kubectl.
Consola
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
-
En la página ConfigMaps, seleccione kube-system en la lista desplegable Namespace. Luego, haga clic en el ConfigMap acr-configuration y modifique los ajustes tal como se describe en la siguiente tabla.
Parámetro
Descripción
watch-namespace
Namespaces donde desea habilitar la extracción de imágenes sin credenciales. El valor predeterminado es default. Establezca el valor en all para habilitar esta función en todos los namespaces. Para especificar varios namespaces, sepárelos con comas (,). Se recomienda indicar únicamente los namespaces de su negocio y evitar el uso de
allo de namespaces destinados a componentes del sistema del clúster, con el fin de prevenir interrupciones en la extracción de imágenes del sistema.acr-api-version
Mantenga el valor predeterminado.
expiring-threshold
Umbral de caducidad de las credenciales en el complemento. El valor predeterminado es
15m(15 minutos).acr-registry-info
Arreglo con la información de las instancias de ACR en formato de cadena YAML multilínea. Cada instancia se configura con un conjunto de tres parámetros.
-
instanceId: ID de la instancia de ACR. Puede obtenerlo desde la consola de Container Registry.ImportanteDeje este campo vacío para las instancias de ACR Personal Edition. Este campo es obligatorio para las instancias de ACR Enterprise Edition.
-
regionId: ID de la región donde se despliega la instancia de ACR. Puede obtenerlo desde la consola de Container Registry.ImportanteEste parámetro es obligatorio para extraer imágenes entre regiones. Para ver un ejemplo de configuración, consulte la sección siguiente.
-
domains: Nombres de dominio que utiliza el complemento sin credenciales para acceder a la instancia de ACR. De forma predeterminada, incluye todos los nombres de dominio de la instancia de ACR especificada medianteinstanceId. Para indicar varios nombres de dominio, sepárelos con comas (,).
service-account
ServiceAccounts asociados al complemento sin credenciales. Para especificar varios ServiceAccounts, sepárelos con comas (,). Si establece el valor en default, el complemento se asocia al ServiceAccount predeterminado de cada namespace indicado. Si establece el valor en
"*", el complemento se asocia a todos los ServiceAccounts de dichos namespaces. -
kubectl
-
Ejecute el siguiente comando para editar el ConfigMap
acr-configuration. Consulte la siguiente tabla para conocer los detalles de configuración.kubectl edit cm acr-configuration -n kube-systemClave del parámetro
Descripción
Valor
service-account
ServiceAccounts a los que se dirige el complemento sin credenciales.
El valor predeterminado es default.
NotaPara especificar varios ServiceAccounts, sepárelos con comas (,). Si establece el valor en
"*", se aplica a todos los ServiceAccounts de los namespaces indicados.acr-registry-info
Arreglo con la información de las instancias de ACR en formato de cadena YAML multilínea. Cada instancia se configura con un conjunto de tres parámetros.
NotaParámetros de información de la instancia:
-
instanceId: ID de la instancia. Es obligatorio para las instancias de Enterprise Edition.
-
regionId: Opcional. Toma como valor predeterminado la región local.
-
domains: Opcional. Toma como valor predeterminado todos los nombres de dominio de la instancia correspondiente. Para especificar varios nombres de dominio, sepárelos con comas (,).
Ejemplo de configuración para una instancia de ACR Enterprise Edition:
- instanceId: <cri-instanceId> regionId: "cn-hangzhou" domains: "xxx.com,yyy.com"watch-namespace
Namespaces donde desea habilitar la extracción de imágenes sin credenciales.
El valor predeterminado es default. Establezca el valor en all para habilitar esta función en todos los namespaces. Para especificar varios namespaces, sepárelos con comas (,).
NotaSe recomienda indicar únicamente los namespaces de su negocio y evitar el uso de all o de namespaces destinados a componentes del sistema del clúster, con el fin de prevenir interrupciones en la extracción de imágenes del sistema.
expiring-threshold
Umbral de caducidad de las credenciales almacenadas en caché local.
El valor predeterminado es
15m(15 minutos). -
Paso 3: Extraer una imagen
Después de instalar y configurar el complemento sin credenciales, especifique un ServiceAccount asociado al complemento cuando cree una carga de trabajo. Esto habilita la extracción de imágenes sin credenciales.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
serviceAccountName: my-service-account # Specify a ServiceAccount that is associated with the credential-free add-on.
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Specify the ACR image address.
ports:
- containerPort: 80
Preguntas frecuentes
Habilitar el uso inmediato de ServiceAccounts
Esta función requiere aliyun-acr-credential-helper v23.02.06.1-74e2172-aliyun o una versión posterior.
Cuando está habilitada, el complemento sin credenciales usa un Webhook para supervisar los cambios de ServiceAccount en el clúster. Al crear un nuevo ServiceAccount, el complemento inyecta inmediatamente el Secret sin credenciales. Esto resulta útil en escenarios donde un ServiceAccount se emplea justo después de su creación, como cuando un Helm Chart crea simultáneamente un ServiceAccount y un Deployment. Esta función puede afectar el rendimiento del complemento, por lo que no se recomienda para uso general.
Complemento administrado
Para habilitar esta función, instale el complemento acr-credential-helper-webhook en su clúster:
En la página Clústeres de ACK, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Add-ons.
En la página Add-ons, haga clic en la pestaña Security, busque la tarjeta acr-credential-helper-webhook (managed) y luego haga clic en Install.
Complemento autoadministrado
Para habilitar esta función, agregue los siguientes campos al ConfigMap acr-configuration:
data:
webhook-configuration: |
enable: true
failure-policy: Ignore
timeout-seconds: 10
|
Parámetro |
Descripción |
|
|
Especifica si se habilita la función de Webhook.
|
|
|
Política para manejar excepciones durante la creación de un ServiceAccount.
Importante
Debido a una limitación del API Server del clúster, si |
|
|
Tiempo de espera para una sola solicitud de creación de ServiceAccount. Si se supera este límite, el sistema responde según la configuración de |
Solucionar errores al extraer imágenes
Una posible causa es que la configuración del complemento sin credenciales sea incorrecta. Por ejemplo:
La información de la instancia configurada en el complemento sin credenciales no coincide con la instancia de ACR.
La dirección de la imagen utilizada para la extracción no coincide con el nombre de dominio especificado en la información de la instancia del complemento.
Siga los pasos de este tema para solucionar el problema.
Si el complemento está bien configurado pero la extracción de la imagen sigue fallando, es probable que exista un conflicto entre el campo imagePullSecrets especificado manualmente en el YAML de la carga de trabajo y el complemento sin credenciales. Para resolverlo, elimine manualmente el campo imagePullSecrets y vuelva a crear el Pod.
¿Cómo uso imagePullSecrets?
Las instancias de ACR Personal Edition creadas a partir del 9 de septiembre de 2024 no admiten el complemento sin credenciales. Para estas instancias, se recomienda almacenar el nombre de usuario y la contraseña en un Secret y hacer referencia a él en el campo imagePullSecrets.
El complemento sin credenciales es incompatible con un campo
imagePullSecretsespecificado manualmente.El Secret debe estar en el mismo namespace que la carga de trabajo.
Temas relacionados
Para extraer imágenes entre cuentas mediante el complemento sin credenciales, consulte Pull images across accounts.
Para consultar el historial de cambios del complemento sin credenciales, consulte aliyun-acr-credential-helper.