Nexus et Docker – Configuration reverse proxy

By | 15 février 2021

Nexus permet de d’héberger ses propres images docker. Pour ce faire, il implémente un docker registry. Dans l’implémentation de nexus, vous créez 3 dépôts.

  • Un registry privé (private)
  • Un registry mirroir de docker registry ( proxy)
  • Un registry qui regroupe les deux précédents. (public)

Le problème dans l’implémentation de Nexus est que vous ne pouvez pousser des images que via le registry privé et récupérer des images que via le registry public.

Cela oblige à manipuler deux URL différentes. C’est embêtant en utilisant la CLI de docker, mais cela est impossible suivant les softs. Certain n’acceptant qu’une URL.

Nexus propose une unification de cela dans ces dernières versions, mais uniquement pour la version payante. Il existe cependant un moyen d’arriver au même résultat avec la version community. Cela passe par la configuration du reverse proxy en frontal du Nexus.

# Pour l'ensemble des requètes vers docker ( /v1 ou v2)
location ~ ^/(v1|v2)/ {
    # Pour une modification => proxy privé
    if ($request_method ~* (POST|PUT|DELETE|PATCH) ) {
        rewrite ^/(.*)$ /repository/docker-private/$1 last;
    }
    # Sinon c'est un GET => proxy public
    rewrite ^/(.*)$ /repository/docker-public/$1 last;
}

# Traitement des requêtes pour les binaires
# On doit augmenter la taille des fichiers autorisés par nginx.
location ~ ^/(v1|v2)/[^/]+/?[^/]+/blobs/ {
    proxy_connect_timeout 60s;
    proxy_read_timeout 300;
    proxy_send_timeout 300;
    client_max_body_size 10G;
    if ($request_method ~* (POST|PUT|DELETE|PATCH|HEAD) ) {
        rewrite ^/(.*)$ /repository/docker-private/$1 last;
    }
    rewrite ^/(.*)$ /repository/docker-public/$1 last;
}

Dans cet exemple, j’utilise Nginx comme reverse proxy. Le but de la manœuvre est d’intercepter les requêtes à direction du registry docker ( PUSH ou PULL ) et en fonction de rediriger le flux vers le bon registry ( Private ou Public ). Voici la configuration pour arriver à ce résultat.

Cette configuration est à ajouter à votre virtualhost nginx existant.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.