es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Kubernetes no puede extraer la imagen desde un registro privado inseguro.

Tengo un registro privado de Docker no seguro alojado en un servidor de máquina virtual (vm1). Estoy intentando crear una implementación de k8s a partir de una imagen cargada en este registro. Sorprendentemente, el comando docker pull funciona bien ya que he configurado /etc/docker/daemon.json con insecure-registries.

El error detallado a través del comando kubectl describe es el siguiente. ¿Alguna idea de qué podría estar saliendo mal?

Gracias.

No se pudo descargar la imagen "vm1:5000/temp/leads:latest": error de RPC: código = Desconocido desc = no se pudo descargar y descomprimir la imagen "vm1:5000/temp/leads:latest": no se pudo resolver la referencia "vm1:5000/temp/leads:latest": no se pudo realizar la solicitud: Get "https://vm1:5000/v2/temp/leads/manifests/latest": el servidor proporcionó una respuesta HTTP al cliente HTTPS

El comando docker pull es

docker pull vm1:5000/temp/leads:latest

El archivo de manifiesto de k8s es el siguiente

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  namespace: oleads
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: vm1:5000/temp/leads:latest
          resources:
            requests:
              memory: "64Mi"
              cpu: 0.5
            limits:
              memory: "512Mi"
              cpu: 0.5
          ports:
          - containerPort: 8980
          imagePullPolicy: Always
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que hay un problema con el certificado HTTPS para el registro privado de Docker alojado en vm1:5000. Kubernetes requiere que toda la comunicación con los registros se realice de manera segura utilizando HTTPS, y parece que el registro está respondiendo con una respuesta HTTP en su lugar.

    Para resolver este problema, debes asegurarte de que el registro esté configurado con un certificado HTTPS válido. Una forma de hacerlo es utilizar una autoridad de certificación (CA) para emitir un certificado para el nombre de dominio del registro y configurar el registro para utilizar este certificado para la comunicación HTTPS.

    Una vez que tengas configurado un certificado HTTPS válido, puedes actualizar tu archivo de manifiesto de k8s para utilizar el punto final HTTPS para el registro, de la siguiente manera:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
      namespace: oleads
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
            - name: my-app
              image: vm1:5000/temp/leads:latest
              resources:
                requests:
                  memory: "64Mi"
                  cpu: 0.5
                limits:
                  memory: "512Mi"
                  cpu: 0.5
              ports:
              - containerPort: 8980
              imagePullPolicy: Always
              imagePullSecrets:
              - name: registry-secret
          imagePullSecrets:
          - name: registry-secret
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: registry-secret
      namespace: oleads
    type: kubernetes.io/dockerconfigjson
    data:
      .dockerconfigjson: base64-encoded-docker-config
    

    Este archivo de manifiesto también incluye la definición de un secreto llamado registry-secret, que se utiliza para almacenar las credenciales necesarias para autenticarse con el registro privado. Debes reemplazar base64-encoded-docker-config con tus credenciales reales en el formato correcto.

Comments are closed.