OCI Connector

OCI Connector — это платформонезависимый коннектор, который позволяет подключаться к любому OCI Registry, например Docker Hub, Harbor и т.д. Вы можете использовать OCI Connector для безопасного доступа к приватным OCI-репозиториям в CI/CD пайплайнах или выполнять операции с OCI в контейнеризованных нагрузках без предоставления учетных данных. Кроме того, вы можете централизованно управлять конфигурациями доступа к OCI, избегая необходимости дублировать настройки учетных данных OCI в каждом namespace.

В этом документе описано:

  • Требования к доступу к 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

Вы можете добавить описательную информацию к OCI Connector через поле annotations.

  • 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.

Аутентификация

Поддерживаемые типы аутентификации для OCI Connector:

  • tokenAuth: аутентификация на основе токена (опционально)
    • Соответствующий тип учетных данных: cpaas.io/distribution-registry-token, этот тип учетных данных используется для процесса аутентификации, определённого в CNCF Distribution Token Authentication Specification, и учетные данные должны содержать информацию username и password.

Например:

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 предлагает прокси-сервер, который автоматически внедряет информацию об аутентификации.

Клиенты, имеющие доступ к коннектору, могут использовать этот прокси-сервер для доступа к OCI-репозиториям без необходимости настраивать учетные данные на стороне клиента.

Для упрощения использования тип OCI Connector предоставляет конфигурационную информацию, которую можно монтировать в Pods через CSI. В Pod при выполнении операций с OCI автоматически может использоваться прокси-сервис для завершения операций с OCI.

Proxy

При создании Connector система:

  1. Автоматически создаст Service для прокси.
  2. Запишет адрес прокси в поле status.proxy.httpAddress.

Вы можете использовать этот адрес прокси для операций push и pull образов.

Например:

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.
  • В конфигурационном файле текущий коннектор по умолчанию будет установлен в insecure-registries.

Например:

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

buildkitd: конфигурационная информация, необходимая для BuildKit Daemon.

  • Предоставляет файл конфигурации buildkitd.toml.
  • В конфигурационном файле текущий коннектор по умолчанию будет установлен в insecure-registries.

Например:

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

Вы можете монтировать эту конфигурационную информацию в Pods с помощью connectors-csi и, в сочетании с возможностями прокси, выполнять операции push или pull образов без использования секретов.

Дополнительно