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

JFrog支持
2022-04-11 11:03

可以通过这样的方式配置反向代理,即可以用存储库名称标记映像,并且反向代理可以将此类请求路由到适当的Artifactory Docker存储库。

子域方法解决方案

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

可选择的解决方案

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

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

rewritecsecond %{REQUEST_SCHEME} (.*)
rewriterrule (.*) - [E=my_scheme:%1]

rewritecsecond %{HTTP_HOST} (.*)
rewriterrule (.*) - [E=my_custom_host:%1]

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

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

RequestHeader set Host /%{repo}e
请求头设置X-Forwarded-Port %{my_server_port}
请求头设置x - forward - proto %{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上

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

rewritecsecond %{REQUEST_SCHEME} (.*)
rewriterrule (.*) - [E=my_scheme:%1]

rewritecsecond %{HTTP_HOST} (.*)
rewriterrule (.*) - [E=my_custom_host:%1]

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

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

请求头设置主机jfrog-docker.com/%{repo}e
请求头设置X-Forwarded-Port %{my_server_port}
请求头设置x - forward - proto %{my_scheme}e
请求头设置x - artifactory - overrides - base - url %{my_scheme}e:// jfrogdocker.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的权限,因此权限将按预期工作。