Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

370
Vistas
¿Cómo hacer un archivo de implementación para un servicio de kubernetes que depende de imágenes de Amazon ECR?

Un colega creó un clúster K8s para mí. Puedo ejecutar servicios en ese clúster sin ningún problema. Sin embargo, no puedo ejecutar servicios que dependan de una imagen de Amazon ECR, que realmente no entiendo. Probablemente, cometí un pequeño error en mi archivo de implementación y por lo tanto causé este problema.

Aquí está mi archivo de implementación:

 apiVersion: apps/v1 kind: Deployment metadata: name: hello-deployment labels: app: hello spec: replicas: 3 selector: matchLabels: app: hello template: metadata: labels: app: hello spec: containers: - name: hello image: xxxxxxxxx.yyy.ecr.eu-zzzzz.amazonaws.com/test:latest ports: - containerPort: 5000

Aquí está mi archivo de servicio:

 apiVersion: v1 kind: Service metadata: name: hello-svc labels: app: hello spec: type: NodePort ports: - port: 5000 nodePort: 30002 protocol: TCP selector: app: hello

En el nodo maestro, ejecuté esto para asegurarme de que kubernetes conozca la implementación y el servicio.

 kubectl create -f dep.yml kubectl create -f service.yml

Usé la extensión K8s en vscode para verificar los registros de mis pods.

Este es el error que me sale:

Error del servidor (Solicitud incorrecta): el contenedor "hola" en el pod "hola-implementación-xxxx-49pbs" está esperando para comenzar: intento y error al extraer la imagen.

Aparentemente, tirar es un problema... Esto no sucede cuando se usa una imagen pública desde el centro de la ventana acoplable pública. Lógicamente, esto sería una cuestión de derechos. Pero parece que no lo es. No recibo ningún mensaje de error cuando ejecuto este comando en el nodo maestro:

 docker pull xxxxxxxxx.yyy.ecr.eu-zzzzz.amazonaws.com/test:latest

Este comando simplemente extrae mi imagen.

Yo estoy confundido ahora. Puedo extraer mi imagen con docker pull en el nodo maestro. Pero K8s falla al tirar. ¿Me estoy perdiendo algo en mi archivo de implementación? ¿Alguna propiedad que diga: "repositoryIsPrivateButDoNotComplain"? Simplemente no lo entiendo.

¿Cómo solucionar esto para que los K8 puedan usar fácilmente mi imagen de Amazon ECR?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Debe crear y utilizar secretos para la autorización ECR.

Esto es lo que necesitas hacer.

  1. Cree un secreto para el clúster de Kubernetes, ejecute el script de shell que se proporciona a continuación desde una máquina desde la que pueda acceder a la cuenta de AWS en la que está alojado el registro ECR. Cambie los marcadores de posición según su configuración. Asegúrese de que la máquina en la que ejecuta este script de shell tenga instalado aws cli y configurada la credencial de aws. Si está utilizando una máquina con Windows, ejecute este script en Cygwin o en la consola git bash.
 #!/bin/bash ACCOUNT=<AWS_ACCOUNT_ID> REGION=<REGION> SECRET_NAME=<SECRETE_NAME> EMAIL=<SOME_DUMMY_EMAIL> TOKEN=`/usr/local/bin/aws ecr --region=$REGION --profile <AWS_PROFILE> get-authorization-token --output text --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2` kubectl delete secret --ignore-not-found $SECRET_NAME kubectl create secret docker-registry $SECRET_NAME \ --docker-server=https://${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com \ --docker-username=AWS \ --docker-password="${TOKEN}" \ --docker-email="${EMAIL}"
  1. Cambie la implementación y agregue una sección para secretar que usarán sus pods mientras descarga la imagen de ECR.
 apiVersion: apps/v1 kind: Deployment metadata: name: hello-deployment labels: app: hello spec: replicas: 3 selector: matchLabels: app: hello template: metadata: labels: app: hello spec: containers: - name: hello image: xxxxxxxxx.yyy.ecr.eu-zzzzz.amazonaws.com/test:latest ports: - containerPort: 5000 imagePullSecrets: - name: SECRET_NAME
  1. Cree los pods y el servicio.

  2. SI tiene éxito, entonces el secreto caducará en 12 horas, para superar eso, configure un crone (para recrear los secretos en el clúster de Kubernetes periódicamente. Para configurar el crone, use el mismo script que se proporciona arriba.

Para obtener una imagen completa de cómo sucede debajo del capó, consulte el diagrama a continuación.

ingrese la descripción de la imagen aquí

Saludos Amit Meena

over 4 years ago · Santiago Trujillo Denunciar

0

Para el problema de 12 horas, si está utilizando Kubernetes 1.20, configure y use el proveedor de credenciales de imagen de Kubelet

https://kubernetes.io/docs/tasks/kubelet-credential-provider/kubelet-credential-provider/

Debe habilitar la puerta de características alfa KubeletCredentialProviders en su kubelet

Si usa la versión inferior de Kubernetes y esta función no está disponible, use https://medium.com/@damitj07/how-to-configure-and-use-aws-ecr-with-kubernetes-rancher2-0-6144c626d42c

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda