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 Registry 必须满足以下条件:

  1. 接口实现要求:

  2. 认证方式要求:

基于 OCI Connector 类型创建 OCI Connector

快速开始

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: dockerhub-demo
spec:
  connectorClassName: oci
  address: https://index.docker.io
  auth:
    name: tokenAuth

spec.connectorClassName

使用常量值 oci

description

您可以通过 annotations 字段为 OCI Connector 添加描述信息。

  • cpaas.io/description:OCI Connector 的描述。

例如:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: dockerhub-demo
  annotations:
    cpaas.io/description: "连接到 Docker Hub 以访问团队公共仓库"

Address

spec.address 指定 OCI Registry 的访问地址,例如:https://index.docker.io

Authentication

OCI Connector 支持的认证类型:

  • tokenAuth:基于 Token 的认证(可选)

例如:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: dockerhub-demo
spec:
  connectorClassName: oci
  address: https://index.docker.io
  # . . .
  auth:
    name: tokenAuth
    secretRef:
      name: oci-secret
---
apiVersion: v1
stringData:
  password: your-password
  username: your-username
kind: Secret
metadata:
  name: oci-secret
type: cpaas.io/distribution-registry-token

如果目标 OCI Registry 不需要认证,可以省略认证信息。配置示例如下:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: dockerhub-demo
spec:
  connectorClassName: oci
  address: https://index.docker.io
  auth:
    name: tokenAuth

代理与配置

为了让客户端能够无凭证访问 OCI 仓库,OCI Connector 类型提供了一个代理服务器,用于自动注入认证信息。

有访问 Connector 权限的客户端可以使用该代理服务器访问 OCI 仓库,无需在客户端侧配置凭证。

为简化使用,OCI Connector 类型提供了可通过 CSI 挂载到 Pod 中的配置信息。在 Pod 内执行 OCI 操作时,可以自动使用代理服务完成 OCI 操作。

代理

创建 Connector 时,系统将:

  1. 自动创建代理的 Service。
  2. status.proxy.httpAddress 字段记录代理地址。

您可以使用该代理地址进行镜像推拉操作。

例如:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: dockerhub-demo
  namespace: default
spec:
  address: https://index.docker.io
  auth:
    name: tokenAuth
    secretRef:
      name: dockerhub-demo
  connectorClassName: oci
status:
  conditions:
  # . . .
  proxy:
    httpAddress:
      url: http://c-dockerhub-demo.default.svc.cluster.local/namespaces/oci-connector-demo/connectors/oci-connector

配置

基于 OCI Connector 类型创建的 OCI Connector 提供以下配置:

docker-config:Docker CLI 所需的配置信息。

  • 提供 config.json 配置文件。
  • 包含访问代理所需的认证信息。

例如:

// config.json

{
  "auths": {
      "<proxy address of the connector>": {
          "auth": "<authentication information required to access the connector proxy>"
      }
  }
}

dockerd:Docker Daemon 的配置信息。

  • 提供 daemon.json 配置文件。
  • 配置文件中默认将当前 Connector 设置为 insecure-registries

例如:

{
  "insecure-registries": [
    "<proxy address of the connector>"
  ]
}

buildkitd:BuildKit Daemon 所需的配置信息。

  • 提供 buildkitd.toml 配置文件。
  • 配置文件中默认将当前 Connector 设置为 insecure-registries

例如:

insecure-entitlements = [ "network.host", "security.insecure" ]
[registry."<proxy address of the connector>"]
  http = true

您可以通过 connectors-csi 将这些配置信息挂载到 Pod 中,结合代理能力,实现无密推拉镜像操作。

更多