OCI Connector
OCI Connector 是一个平台无关的连接器,允许您连接到任何 OCI Registry,例如 Docker Hub、Harbor 等。您可以使用 OCI Connector 在 CI/CD 流水线中安全访问私有 OCI 仓库,或在容器化工作负载中执行 OCI 操作而无需提供凭证。此外,您可以集中管理 OCI 访问配置,避免在每个命名空间中重复配置 OCI 凭证。
本文档将介绍:
- OCI Registry 的访问要求
- 如何基于 OCI Connector 类型创建 OCI Connector
- OCI Connector 的代理及配置能力
目录
OCI Registry 要求基于 OCI Connector 类型创建 OCI Connectorspec.connectorClassNamedescription地址认证使用基于令牌的认证令牌所需权限代理与配置代理代理地址正向代理反向代理更多OCI Registry 要求
被访问的 OCI Registry 必须满足以下条件:
-
接口实现要求:
- 必须至少实现 opencontainers/distribution-spec v1.0 规范中定义的接口
- 必须能够通过 distribution-spec 的 一致性测试
-
认证方式要求:
- 必须实现基于 Token 的认证,并符合 CNCF Distribution Token Authentication Specification
基于 OCI Connector 类型创建 OCI Connector
以下是创建基础 OCI Connector 的示例:
spec.connectorClassName
使用常量值 oci。
description
您可以通过 annotations 字段为 OCI Connector 添加描述信息。
cpaas.io/description:OCI Connector 的描述。
例如:
地址
spec.address 指定 OCI Registry 的访问地址,例如:https://index.docker.io。
认证
OCI Connector 支持以下认证类型:
tokenAuth:基于令牌的认证(可选)- 对应的凭证类型为
cpaas.io/distribution-registry-token,此类型凭证用于 CNCF Distribution Token Authentication Specification 中定义的认证流程,凭证必须提供username和password信息。
- 对应的凭证类型为
使用基于令牌的认证
示例:
如果目标 OCI Registry 不需要认证,可以省略认证信息。配置示例如下:
令牌所需权限
配置的令牌所需权限取决于您在 Pod/流水线中的使用场景。
例如:
- 镜像拉取操作:如果仅需使用该连接器拉取镜像,令牌只需对目标仓库具有读取权限。
- 镜像拉取和推送操作:如果需使用该连接器推送镜像,令牌必须对目标仓库同时具备读写权限。换言之,令牌应允许您从仓库拉取和推送镜像。
出于安全最佳实践,建议创建权限最小化的令牌。当需要额外权限时,创建权限更高的独立 Connector,并通过命名空间隔离控制用户访问。
代理与配置
为了让客户端无需凭证即可访问 OCI 仓库,OCI Connector 类型提供了一个代理服务器,用于自动注入认证信息。
拥有连接器访问权限的客户端可以使用该代理服务器访问 OCI 仓库,而无需在客户端配置凭证。
为简化使用,OCI Connector 类型提供可通过 CSI 挂载到 Pod 的配置信息。在 Pod 中执行 OCI 操作时,可自动使用代理服务完成操作。
代理
代理地址
创建 Connector 后,系统将:
- 自动创建代理的 Service。
- 在
status.proxy.httpAddress字段记录代理地址。
您可以使用该代理地址进行镜像推拉操作。
例如:
正向代理
您可以通过 CSI 将代理信息挂载到 Pod 中,然后通过环境变量或配置文件使用代理信息。
随后,在执行容器操作前,通过环境变量或配置文件使用代理信息。
反向代理
使用反向代理时,需要将目标镜像地址修改为代理地址。
示例: index.docker.io/test/abc:v1 → c-dockerhub-demo.default.svc.cluster.local/namespaces/oci-connector-demo/connectors/oci-connector/test/abc:v1
并将凭证配置文件挂载到 Pod 中,且在 insecure-registries 中配置代理地址。
基于 OCI Connector 类型创建的 OCI Connector 提供以下配置:
docker-config:OCI CLI(如 buildkit、buildah)所需的配置凭证。
- 提供
config.json配置文件。 - 包含访问代理所需的认证信息。
例如:
buildkitd:BuildKit Daemon 所需的配置信息。
- 提供
buildkitd.toml配置文件。 - 配置文件中默认将当前连接器设置为
insecure-registries。
例如:
您可以通过 connectors-csi 将该配置信息挂载到 Pod 中,结合代理能力,实现无凭证的镜像推拉操作。