1

I am setting up my K8s cluster with container as runtime. Now when I am trying to pull a image using :

sudo ctr image pull 192.168.1.2:5000/my-alpine:latest

It is giving me an error :

ctr: failed to resolve reference "192.168.1.2:5000/my-alpine:latest": failed to do request: Head https://192.168.1.2:5000/v2/my-alpine/manifests/latest: http: server gave HTTP response to HTTPS client

My /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".registry]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://registry-1.docker.io"]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.1.2:5000"]
      endpoint = ["http://192.168.1.2:5000"]
  [plugins."io.containerd.grpc.v1.cri".registry.configs]
    [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.1.2:5000".tls]
      insecure_skip_verify = true

What am I missing here? When I am pulling an image from Kubernetes deployment and also getting the same error.

Dijkgraaf
  • 11,049
  • 17
  • 42
  • 54
Ankit Bansal
  • 2,162
  • 8
  • 42
  • 79

3 Answers3

2

i also got the same error .i resloved it by following the steps given below

sudo rm -rf /etc/containerd/config.toml

sudo su -

mkdir -p /etc/containerd

containerd config default>/etc/containerd/config.toml

sudo systemctl restart containerd

sudo systemctl enable containerd

then after these steps open then file

sudo nano /etc/containerd/config.toml

find this line

[plugins."io.containerd.grpc.v1.cri".registry.configs]

add these lines below that line

   [plugins."io.containerd.grpc.v1.cri".registry.configs."registry-ip:5000"]


   [plugins."io.containerd.grpc.v1.cri".registry.configs."registry-ip:5000".tls] 
        ca_file = ""
        cert_file = "" 
        insecure_skip_verify = true 
        key_file = ""

then search this line [plugins."io.containerd.grpc.v1.cri".registry.mirrors]

and add the below lines below that line

         [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry-ip:5000"] 
          endpoint = ["http://registry-ip:5000"] 

after this i restarted containerd

sudo systemctl restart containerd

its working fine after that

syed adeeb
  • 109
  • 10
0

ctr does not read the /etc/containerd/config.toml config file. This config is used by the CRIs, which means kubectl or crictl would use it. For ctr, you should add the param --plain-http:

sudo ctr image pull --plain-http=true <image>

The registry config doc is: https://github.com/containerd/containerd/blob/master/docs/cri/registry.md

Also, see this answer https://stackoverflow.com/a/67310470/1106294

Muzammil
  • 417
  • 1
  • 4
  • 20
0

The reason is your private registry is non-secure without https. The I have below segment in containerd/config.yaml and it works for me. I hope this helps.

[plugins."io.containerd.grpc.v1.cri".registry] config_path = "" [plugins."io.containerd.grpc.v1.cri".registry.auths] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."192.167.103.199:5000".tls] insecure_skip_verify = true [plugins."io.containerd.grpc.v1.cri".registry.headers] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.167.103.199:5000"] endpoint = ["http://192.167.103.199:5000"]

4t8dds
  • 565
  • 7
  • 19