本文档简要介绍了远程代码库。如需了解如何创建远程代码库,请参阅创建远程代码库。
Artifact Registry 配额和限制适用于远程代码库。
远程代码库的运作方式
远程代码库会存储以下上游来源的工件:
- 标准 Artifact Registry 制品库。
- 外部来源,例如 Docker Hub、Maven Central、Python 软件包索引 (PyPI)、Debian 或 CentOS。
远程仓库充当上游源代码的代理,以便您更好地控制依赖项。当您首次请求软件包的某个版本时,Artifact Registry 会在远程代码库中下载并缓存该软件包。下次您请求同一软件包版本时,Artifact Registry 会提供缓存的副本。
如果您请求的上游源不存在或不包含您指定的版本,则请求将失败。
其他代码库模式包括:
- 标准:默认的代码库模式。您可以直接将工件(例如私有软件包)上传或发布到标准代码库。虽然您可以直接从各个标准代码库下载,但使用虚拟代码库访问代码库组可以简化工具配置。
- 虚拟:一种代码库,可充当多个上游代码库(包括远程代码库和标准代码库)的单一访问点。
上游身份验证
对于受支持的格式,Artifact Registry 远程代码库支持对上游源进行基本身份验证。如需详细了解如何对远程代码库上游源进行身份验证,请参阅配置对远程代码库上游的身份验证。
使用场景和优势
- 更快、更可靠地访问工件
- 将公共依赖项的缓存副本存储在 Artifact Registry 中可缩短其他服务检索映像时的延迟时间。 Google Cloud 如果外部公共代码库因服务中断或其他问题而处于离线状态,缓存工件仍可供使用。
- 更安全的依赖项解析
将远程代码库与虚拟代码库搭配使用,可降低与公共依赖项相关的风险。在客户端中配置混合使用私有仓库和公共仓库时,某些工具无法提供控制搜索顺序的方法。此类配置容易受到依赖项混淆攻击,攻击者会将包含有害代码的软件包新版本上传到公共代码库,以诱骗客户端选择有害版本。
您可以配置虚拟代码库,使其优先于远程代码库搜索私有代码库,而不是直接配置客户端来搜索多个代码库。
- 降低数据传输费用
使用远程代码库在与运行时相同的区域或多区域中缓存工件,以降低数据传输费用。
如果 Artifact Registry 位于 VPC Service Controls 服务边界内,则默认情况下,Artifact Registry 会拒绝对边界外上游源的访问。如需允许特定位置的远程代码库访问边界外配置的外部来源,请参阅 VPC Service Controls 配置说明。
如需了解其他依赖项管理最佳实践,请参阅依赖项管理。
软件包索引和元数据的更新
当可变文件(例如软件包索引和元数据)超过默认时长时,系统会从上游源更新这些文件。下表列出了特定文件类型的默认值:
格式 | 文件类型 | 默认更新期限 |
---|---|---|
Maven | maven-metadata.xml |
5 分钟 |
archetype-catalog.xml |
1 小时 | |
Npm | 清单文件 | 5 分钟 |
Python | 索引文件 | 1 小时 |
Docker | 列出/获取标记缓存 | 1 小时 |
Apt/Yum(预览版) | 索引文件 | 2 分钟 |
软件包文件 | 72 小时 |
支持的格式
如需了解预设和用户定义的远程代码库可用的格式,请参阅以下部分。
预设的上游网址
为方便起见,我们提供了一些常见的上游代码库网址作为预设选项,这些网址采用以下格式。
格式 | 软件包类型 | 上游网址 | 上游预设名称 |
---|---|---|---|
Docker | 公开或私享 | https://registry-1.docker.io |
DOCKER-HUB |
Maven | 公开或私享 | https://repo.maven.apache.org/maven2 |
MAVEN-CENTRAL |
npm | 公开或私享 | https://registry.npmjs.org |
NPMJS |
Python | 公开 | https://pypi.io |
PYPI |
操作系统软件包(预览版) | 公开 | 请参阅上游支持的操作系统软件包 | 请参阅上游支持的操作系统软件包 |
操作系统软件包预设的上游
您可以通过从常见的预设上游代码库基础网址中进行选择,并将网址的其余部分自定义为特定代码库,从而创建操作系统软件包远程代码库。支持以下代码库基础:
Apt
代码库 | 网址前缀 | 代码库基本名称 |
---|---|---|
归档的 Debian | https://snapshot.debian.org |
DEBIAN_SNAPSHOT |
Debian | http://deb.debian.org |
DEBIAN |
Ubuntu LTS 或 Pro | http://archive.ubuntu.com
|
UBUNTU
|
Yum
代码库 | 网址前缀 | 代码库基本名称 |
---|---|---|
CentOS | http://mirror.centos.org
|
CENTOS
|
http://debuginfo.centos.org
|
CENTOS_DEBUG
|
|
https://vault.centos.org
|
CENTOS_VAULT
|
|
https://mirror.stream.centos.org
|
CENTOS_STREAM
|
|
Rocky | http://dl.rockylinux.org
|
ROCKY
|
Fedora Extra Packages for Enterprise Linux (EPEL) | https://dl.fedoraproject.org/pub/epel
|
EPEL
|
Artifact Registry 仓库上游
您可以创建远程代码库,并将 Artifact Registry 标准格式代码库用作以下格式的上游:
- Docker
- npm
- Maven
- Python
自定义网址
对于以下格式,您可以直接输入远程代码库的网址,而无需使用预设的上游源之一。
- Docker
- npm
- Maven
- Python
下表列出了一些常见的上游 URI(并非详尽无遗)。
格式 | 上游 URI | 注册库名称 |
---|---|---|
Docker | https://registry-1.docker.io |
Docker Hub |
Docker | https://public.ecr.aws |
AWS ECR 公开图片库 |
Docker | https://registry.k8s.io |
Kubernetes Container Registry |
Docker | https://MY_NEXUS_IP |
Nexus |
npm | https://registry.npmjs.org |
npm |
npm | https://npm.pkg.github.com |
GitHub Npm 注册库 |
npm | https://MY_NEXUS_IP/repository/MY_UPSTREAM_REPOSITORY |
Nexus |
Maven | https://repo.maven.apache.org/maven2 |
Maven Central |
Maven | https://MY_NEXUS_IP/repository/MY_UPSTREAM_REPOSITORY |
Nexus |
Python | https://pypi.io |
Python 软件包索引 (PyPI) |
Python | https://MY_NEXUS_IP/repository/MY_UPSTREAM_REPOSITORY |
Nexus |
地点
- MY_NEXUS_IP 是 Nexus 上游实例的 IP 地址和端口。
- MY_UPSTREAM_REPOSITORY 是上游代码库的名称;在 Nexus 示例中使用。
限制
除了 Artifact Registry 配额和限制之外,远程代码库还存在以下限制:
- Maven 远程代码库不允许将版本政策设置为快照或发布版本。
- 上游来源必须可通过互联网访问。远程代码库不支持没有公共 IP 地址的本地网络或虚拟私有云 (VPC) 网络上游源。