Harbor致力于成为 Kubernetes 值得信赖的云原生存储库,帮助我们搭建属于自己的私有仓库,与Docker hub相比(1、上传下载镜像快 2、保护企业内部的镜像不被泄露),提供了管理UI、基于角色的访问控制、审计日志等企业用户需求的功能
安装条件CPU 2-4核,推荐4核 内存 4-8G,推荐8G 硬盘 40-160G,推荐160G Docker engine [Version 17.06.0-ce+ or higher] Docker Compose [Version 1.18.0 or higher] Openssl [Latest is preferred] 80 [Harbor portal and core API accept HTTP requests on this port] 443 [Harbor portal and core API accept HTTPS requests on this port] 4443 [Connections to the Docker Content Trust service for Harbor]下载
1、在线安装程序:联机安装程序从 Docker 中心下载 Harbor 映像。因此,安装程序的尺寸非常小 2、脱机安装程序:如果要将 Harbor 部署到的主机没有连接到 Internet,请使用脱机安装程序。脱机安装程序包含预构建的映像,因此它比联机安装程序大
# 获取文件的公钥 gpg --keyserver hkps://keyserver.ubuntu.com --receive-keys 644FF454C0B4115C # 在线安装程序校验 gpg -v --keyserver hkps://keyserver.ubuntu.com --verify harbor-online-installer-v2.5.0.tgz.asc # 脱机安装程序校验 gpg -v --keyserver hkps://keyserver.ubuntu.com --verify harbor-offline-installer-version.tgz.asc安装
# 上传相关包到当前目录(在线安装包、安装包校验文件) cd /usr/local && mkdir harbor && cd harbor # 解压在线安装包 mv /home/lixing/harbor-online-installer-v2.5.0.tgz /usr/local/harbor tar xzvf harbor-online-installer-v2.5.0.tgz mv harbor harbor2.5.0
默认情况下Harbor 不附带证书,通过HTTP即可访问,在生产环境中请始终使用 HTTPS。若要配置 HTTPS,必须创建 SSL 证书。可以使用由受信任的第三方 CA 签名的证书,也可以使用自签名证书。以下将介绍如何使用 OpenSSL 创建 CA,以及如何使用 CA 对服务器证书和客户端证书进行签名
# 生成【CA】证书私钥 openssl genrsa -out /usr/local/harbor/certificate/ca.key 4096 # 生成【CA】证书,注意:CN=<主机域名> openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.213.142" -key /usr/local/harbor/certificate/ca.key -out /usr/local/harbor/certificate/ca.crt
# 生成【服务器】证书私钥
openssl genrsa -out /usr/local/harbor/certificate/<主机域名>.key 4096
# 成服【服务器】证书,注意:CN=<主机的域名>
openssl req -sha512 -new
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=<主机域名>"
-key /usr/local/harbor/certificate/<主机域名>.key
-out /usr/local/harbor/certificate/<主机域名>.csr
# 生成 x509 v3 扩展文件 cd /usr/local/harbor/certificate # 执行以下命令,注意需要动态修改alt_names的相关字段: cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1=DNS.2= DNS.3= EOF
# 使用 ca.crt、ca.key、v3.ext、192.168.213.134.csr 文件 为hrobor主机生成 192.168.213.134.crt 证书
openssl x509 -req -sha512 -days 3650
-extfile /usr/local/harbor/certificate/v3.ext
-CA /usr/local/harbor/certificate/ca.crt -CAkey /usr/local/harbor/certificate/ca.key -CAcreateserial
-in /usr/local/harbor/certificate/192.168.213.142.csr
-out /usr/local/harbor/certificate/192.168.213.142.crt
# 为 Harbor 和 Docker 提供证书 # 将服务器证书、密钥复制到 Harbor 主机上的证书文件夹中 cp /usr/local/harbor/certificate/192.168.213.142.crt /data/cert/ cp /usr/local/harbor/certificate/192.168.213.142.key /data/cert/ # 转换 <主机域名>.crt 为 <主机域名>.cert,供 Docker 使用 openssl x509 -inform PEM -in <主机域名>.crt -out <主机域名>.cert # 将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中,需要先创建相应的文件夹 cp /data/cert/192.168.213.142.cert /etc/docker/certs.d/<主机域名>/ cp /data/cert/192.168.213.142.key /etc/docker/certs.d/<主机域名>/ cp /usr/local/harbor/certificate/ca.crt /etc/docker/certs.d/<主机域名>/ # 重启docker systemctl daemon-reload && systemctl restart docker && systemctl status docker
# 配置 harbor.yml 详见官方文档 cd /usr/local/harbor/harbor2.5.0 && cp harbor.yml.tmpl harbor.yml # 安装 harbor cd /usr/local/harbor/harbor2.5.0 && ./install.sh
# 浏览器访问,初始账号admin 初始密码Harbor12345 http://192.168.213.142 https://192.168.213.142
# 停止 cd /usr/local/harbor/harbor2.5.0 && sudo docker-compose stop # 启动 cd /usr/local/harbor/harbor2.5.0 && sudo docker-compose start创建项目
# 构建本地Docker镜像 docker build -t demo:20211208 .
# 将本地镜像像【镜像REPOSITORY:镜像TAG】标记到Harbor存储库【镜像REPOSITORY:镜像TAG】 docker tag demo:20211208 192.168.213.142/pro_demo/demo:20211208
# push标记的镜像到harbor
docker push 192.168.213.142/pro_demo/demo:20211208
# 问题1:
# Get "https://192.168.213.142/v2/": x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0
# vim /etc/docker/daemon.json 追加如下配置
{
"insecure-registries":["192.168.213.142"]
}
docker pull 192.168.213.142/pro_demo/demo:20211208



