Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

364
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!