Harbor 概述

Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展, 从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及 审计日志等,足以满足基本企业需求。

官方:https://goharbor.io/

Github:https://github.com/goharbor/harbor

Harbor 部署先决条件

服务器硬件配置:

最低要求:CPU2核/内存4G/硬盘40GB

推荐:CPU4核/内存8G/硬盘160GB

软件:

Docker CE 17.06版本+

Docker Compose 1.18版本+

Harbor安装有2种方式:

在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小

离线安装:安装包包含部署的相关镜像,因此安装包比较大

Harbor 部署HTTP

1、先安装Docker和Docker Compose

https://github.com/docker/compose/releases

2、部署Harbor HTTP

mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose

tar zxvf harbor-offline-installer-v2.0.0.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml

vi harbor.yml
hostname: reg.azhe.com
#https: # 先注释https相关配置
harbor_admin_password: Harbor12345
./prepare
./install.sh

3、访问harbor

http://reg.azhe.com/

Harbor 基本使用

1、配置http镜像仓库可信任(默认是https访问的,上面配置的是http,这里需要配置可信任)

#配置http镜像仓库可信任
vi /etc/docker/daemon.json
{"insecure-registries":["reg.azhe.com"]}
systemctl restart docker
#查看是否有harbor容器退出,重新停止再拉起
docker-compose ps
docker-compose down
docker-compose up -d

2.配置本地hosts文件解析

vim /etc/hosts
192.168.0.11 reg.azhe.com

3.登录harbbor,打标签,上传,下载

docker login reg.azhe.com
Username: admin
Password: Harbor12345

docker /images
docker tag mysql:5.7 reg.azhe.com/library/mysql:5.7
docker push reg.azhe.com/library/mysql:5.7
docker pull reg.azhe.com/library/mysql:5.7

Harbor 部署HTTPS

1、生成SSL证书

mkdir ssl
cd ssl
ls
ca-config.json ca-key.pem cfssl.sh reg.azhe.com-key.pem
ca.csr ca.pem reg.azhe.com.csr reg.azhe.com.pem
ca-csr.json certs.sh reg.azhe.com-csr.json

vim cfssl.sh (证书生成工具)

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl*
mv cfssl_linux-amd64 /usr/bin/cfssl
mv cfssljson_linux-amd64 /usr/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

vim certs.sh(证书生成脚本)

#注意里面的域名修改为自己的harbor域名

cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF

cat > ca-csr.json <<EOF
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
EOF

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

cat > reg.azhe.com-csr.json <<EOF
{
"CN": "reg.azhe.com",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes reg.azhe.com-csr.json | cfssljson -bare reg.azhe.com

2、Harbor启用HTTPS

vi harbor.yml
https:
port: 443
certificate: /root/ssl/reg.azhe.com.pem #指定你生成的数字证书
private_key: /root/ssl/reg.azhe.com-key.pem #指定key

3、重新配置并部署Harbor

./prepare 
docker-compose down
docker-compose up –d

4、修改Docker启动文件添加“–insecure-registry reg.azhe.com”并配置hosts文件

vim /usr/lib/systemd/system/docker.service 
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry reg.azhe.com

systemctl restart docker
vim /etc/hosts
192.168.0.11 reg.azhe.com

5、验证

docker login reg.azhe.com
Username: admin
Password: Harbor12345

docker /images
docker pull reg.azhe.com/library/mysql:5.7

以上harbor部署https方式的第4步骤,如果配置完成后,在docker主机登录harbor报证书错误,那么可以通过以下方式解决或参考链接:

4.将数字证书复制到Docker主机

scp reg.azhe.com.pem root@192.168.0.13:~   #拷贝到要登录harbor的docker客户端
mkdir /etc/docker/certs.d/reg.azhe.com
cp reg.azhe.com.pem /etc/docker/certs.d/reg.azhe.com/reg.azhe.com.crt

参考链接

https://blog.csdn.net/chenglang0914/article/details/100833054

Harbor 主从复制

主备模式

1.准备备机harbor

mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose

tar -zxf harbor-offline-installer-v2.0.0.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml

vi harbor.yml
hostname: 192.168.0.12
#https: # 先注释https相关配置
harbor_admin_password: Harbor12345
./prepare
./install.sh

2.在主harbor页面配置主从复制和规则

3.客户端docker主机上传镜像到主harbor并验证是否复制到从harbor

docker login reg.azhe.com
Username: admin
Password: Harbor12345

docker tag centos:7 reg.azhe.com/library/centos:7
docker push reg.azhe.com/library/centos:7

Harbor 运维维护

容器数据持久化目录:/data

日志文件目录:/var/log/harbor

PG数据库做好定期备份,里面存放用户数据文件。

主从复制,主harbor挂掉,启用备harbor,需要把pg数据导入到备harbor。