Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

368
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda