Docker Harbor私有仓库部署

Harbor的架构

Img
Img

  • Proxy: Harbor 的 Registry、 UI、Token 服务等组件,都处在nginx反向代理后边。该代理将来自浏览器、docker clients
    的请求转发到后端不同的服务上。

  • Registry:负责储存Docker 镜像,并处理Docker push/pull命令。由于要对用户进行访问控制,即不同用户对Docker 镜像
    有不同的读写权限,Registry 会指向一个Token 服务,强制用户的每次Docker pull/push 请求都要携带一个合法的Token,
    Registry会通过公钥对Token进行解密验证。

  • Core services:Harbor的核心功能,主要提供以下3个服务:

  1. UI (harbor-ui) :提供图形化界面,帮助用户管理Registry上的镜像 (image) ,并对用户进行授权。

  2. WebHook:为了及时获取Registry上image 状态变化的情况,在Registry上配置 Webhook, 把状态变化传递给 UI 模块。

  3. Token 服务:负责根据用户权限给每个Docker push/pull 命令签发Token。 Docker 客户端向Registry 服务发起的请求,如果不包含Token,会被重定向到 Token 服务,获得 Token 后再重新向Registry 进行请求。

  • Database (harbor -db) :为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。

  • Job services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。

  • Log collector (harbor-log) :负责收集其他组件的日志到一个地方。

Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。
总共分为7个容器运行,通过在 docker- compose.yml 所在目录中执行 docker-compose ps命令来查看,

名称分别为:nginx、 harbor-jobservice、 harbor-ui、 harbor-db、 harbor-adminserver、registry、 harbor-log。其中 harbor-adminserver 主要是作为一个后端的配置数据管理,并没有太多的其他功能。

harbor-ui 所要操作的所有数据都通过 harbor-adminserver 这样一个数据配置管理中心来完成。

生成证书颁发机构证书

  • 生成CA证书私钥

openssl genrsa -out ca.key 4096
  • 生成CA证书

调整-subj选项中的值以反映您的组织。如果使用FQDN连接Harbor主机,则必须将其指定为通用名称(CN)属性。
如果是ip访问, 将 harbor.lin-w.cn 改成 ip地址

openssl req -x509 -new -nodes -sha512 -days 36500 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.lin-w.cn" \
 -key ca.key \
 -out ca.crt

生成服务器证书

证书通常包含一个.crt文件和一个.key文件

  • 生成私钥

openssl genrsa -out harbor.lin-w.cn.key 4096
  • 生成证书签名请求(CSR)

如果是ip访问, 将 harbor.od.com 改成 ip地址

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.lin-w.cn" \
    -key harbor.lin-w.cn.key \
    -out harbor.lin-w.cn.csr
  • 生成一个x509 v3扩展文件

cat > v3.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor.lin-w.cn
DNS.2=lin-w.cn

DNS.3=172.25.16.51

EOF

  • 使用该v3.ext文件为您的Harbor主机生成证书

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in harbor.lin-w.cn.csr \
    -out harbor.lin-w.cn.crt

提供证书给Harbor和Docker

  • 转换证书

openssl x509 -inform PEM -in harbor.lin-w.cn.crt -out harbor.lin-w.cn.cert
  • 复制证书到指定目录

mkdir -p /data/harbor/cert
cp harbor.lin-w.cn.cert /data/harbor/cert/
cp harbor.lin-w.cn.key /data/harbor/cert/
cp ca.crt /data/harbor/cert/
  • 查看证书信息

openssl x509 -in harbor.lin-w.cn.crt -noout -text

安装harbor

#下载安装包
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
#解压安装包
tar zxvf harbor-offline-installer-v2.10.0.tgz
cd harbor
#修改配置
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
#执行prepare脚本以启用HTTPS
./prepare