jetstack / version-checker

Kubernetes utility for exposing image versions in use, compared to latest available upstream, as metrics.
https://jetstack.io
Apache License 2.0
664 stars 76 forks source link

Wrong latest image tag for selfhosted repositories #162

Open ailowry opened 4 months ago

ailowry commented 4 months ago

I am running version-checker in an offline environment that uses a caching proxy to access Dockerhub. In this case I am looking up the standard redis image and it is showing the wrong latest tag.

version-checker

I think this is happening because this path is used in selfhosted.go: tagsPath = "%s/v2/%s/tags/list?n=500"

OCI distribution specification indicates that the n parameter will return the first n tags. The last parameter can be added for additional filtering. https://github.com/opencontainers/distribution-spec/blob/main/spec.md#listing-tags Without the last query parameter (described next), the list returned will start at the beginning of the list and include <int> results. As above, the tags MUST be in lexical order.

davidcollom commented 3 months ago

Hi, @ailowry Thanks for raising this issue - Having a quick look I believe the wider issue to be related to the fact that there's no pagination going on, therefore we do only get the first (or last) 500 tags.

Additionally, we don't fully support the OCI Model right now and (loosely in places) follow the docker distribution API for self-hosted, I would say we should keep OCI Support in #121 and looks like some efforts on implementation were started in #159

acascais commented 1 month ago

We use docker harbor to host our images and we have the same problem. For example:

image

edit: and the error seems to be

time="2024-06-05T09:04:34Z" level=error msg="my.registry.io/auth/manifests/auth-2.2.19: failed to get manifest response for tag, skipping (404): {\"errors\":[{\"code\":\"MANIFEST_UNKNOWN\",\"message\":\"OCI index found, but accept header does not support OCI indexes\"}]}\n" client=