快速开始

本文档将帮助您快速了解如何创建 Harbor connector,以连接到 Harbor registry 并安全地执行容器镜像操作,而无需直接处理凭据。

我们将创建一个 Harbor connector,并使用它执行容器镜像操作,而无需在客户端直接处理凭据。

预计阅读时间

15 分钟

前提条件

  • 已安装 Connectors 系统(Operator、ConnectorsCore 和 ConnectorsHarbor 组件)的 Kubernetes 集群。有关安装这些组件的详细信息,请参阅安装指南
  • Harbor registry 地址和凭据
  • 具备 Kubernetes 和容器 registry 的基础知识
  • Harbor registry 应可访问并支持标准容器 registry API

流程概览

步骤操作说明
1创建 Namespace为演示设置专用的 namespace
2配置 Harbor Registry 凭据及 Connector创建认证 secret 和 Harbor connector 资源
3创建执行容器操作的 Job创建通过 connector 执行容器操作的 Job
4验证操作检查镜像是否成功构建并推送

操作步骤

第 1 步:创建 Namespace

为本次演示创建专用的 namespace:

kubectl create ns connectors-harbor-demo

第 2 步:创建 Harbor Registry 凭据和 Connector

创建包含 Harbor registry 凭据的 Secret 和 Harbor connector 资源。

有关创建和配置 connector 的详细信息,请参阅Connectors 快速开始指南

cat <<EOF | kubectl apply -n connectors-harbor-demo -f -
kind: Secret
apiVersion: v1
metadata:
  name: harbor-secret
type: kubernetes.io/basic-auth
stringData:
  username: your-username # 替换为您的 Harbor registry 用户名
  password: your-password # 替换为您的 Harbor registry 密码
---
apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: harbor-connector
spec:
  connectorClassName: harbor
  address: https://harbor.example.com # 替换为您的 Harbor registry 地址
  auth:
    name: basicAuth
    secretRef:
      name: harbor-secret
EOF

验证 connector 是否就绪:

kubectl get connector harbor-connector -n connectors-harbor-demo

第 3 步:创建执行容器操作的 Job

创建包含示例 Dockerfile 的 ConfigMap:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: dockerfile
  namespace: oci-connector-demo
data:
  Dockerfile: |
    FROM scratch
    LABEL maintainer="example@example.com"
    WORKDIR /app
    ENV APP_VERSION="1.0.0"
EOF

创建使用 connector 构建并推送容器镜像的 Job:

cat <<EOF | kubectl apply -f -
apiVersion: batch/v1
kind: Job
metadata:
  name: image-build
  namespace: oci-connector-demo
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: buildkit
        image: moby/buildkit:v0.11.0
        securityContext:
          privileged: true
        env:
        - name: BUILDKITD_FLAGS
          value: "--config /etc/buildkit/buildkitd.toml"
        command:
        - /bin/sh
        - -c
        args:
        - |
          set -ex
          export http_proxy=$(cat /tmp/http.proxy)
          export https_proxy=$(cat /tmp/https.proxy)
          export HTTP_PROXY=$http_proxy
          export HTTPS_PROXY=$https_proxy
          export no_proxy=localhost,127.0.0.1
          export NO_PROXY=$no_proxy
          echo "Using proxy: http_proxy=$http_proxy, https_proxy=$https_proxy, no_proxy=$no_proxy"

          buildctl-daemonless.sh \
          build \
          --progress=plain \
          --frontend=dockerfile.v0 \
          --local context=/workspace \
          --local dockerfile=/workspace \
          --output type=image,name=harbor.example.com/library/image:v1,push=true
        volumeMounts:
        - name: dockerfile
          mountPath: /workspace
        - name: proxyconfig
          mountPath: /tmp/
      volumes:
      - name: dockerfile
        configMap:
          name: dockerfile
      - name: proxyconfig
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "harbor-connector"
EOF

验证 Job 是否正在运行:

kubectl get job image-build -n connectors-harbor-demo

卷定义中的关键参数:

  • connector.name:您的 OCI connector 名称
  • configuration.names:指定从 OCI ConnectorClass 生成哪些配置:
    • "config":生成任何 registry 操作所需的认证配置(config.json)
    • "buildkitd":生成 BuildKit daemon 配置,用于不安全的 registry 访问
    • 如果未指定,则挂载默认配置
  • mountPath:指定配置文件在容器中的挂载路径:
    • 对于 buildkit 认证配置,通常为 "/root/.docker"

第 4 步:验证操作

查看 Job 日志,确认镜像是否成功构建并推送:

kubectl logs -f job/image-build -n oci-connector-demo

您应能看到构建过程完成并将镜像推送到 registry。

工作原理

Harbor Connector 的工作流程:

  1. 创建代理服务,负责 Harbor registry 的认证
  2. 通过 CSI 驱动将代理配置挂载到 Pod 中
  3. 在容器镜像操作过程中通过环境变量使用代理配置
  4. 代理服务验证代理配置并注入 Harbor registry 认证凭据

这样,工作负载即可访问 Harbor registry,而无需直接处理凭据。