云客户?
免费开始>
在MyJFrog >中升级
云b>的新功能





概述

私有分销网络(PDN)是一种轻量级的、存储精明的分销解决方案,使您能够满足不断增长的分销需求。要了解更多信息,请参见专用配电网。TPDN (Private Distribution Network)的建立分为以下几个阶段:

  1. 安装PDN服务器

  2. 安装PDN节点

    部署JFrog PDN节点

    您需要根据组织内的部署策略在网络中部署PDN节点。

    当PDN节点连接到PDN服务器时,将使用存储在JFrog平台中的默认PDN节点配置填充它们。每次PDN节点连接到PDN服务器时,都会动态验证这些配置。可以通过push一个附加的YAML文件来修改它们通过REST API,上传到UI,或者从文件系统引导。

    有关更多信息,请参见PDN (Advanced Private Distribution Network)配置

  3. 设置你的PDN通过以下四个步骤:
    1. 步骤1:在JFrog平台部署(JPD)和PDN节点之间建立信任
    2. 步骤2:自定义PDN
    3. 步骤3:配置PDN节点为HTTP/HTTPS代理

    4. 步骤4:配置Nginx以支持PDN节点之间的负载均衡

  4. 可选高级设置您可以使用安装过程中设置的默认设置来使用PDN;但是,您也可以使用可选的高级设置对设置进行微调。

PDN License要求

当JFrog Artifactory许可证到期时,Artifactory将继续工作(例如,客户可以上传和下载组件)。但是,由于PDN是一种高级功能,一旦实例许可证过期,它将被阻止。

如果您的Artifactory许可证过期,您将收到代码503的失败响应(服务不可用)并显示不同的错误消息将你试图采取的行动联系起来:

  • 拓扑视图将被禁用—当您尝试访问此视图时,将出现一条消息,说明视图已被禁用

  • 没有Eager缓存预热

  • 客户端拉取/下载将不可能

重要的

要继续使用PDN,您需要获得有效的许可证。但是,由于PDN每5分钟对license进行一次Artifactory采样,所以在提供license后,PDN持续禁用的时间最长为5分钟。



建立私人分销网络

的安装完成后生产服务器生产节点。您就可以设置PDN了。

建立PDN节点的基本过程包括以下主要步骤:

  1. 下载JFrog PDN Server,自定义基本PDN Node YAML文件。
  2. 配置生产节点作为HTTP/HTTPS代理。

步骤1:在JPD (JFrog Platform Deployment)和PDN节点之间建立信任

在之间建立信任JFrog平台部署(JPD)和一个PDN节点,PDN节点可以使用以下任意一种身份验证方法:

  • 基于令牌的API身份验证。
  • mTLS (Mutual TLS)认证。

认证在PDN节点配置YAML文件中指定。

基于令牌的API身份验证

使用令牌进行身份验证有两种方法:

  • 使用基于令牌的API密钥认证配置joinKey属性中自定义的PDN节点YAML文件
  • 生成API密钥(访问令牌)
    1. 在JFrog平台中,转到管理|用户管理|设置| PDN访问令牌,生成并复制密钥。
    2. 要查看连接键,请单击显示连接键图标。


TLS互鉴

使用TLS互认证配置pdnnode。PEMFilePath属性指定本地.pem文件的路径,该文件包含用于SSL客户端身份验证的证书和客户端证书密钥。

默认情况下,PDN Node使用来自其运行的操作系统的受信任证书颁发机构(CA)列表。
如果签署证书的证书颁发机构不在主机系统的受信任证书颁发机构列表中,则需要向包含CA证书的文件添加路径通过定义pdnnode.certificatAuthorityPath属性。

示例文件
——开始RSA私钥MIIEowIBAAKCAQEAs3HKxB + AwcqQxxfiKWI0lmGxR / c1gigGMoEuqx5dTWNpG4Ow ypOITOndzvKFE5HJXzwYoqQJnjjOsqI + 5 mj2s1zsvylekfpm5o60kfn1nbtd / 5例FSiKfmjJchRTrRNe6kHvn5SnBnIWm3sj3 w7pkBnkhv2tNbpzUdAwxOwi886QPKw Q7pGp8EM9DfEMqtz37Zv5dLNFDqIiQkMEAjJQBEuW8WnE9vqNd8o1unvPZeZUps nQCaqPvD7aonNKY4GLJPtaaAY4DZcF / ndj / s / HbWOTbQCUk5sGVzqUWJUw4IYkgc IBVFlnWcPGQ1Xvofi1H4N1uAs / UgzBOk9dthzwIDAQABAoIBAH71Y6CfKVnzF7vF Ch59fPdo5yUjopgT + U6CV6J6OUknrJXq9opdF3JThLuGmuDdpLvcqRFpPeTUDGoWoKofv9JNsxlzX5bPB4hx2w/oUK29ldPbxf5SUKpfOSedehZaPi0/uWoOop3M2nHn DdrLeuiFaMHXRxVreL/ ksc27gxx4r060aiob2f o2ptxjjx8v ++ K3RZ2hoFVvNj31M9gICuIwU5L8bE+HjPbr 9MqVR1eg+ 8mhdxnj31m3gfz31m9ggbh8c5ggbtste7uqshuxan DTv4jZ86YW6EF6l+nVQAwGfD27rvNycTCdKv92tHimwIw8GOLNHFCi17SpAlrrji fsfhf5gutd6spmbzhkbnrchcxj9btx29bjigibuq9zzx4cudselhdecgyeayjz +uKz+73+SY0Gyam8GdAcx+X53mdJL11HxauPQ7Nj3utvSncE1pSBi5slgpoDRSlGC lnvgcepzunuigulhkohau1nlacxtf0giyvvpxfly3z +oetGQfpeIp8dm0JNZ8CgYBbgVT85C+ 2va4achwjww4tg DJ/wh+ULAEqeEhIGVGS600YSSNzzxUrfj854TTDY2gk+ 9rjxams7gjfa3na9nyvawzzsjjdc4jwi439yjwhyhb6nusnk7gghn1qjqlix4jesnibvf50d9u3d1 /l6pBpMEWi4U 30kqjaegw53gh6wnxf /aOmLPQhIklnsDi4L5jEdDd4mbH2 ctdqjl7qkujhttjye5mstbpov6 + i4nC2Lv + 3 dn7t3xnrwtgebczwh5ztke8htrk Yp6TAoGBALxArpy2uUkfMnV53gVXz5 + O / lq9p42zKiX + + D3tb67TqGGIUUobvDpO Jlp2ZnZlqfPR9jSvKSN4LhY / KmRlqA4EihvRMph5eUSVILllznIT1hs0vuvi6jJ6 K6oknsjjn + MQldHJ3Jz + 6 wzhxhmqzd9vb96oo0wiaar2dtn7gzyf——RSA私钥 ----- ----- 开始证书——MIIDmDCCAoCgAwIBAgIUN2Q / afFhsleutFOYPNhhJNkWsjAwDQYJKoZIhvcNAQEL BQAwfjELMAkGA1UEBhMCSUwxDzANBgNVBAgMBklzcmFlbDERMA8GA1UEBwwIVGVs LUF2aXYxDjAMBgNVBAoMBUpmcm9nMQwwCgYDVQQLDANQRE4xDjAMBgNVBAMMBUpmcm9nMR0wGwYJKoZIhvcNAQkBFg5hZGlnQGpmcm9nLmNvbTAeFw0yMTA5MTUxMDQy NTdaFw0yMzEyMTkxMDQyNTdaMEAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIDAZpc3Jh ZWwxEDAOBgNVBAcMB3RlbGF2aXYxDjAMBgNVBAoMBWpmb3JnMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs3HKxB+AwcqQxxfiKWI0lmGxR/c1gigGMoEu qx5dTWNpG4OwypOITOndzvKFE5HJXzwYoqQJnjjOsqI+5mJ2S1ZsVyLEKfPM5O60 kfN1nBTd/5ExFSiKfmjJchRTrRNe6kHvn5SnBnIWm3sj3/w7pkBnkhv2tNbpzUdA wxOwi886QPKwQ7pGp8EM9DfEMqtz37Zv5dLNFDqIiQkMEAjJQBEuW8WnE9vqNd8o 1unvPZeZUps/nQCaqPvD7aonNKY4GLJPtaaAY4DZcF/ndj/s/HbWOTbQCUk5sGVz qUWJUw4IYkgcIBVFlnWcPGQ1Xvofi1H4N1uAs/UgzBOk9dthzwIDAQABo0wwSjAf BgNVHSMEGDAWgBTAv1IjT+kx/YRCOZTXfcXsERdDmDAJBgNVHRMEAjAAMAsGA1Ud DwQEAwIE8DAPBgNVHREECDAGhwSsHyocMA0GCSqGSIb3DQEBCwUAA4IBAQCpQvGE IgptR7FHhLYILG+aIq0Kg2QhGdt3gCAgx6jnncnogQWyTb4t7tB2OCXuif+FG3lh 9xkKrb3AX0w+rKDiL3HDG+kqH/ll9NveFCCT1AgNaku+mx6CtcmWpn+JoW2nvpkF JAIEaZF9BSpQcpveRIM9PQzKiyeeexQYQo4N9IUVNVjrKVh10OexdxnKnWBCeAFn tec7icwmvoU4IPYrp7L0jmpUEvH0Wm6hjsYUa1LiwHcRIFCt6qV1mZWjm3E6oFkj sewgkO3e6j7l6n7vIKM28ps6azmOTqtW/QMEmzjT+237atM46j11mnXsOidLoaNW 6DYeXsGLrxNPLuEL -----END CERTIFICATE-----

步骤2:自定义PDN

建立PDN节点间的连通性

启动后,PDN节点需要与另一个PDN建立连接节点通过gRPC安全连接,申请访问根证书。的生产节点可以使用以下方法之一检索此证书:

  • 使用mTLS身份验证(见上图
  • 通过不安全连接的数字信封。
  • 设置PDN本地机器上的证书pdnnode.accessRootCertificate属性。
  1. 选择你的PDN节点安装
  2. 自定义PDN文件静态节点属性用于基本静态属性的文件,包括地址、端口、证书和目录。

    使用环境变量

    您还可以使用以JF_PDNNODE前缀开头的环境变量配置PDN应用程序。

  3. 部署带有Static属性的YAML,并在所有PDN节点上运行JFrog PDN应用程序。

    当PDN节点年代初始连接到PDN服务器时,它们将自动使用集中存储在JFrog平台中的默认PDN节点配置进行填充。每次PDN节点连接到PDN服务器时,这些配置都会动态更新,并且可以使用REST API、直接在UI中或通过文件系统的引导进行修改。
    修改动态节点属性,请参见PDN (Advanced Private Distribution Network)配置

步骤3:配置PDN节点为HTTP/HTTPS代理

通过PDN节点为您提供与Artifactory相对工作的无缝体验需要将PDN节点设置为HTTP/ https代理。设置后生产节点作为代理,所有从Docker客户端发送的请求都将通过PDN路由节点。有关更多信息,请参见开始使用Artifactory

  1. 将PDN上的位置设置为以下路径。

    $JF_PRODUCT_HOME=[您的机器上的路径]
  2. 复制您自定义的PDN节点system.yaml到以下路径。

    美元JF_PRODUCT_HOME / var / etc / system.yaml
  3. 运行PDN节点与您的首选安装

  4. 复制证书.crt扩展部分位于美元JF_PRODUCT_HOME / var / etc /安全/证书到您的操作系统运行Docker守护进程的文件夹。
    例如,Alpine用户可以将他们的文件复制到以下指定的Docker守护进程运行文件的位置。

    cp ./certificates/jfrog_proxy. Apk添加ca-certificates。crt /usr/local/share/ca-certificates / jfrog_proxy。CRT cp ./certificates/jfrog_access_root. CRTcrt /usr/local/share/ca-certificates / jfrog_access_root。crt update-ca-certificates
  5. 使用指向PDN节点自身HTTP地址的HTTP代理启动Docker守护进程
    如下所示,您可以直接运行Docker守护进程。

    HTTPS_PROXY = selfHttpAddress dockerd

步骤4:配置Nginx支持PDN节点之间的负载均衡。

负载平衡允许您以一种提供高可用性和高性能的方式设置PDN,这对服务质量至关重要,并且配置最少。

PDN通过访问特定PDN组中的特定PDN节点,根据PDN组的IP地址检索文件。由于每个组中的每个PDN节点都是动态的,这意味着PDN节点可以随时关闭或启动,因此使用一小部分PDN节点ip比管理所有PDN节点更有效。这可以通过配置Nginx配置模板,将所有active PDN节点放在一个组中来实现,从而提高高可用性并减少PDN节点ip的管理。同一组内的PDN节点将在彼此之间平衡传入请求的负载,同时不断同步缓存以获得最佳性能。

配置步骤

按照以下步骤配置Nginx节点。

  1. 运行以下REST API请求。

    GET / api / v1 /模板

    检索到的配置将包括组中所有PDN节点的IP地址。HTTP端口将不同于直接通信端口,因为这个新端口将公开具有负载平衡功能的PDN节点。

    上游后端{服务器node1:8090;服务器node2:8090;服务器node3:8090;} server {location / {proxy_pass http://backend}}
  2. 创建一个新的配置文件/etc/nginx/conf.d以文件结尾* . conf
  3. 使用REST API请求生成的输出,将Nginx服务器设置为PDN节点的反向代理。
    确保使用准确的输出内容,并验证没有其他可能影响此配置的配置文件。注意,默认。相依还配置反向代理设置的文件必须删除或修改。

高级设置

使用Docker策略

为了支持不同的Docker解析策略,您需要应用以下PDN节点重写机制。有关更多信息,请参见使用反向代理下面的示例说明了支持的策略。

支持策略

存储库路径映射

这是PDN节点支持的默认配置。存储库路径方法允许单一入口点(URL)访问不同的存储库。这是通过将要访问的存储库的名称嵌入到映像路径中来实现的。

如果您希望在不指定存储库路径的情况下添加解析Docker映像的支持,请遵循显示的重写规则。

pdnnode:重写:-从:https://registry-1.docker.io/v2/library/(.*)到:https:///v2/<默认Docker存储库>/$1

子域映射

要支持子域映射,请根据您的配置配置重写工具。例如,如果您正在使用Artifactory中使用的Nginx配置,请遵循以下重写规则。

Pdnnode:重写:-从:https://(.*)./(.*)到:https:///artifactory/api/docker/$1/$2

端口映射

为了支持端口映射,您必须遵循以下重写规则,将端口映射到所需的存储库。

Pdnnode:重写:-从:https://:/(.*)到:https:///artifactory/api/docker//$1 //repokey涉及到我们想映射到这个键的端口-从:https://myartifactory.com:/(.*)到:https://myartifactory.com/artifactory/api/docker//$1 //repokey涉及到我们想映射到这个键的端口-从:https://myartifactory.com:/(.*)到:https://myartifactory.com/artifactory/api/docker//$1 //repokey与我们想要映射到这个键的端口相关

使用Docker Client从PDN节点下载文件

验证Artifactory中是否有Docker存储库。

通过PDN节点在Docker客户端运行Docker命令与在Artifactory对面运行Docker命令相同。您下载文件的权限和凭证与您在Artifactory中的权限相同,并且在执行与PDN节点相反的操作时检索。

Docker登录请求示例

为了使Docker客户端连接到PDN节点并通过该节点下载,您需要运行码头工人登录到PDN节点。
请注意,HOST_IP指您的机器的IP地址。

  • 使用存储库路径运行Docker登录命令:

    $ docker login——username admin——password password1 
    示例:Docker通过存储库路径登录
    $ docker登录——用户名admin——密码password1 myartifactory.com
  • 使用子域命令运行Docker登录命令:

    $ docker login——username admin——password password1 . .
    示例:Docker通过子域登录
    $ docker登录——用户名admin——密码password1 docker-local.myartifactory.com
  • 使用以下端口运行Docker登录命令:

    $ docker login——username admin——password password1 :<端口>
    示例:使用端口登录Docker
    $ docker login——username admin——password password1 myartifactory.com:9922

Docker Pull Request示例

使用存储库路径运行Docker Pull命令。

$ docker pull //:
示例:Docker使用存储库路径进行拉取
$ docker pull myartifactory.com/docker-local/mysql:latest

使用子域运行Docker Pull命令。

$ docker pull ./: .
示例:Docker Pull使用子域
$ docker pull docker-local.myartifactory.com/mysql:latest

使用该端口运行Docker Pull命令。

$ docker pull /:<版本>
示例:使用端口进行Docker Pull
Docker拉myartifactory.com:9922/mysql:最新

Docker推送请求示例

使用存储库路径运行Docker Push命令。

$ docker push //:
示例:Docker Push使用存储库路径
$ docker push myartifactory.com/docker-local/mysql:latest


下一个:使用私有分配网络(PDN) >>

可选:高级PDN配置>>


  • 没有标签
版权所有©2023 JFrog Ltd.