Служить хранилищу докеров по некорневому пути (nginx + Sonatype Nexus) - PullRequest
0 голосов
/ 23 сентября 2019

У нас есть несколько хранилищ Docker, обслуживаемых сервером Sonatype Nexus.

Проблема в том, что мы хотим обслуживать их по путям, а не обслуживать их в разных доменах.Причина проста: проще настроить новые пути, чем новые домены, с каждой регистрацией поддоменов и сертификатом SSL.Кроме того, есть некоторые проблемы с безопасностью.

Можно ли это сделать?

1 Ответ

0 голосов
/ 23 сентября 2019

Через некоторое время я обнаружил, что есть два шага: вход в систему и обычное использование.

Поскольку в процессе установки есть серверы nginx и nexus, я могу сослаться наузел nexus как "nexus", а доступ только по http.Сертификат SSL разрешается в nginx с использованием обычной конфигурации nginx

Чтобы заставить вход в систему работать, важно перенаправить путь /v2/ в хранилище докеров.Это можно сделать с помощью nginx:

location /v2/ {
   proxy_set_header    Host $host;
   proxy_set_header    X-Real-IP $remote_addr;
   proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header    X-Forwarded-Proto $scheme;
   proxy_pass          http://nexus:10000;
   proxy_read_timeout  90;
}

Обратите внимание, что предполагается, что конфигурация nexus для хранилища докеров прослушивает внутреннюю информацию через порт 10000 (http).С этой конфигурацией docker login уже должен работать, но вы не можете извлечь какое-либо изображение.

Чтобы получить доступ к изображениям, важно переписать URI (пожалуйста, поместите эту конфигурацию поверх /v2/конфигурация показана ранее):

location ~ /v2/repository/docker-repo1/(.*) {
  proxy_set_header    Host $host;
  proxy_set_header    X-Real-IP $remote_addr;
  proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header    X-Forwarded-Proto $scheme;
  proxy_pass          http://nexus:10000/v2/$1;
  proxy_read_timeout  90;
}

И легко понять, что вы можете создать второй репозиторий, прослушивающий порт 10001, с конфигурацией:

location ~ /v2/repository/docker-repo2/(.*) {
  proxy_set_header    Host $host;
  proxy_set_header    X-Real-IP $remote_addr;
  proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header    X-Forwarded-Proto $scheme;
  proxy_pass          http://nexus:10001/v2/$1;
  proxy_read_timeout  90;
}

И это сделано.

Помните, что важно поддерживать конфигурацию /v2/ (ту, что для входа в систему) после всех остальных или никогда не будет достигнута.

Я не уверен, что все требования относительно авторизациибудет работать как положено ... Я обновлю этот ответ, если у меня возникнут проблемы.

...