如何从一个URL访问多个Artifactory Docker存储库?

JFrog支持
2023-02-26 20:14

可以这样配置反向代理:映像可以用存储库名称进行标记,反向代理可以将此类请求路由到适当的Artifactory Docker存储库。

子域法解决方案

最佳的解决方案是利用我们提供的子域法以及我们生成的反向代理配置。此方法确实需要通配符证书,如果无法获得通配符证书,则可以使用下面描述的使用单个URL证书的替代解决方案。

可选择的解决方案

另一种解决方案是将存储库名称嵌入映像名称中,而不是嵌入注册中心URL。
工作流看起来就像这样:Docker标签 ///Docker push ///这将导致在Artifactory存储库中创建一个带有路径的新映像< optional-namespace > / <图像名称>。下面是一个更具体的例子:
Docker标签busybox example.com/dockerv2/busybox
Docker推送example.com/dockerv2/busybox

要求:

Apache 2.4 +
看到Apache所需的模块

实现

  1. 创建一个名为docker-login的本地docker存储库
  2. 使用您的详细信息修改VirtualHost条目(替换所有<值> -有15个)
  3. 应用Apache配置并重新启动Apache

听着<端口# >
< VirtualHost *: <端口# > >
ProxyPreserveHost上

ServerName < apache-server-name >
服务器server@admin

SSLEngine上
SSLCertificateFile < cert-file-location >
SSLCertificateKeyFile < cert-key-file-location >

RewriteEngine上

RewriteCond %{SERVER_PORT} (.*)
RewriteRule (.*) - [E=my_server_port:%1]

重写%{REQUEST_SCHEME} (.*)
RewriteRule (.*) - [E=my_scheme:%1]

重写%{HTTP_HOST} (.*)
RewriteRule (.*) - [E=my_custom_host:%1]

重写econd "%{REQUEST_URI}" "^/v2/(.*?)/"
RewriteRule“^ / v2 /.*?/(.*)$" "/ api /码头工人/ % 1 / v2 / 1美元”(PT, E =回购:% 1)

RewriteRule ^/v2/$ /artifactory/api/docker/docker-login/v2/ [P]
RewriteRule ^/v2/token$ /artifactory/api/docker/docker-login/v2/token [P]

RequestHeader set Host /%{repo}e
设置x - forward - port %{my_server_port}e
请求头设置X-Forwarded-Proto %{my_scheme}e
RequestHeader set X-Artifactory-Override-Base-Url %{my_scheme}e://:<端口#>
ProxyPassReverseCookiePath /artifactory /

页眉编辑*位置”^ https:// < apache-server-name > / (. * ?) / v2 /(. *) $”“https:// < apache-server-name >: <端口# > / v2 / 1 / 2美元”
ProxyRequests掉
ProxyPass / /artifactory/
ProxyPassReverse / /artifactory/
< /虚拟主机>

示例:代理端口:5000,apache-server-name: jfrog-docker, art-URL: http://192.168.99.100:8081):

听5000
< VirtualHost *: 5000 >
ProxyPreserveHost上

ServerName jfrog-docker.com
服务器server@admin

SSLEngine上
SSLCertificateFile /etc/ssl/demo.pem
SSLCertificateKeyFile /etc/ssl/demo.key

RewriteEngine上

RewriteCond %{SERVER_PORT} (.*)
RewriteRule (.*) - [E=my_server_port:%1]

重写%{REQUEST_SCHEME} (.*)
RewriteRule (.*) - [E=my_scheme:%1]

重写%{HTTP_HOST} (.*)
RewriteRule (.*) - [E=my_custom_host:%1]

重写econd "%{REQUEST_URI}" "^/v2/(.*?)/"
RewriteRule“^ / v2 /.*?/(.*)$" "/ api /码头工人/ % 1 / v2 / 1美元”(PT, E =回购:% 1)

RewriteRule ^/v2/$ http://192.168.99.100:8081/artifactory/api/docker/docker-login/v2/ [P]
RewriteRule ^/v2/token$ http://192.168.99.100:8081/artifactory/api/docker/docker-login/v2/token [P]

RequestHeader设置主机jfrog-docker.com/%{repo}e
设置x - forward - port %{my_server_port}e
请求头设置X-Forwarded-Proto %{my_scheme}e
RequestHeader set x - artifactory - overrides - base - url %{my_scheme}e:// jfro-docker.com:5000
ProxyPassReverseCookiePath /artifactory /

页眉编辑*位置”^ https://jfrog-docker.com/ (. * ?) / v2 /(. *) $”“https://jfrog-docker.com: 5000 / v2 / 1 / 2美元”
ProxyRequests掉
ProxyPass / http://192.168.99.100:8081/artifactory/
ProxyPassReverse / http://192.168.99.100:8081/artifactory/
< /虚拟主机>

关于权限和存储库docker-login的说明:

需要存储库docker-login来允许用户登录。该登录只需要一次,并将提供标识登录的特定用户的令牌。然后,无论用户从哪个存储库推送或提取,都会提供这个令牌。这些拉/推请求将遵循用户对那些特定存储库的权限,而不是对存储库docker-login的权限,因此权限将按预期工作。