配置 Redis、PostgreSQL、ObjectStorage(s3)及账户访问凭证

本文档介绍 Harbor 实例所需凭证的配置方法。

前提条件

  • 本文档适用于平台提供的 Harbor 2.14 及以上版本,基于 Operator 等技术实现与平台解耦。

Redis 凭证

要求

Harbor 对 Redis 部署有以下要求:

  • 推荐使用 Redis 7.x 版本。
  • 支持 StandaloneSentinel 两种部署模式,但不支持 Redis Cluster 模式。

详细的 Redis 部署说明,请参考 Harbor 官方文档

凭证格式

在计划部署 Harbor 实例的命名空间中创建一个 Secret,选择 Opaque 类型,并在配置中添加并填写以下字段:

字段说明适用架构示例值
hostRedis 连接地址,确保 Harbor 服务可以连接该地址。standalone192.168.1.1
portRedis 连接端口,确保 Harbor 服务可以连接该端口。standalone6379
passwordRedis 实例账号密码,开启 Redis 认证时必填。standalone,sentinelpassword111
addressSentinel 节点连接地址。sentinel192.168.1.1:26379,192.168.1.2:26379,192.168.1.3:26379
masterNameSentinel 配置文件 sentinel.conf 中监控的实例组名称。sentinelmymaster
WARNING
  1. 当同时存在 sentinel 和 standalone 配置时,优先使用 sentinel 配置。
  2. 使用高可用模板部署时,如果配置了 standalone Redis,用户需自行保证 Redis 实例的高可用性。

Standalone 示例:

apiVersion: v1
data:
  host: <base64 encode host>
  port: <base64 encode port>
  password: <base64 encode password>
kind: Secret
metadata:
  name: harbor-redis
  namespace: <ns-of-harbor-instance>
type: Opaque

Sentinel 示例:

apiVersion: v1
data:
  password: <base64 encode password>
  address: <base64 encode address>
  masterName: <base64 encode masterName>
kind: Secret
metadata:
  name: harbor-redis
  namespace: <ns-of-harbor-instance>
type: Opaque

更新凭证

部署 Harbor 实例后,如需修改 Redis 连接信息,应直接更新 Harbor 实例资源,而非修改凭证内容。具体操作请参考 配置 Redis 访问凭证

使用 Alauda Cache Service for Redis OSS

通过 Alauda Cache Service for Redis OSS 提供 Redis 服务时,请注意以下重要要求:

  • 推荐使用 Redis 7.x 版本。
  • 架构类型请选择 Sentinel 模式。
  • 参数模板请选择 RDB 持久化模板,如 system-rdb-redis-7.2-sentinel。
  • 开启数据持久化,存储配额不少于 2G。
  • 多网卡场景下,Redis Sentinel 会选择节点默认 IP 初始化各 Redis 节点的访问地址,不支持使用非默认 IP + 暴露端口访问节点。请使用 LoadBalancer 方式创建 Redis 实例。详情请参考 Alauda Cache Service for Redis OSS 功能说明文档。
WARNING

当前不支持通过 TLS 模式 连接 Alauda Cache Service for Redis OSS。

WARNING

创建 Redis 实例时,会自动生成包含连接信息的 Secret,可直接用于 Harbor 部署。该 Secret 资源可通过标签 middleware.instance/type: Redis 进行筛选。

kubectl get secret -n <ns-of-redis-instance> -l middleware.instance/type=Redis

若 Redis 实例与 Harbor 实例不在同一命名空间,需将 Secret 资源复制到 Harbor 实例所在命名空间。

更多 Redis 部署参数及高可用部署要求,请参考 Redis 部署文档

PostgreSQL 凭证

要求

Harbor 对 PostgreSQL 版本有以下要求:

Harbor 版本支持的 PostgreSQL 版本
2.12.z14.x
2.14.z15.x、16.x

凭证格式

在计划部署 Harbor 实例的命名空间中创建一个 Secret,选择 Opaque 类型,并在配置中添加并填写以下字段:

字段说明示例值
host数据库连接地址,确保 Harbor 服务可以连接该数据库地址。192.168.1.1
port数据库连接端口,确保 Harbor 服务可以连接该数据库端口。5432
username数据库账号用户名postgres
password数据库账号密码password111
database数据库名称,该数据库必须已存在且为空。可使用命令 create database <database name> 创建数据库harbor_db
sslmode是否启用数据库连接的 SSL,选项包括:
- require:要求 SSL 连接
- disable:禁用 SSL 连接
- verify-ca:验证服务器证书
- verify-full:验证服务器证书及主机名。更多信息见 sslmode
require

YAML 示例:

apiVersion: v1
data:
  database: <base64 encode database name>
  host: <base64 encode host>
  password: <base64 encode password>
  port: <base64 encode port>
  username: <base64 encode username>
  sslmode: <base64 encode sslmode>
kind: Secret
metadata:
  name: harbor-database
  namespace: <ns-of-harbor-instance>
type: Opaque

如何在 PG 实例上创建数据库

使用 psql 命令行连接 PG 实例,执行以下命令创建数据库:

create database <database name>;

sslmode

sslmode 是控制 Harbor 服务与 PostgreSQL 数据库连接安全性的参数,选项包括:

  • require:要求 SSL 连接
  • disable:禁用 SSL 连接
  • verify-ca:验证服务器证书
  • verify-full:验证服务器证书及主机名

使用 Alauda support for PostgreSQL 时,sslmode 应设置为 require

使用外部 PostgreSQL 时,sslmode 取决于您的 PostgreSQL 配置。

更新凭证

部署 Harbor 实例后,如需修改 PostgreSQL 连接信息,应直接更新 Harbor 实例资源,而非修改凭证内容。具体操作请参考 配置 PostgreSQL 凭证

使用数据服务提供的 PostgreSQL

Data Services 支持部署可用于 Harbor 部署的 PostgreSQL 实例。创建 PostgreSQL 实例时,请注意以下重要要求:

  1. 选择与 Harbor 版本匹配的 PostgreSQL 版本,例如部署 Harbor 2.14.x 时需选择 PostgreSQL 15.x。
  2. 存储配额不少于 5Gi。

创建 PostgreSQL 实例时,会自动生成包含连接信息的 Secret,可通过标签 middleware.instance/type: PostgreSQL 进行筛选。

kubectl get secret -n <ns-of-postgresql-instance> -l middleware.instance/type=PostgreSQL | grep -E '^postgres'

该 Secret 包含 hostportusernamepassword 信息。您需基于此 Secret 补充 databasesslmode(设置为 require)信息,并在 Harbor 实例所在命名空间创建新的 Secret。

创建 Postgres 实例时,会自动生成以 postgres 开头且包含连接信息的 Secret,可直接用于 Harbor 部署,筛选命令如下:

kubectl get secret -n <ns-of-postgres-instance> -l middleware.instance/type=PostgreSQL

若 Postgres 实例与 Harbor 实例不在同一命名空间,需将 Secret 资源复制到 Harbor 实例所在命名空间。

更多 PostgreSQL 部署参数及要求,请参考 PostgreSQL 部署文档

Harbor 账户凭证

在计划部署 Harbor 实例的命名空间中创建一个 Secret,选择 Opaque 类型,并在配置中添加并填写以下字段:

字段说明示例值
password设置默认管理员账户密码,密码必须包含字母、数字和特殊字符,且长度不少于 8 位,且不能使用该密码作为用户名password111@
namespace设置与 Harbor 实例相同的命名空间tools

默认用户名为 admin。

apiVersion: v1
data:
  password: <base64 encode password>
kind: Secret
metadata:
  name: harbor-admin-password
  namespace: <ns-of-harbor-instance>
type: Opaque

对象存储凭证

当 Harbor 使用 ObjectStorage 作为 Registry 存储后端时,需要创建 Secret 来存储对象存储凭证。

字段说明示例值
REGISTRY_STORAGE_S3_ACCESSKEY对象存储访问密钥XVOHXUQ5QMKSA10O7ZI2
REGISTRY_STORAGE_S3_SECRETKEY对象存储密钥X4Dz4IQzpcwQMeshNY2g3skWwDgM12RIJsDrJuG5
apiVersion: v1
data:
  REGISTRY_STORAGE_S3_ACCESSKEY: <base64 encode access key>
  REGISTRY_STORAGE_S3_SECRETKEY: <base64 encoded secret key>
kind: Secret
metadata:
  name: object-storage-secret
  namespace: <ns-of-harbor-instance>
type: Opaque

Registry 推送和拉取操作需要以下策略,请确保将 S3_BUCKET_NAME 替换为您的桶名称。

如果尚无账户,请先创建账户并附加以下策略。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::S3_BUCKET_NAME"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload"
      ],
      "Resource": "arn:aws:s3:::S3_BUCKET_NAME/*"
    }
  ]
}

更多存储相关信息,请参考 Harbor 存储