暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Harbor配置使用S3存储

老柴杂货铺 2025-04-13
824
Harbor 支持将 S3 兼容对象存储作为镜像仓库的后端存储,适用于大规模生产环境和混合云场景。以下是配置要点、常见问题及解决方案的总结:

一、S3 存储配置步骤

1.修改 harbor.yml 文件

在 storage_service 部分启用 S3 配置,并填写认证信息与存储参数:

    storage_service:
      s3:
        accesskey: admin          # S3 访问密钥
        secretkey: your_strong_password       # S3 私有密钥
        region: us-west-1              # 区域(Minio 默认为 us-west-1,AWS 需按实际填写)
        regionendpoint: http://10.168.2.135:9000  # S3 服务访问地址
        bucket: harbor                  # 存储桶名称
        secure: false                   # 是否启用 HTTPS(Minio 默认 HTTP)
        multipartcopythresholdsize: "5368709120"  # 分段上传阈值(建议调大至 5GB)

    2.配置存储桶权限

    确保 S3 存储桶策略允许 Harbor 的读写权限。例如 AWS S3 策略需包含 s3:PutObject、s3:GetObject 等操作(Minio 等自建 S3 服务默认无严格权限控制,但生产环境建议启用)

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": ["s3:*"],
            "Resource": ["arn:aws:s3:::my-bucket/*"]
          }
        ]
      }

      3.重启 Harbor 服务

        # 修改配置后,需要重新检查运行环境
        ./prepare
        # 关闭harbor
        docker-compose down -v
        # 启动harbor
        docker-compose up -d
        # 将之前harbor数据复制到s3
        mc cp /mnt/registry/registry/docker local/harbor/ --recursive 

        4.测试镜像上传

        重启后通过 docker push 测试镜像上传,并在 S3 控制台验证文件生成

        在harbor上新建项目mypy,将新建用户chkov添加为mypy项目管理员,查看推送命令

        编辑/etc/docker/daemon.json,添加如下语句解决ssl证书问题

          "insecure-registries": ["registry.chkov.local"],
          在test目录下新建Dockerfile,构建测试镜像
            mkdir test&&cd test
            tee Dockerfile <<EOF
            FROM python:3.9-slim
            WORKDIR /app
            COPY requirements.txt ./
            RUN pip install --no-cache-dir -r requirements.txt  # 禁用 pip 缓存
            COPY . .
            CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:8000"]
            EOF
            # 构建镜像
            docker build -t registry.chkov.local/mypy/mypy:2.0 -f ./Dockerfile .
            # 登录harbor
            docker login https://registry.chkov.local
            docker push registry.chkov.local/mypy/mypy:2.0
            在Harbor查看镜像信息
            在minio查看
            二、常见问题与解决方案

            1.连接超时或端点不可达

            表现:日志报错 dial tcp: lookup s3.example.com... i/o timeout。

            原因:regionendpoint 地址错误或网络不通。

            解决:

            检查 regionendpoint 是否可解析(如通过 curl 测试连通性)。

            若使用自建 S3(如 Minio),确保端口开放且防火墙规则允许访问。

            2.认证失败

            表现:s3aws: AccessDenied 或 InvalidAccessKeyId。

            原因:密钥错误或权限不足。

            解决:

            验证 accesskey 和 secretkey 是否与 S3 服务一致。

            检查存储桶策略是否授予足够权限(如 s3:ListBucket。

            3.分段上传失败

            表现:大文件上传中断或报错。

            原因:multipartcopythresholdsize 过小或网络不稳定。

            解决:

            将 multipartcopythresholdsize 调至 5GB(值需为字符串格式)。

            优化网络带宽或启用重试机制。

            三、最佳实践与优化

            存储性能优化

            启用 HTTPS:生产环境建议设置 secure: true 并配置 TLS 证书,确保数据传输加密。

            调整分段参数:根据网络带宽调整 chunksize(默认 5MB)和 multipartcopymaxconcurrency(并发数)。

            高可用架构

            多副本存储:结合 S3 的多 AZ 存储或版本控制功能,防止数据丢失。

            Harbor HA 部署:通过 Helm 部署多实例 Harbor,并共享同一 S3 存储桶。

            生命周期管理

            在 S3 中配置自动清理策略,定期删除过期镜像层,降低存储成本。

            通过以上配置与优化,Harbor 可高效利用 S3 存储实现镜像管理,适用于云原生及混合云场景。具体操作细节可参考 Harbor 官方文档(https://goharbor.io/docs/2.12.0/)

            文章转载自老柴杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论