Docker Harbor私有仓库部署
Docker Harbor私有仓库部署
Harbor的架构
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个服务:
UI (harbor-ui) :提供图形化界面,帮助用户管理Registry上的镜像 (image) ,并对用户进行授权。
WebHook:为了及时获取Registry上image 状态变化的情况,在Registry上配置 Webhook, 把状态变化传递给 UI 模块。
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