文章目录
- 一、Harbor 介绍?
- 二、部署流程
- 1、安装 Docker
- 2、安装 Docker-compose
- 3、下载 Harbor 安装包
- 4、Harbor 服务搭建
- 5、部署 SSL 认证
- 1、概念理解
- 2、创建根证书
- 6、服务启动
- 1、重启 Docker
- 2、运行脚本启动 Harbor
- 3、登录Web Harbor
- 7、Harbor 仓库的登录与登出验证
- 总结
一、Harbor 介绍?
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。
它以 Docker 公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access Control),AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
简单描述为了更安全、更有效的等方面的考虑,通过搭建 Harbor 私有仓库来管理 Docker 镜像,提供镜像的分发和存储。
二、部署流程
- 安装 Docker
- 安装 Docker-compose
- 下载 Harbor 安装包
- Harbor 服务搭建及启动
- 部署 SSL 认证
- 服务启动
- Harbor 仓库的登录与登出验证
1、安装 Docker
省略,后期专门出一期详细的 Docker 安装教程
2、安装 Docker-compose
### 下载工具
curl -L "https://github.com/docker/compose/releases/download/1.19.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
### 设置软链接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
### 查看版本
[root@k8s-harbor ~]# docker-compose -v
docker-compose version 1.19.0, build 9e633ef
3、下载 Harbor 安装包
官方路径:https://github.com/goharbor/harbor/releases/tag/v2.1.2
4、Harbor 服务搭建
### 解压
[root@k8s-harbor ~]# tar xf harbor-offline-installer-v2.1.2.tgz -C /home/
### 生成新的配置文件
[root@k8s-harbor harbor]# cat harbor.yml |grep -v '#'
hostname: 192.168.1.90
http:
port: 80
https:
port: 443
certificate: /home/harbor/cert/server.crt
private_key: /home/harbor/cert/server.key
harbor_admin_password: 12345678
database:
password: root123
max_idle_conns: 50
max_open_conns: 1000
data_volume: /home/harbor/data
clair:
updaters_interval: 12
trivy:
ignore_unfixed: false
skip_update: false
insecure: false
jobservice:
max_job_workers: 10
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 2.0.0
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- clair
- trivy
5、部署 SSL 认证
docker1.3.2 版本开始默认 docker registry 使用的是 https,我们设置 Harbor 默认 http 方式,所以当执行用 docker login、pull、push 等命令操作非 https 的 docker regsitry 的时就会报错。这里需要部署SSL 认证:
1、概念理解
1)签名证书与自签名证书
签名证书:由权威颁发机构颁发给服务器或者个人用于证明自己身份的东西
自签名证书:由服务器自己颁发给自己,用于证明自己身份的东西,非权威颁发机构发布
2)openssl
openssl 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用
3)KEY与CSR的区别
Key通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER。证书自身拥有一个密钥对(即一个公钥和一个私钥),由公钥(Public Key)与私钥(Private Key)是通过一种算法得到,公钥是密钥对中公开的部分,私钥则是非公开的部分。一般公钥和密钥的关系为:1,公钥和私钥成对出现、2,公开的密钥叫公钥,只有自己知道的叫私钥、3,用公钥加密的数据只有对应的私钥可以解密、4,用私钥加密的数据只有对应的公钥可以解密、5,如果可以用公钥解密,则必然是对应的私钥加的密、6,如果可以用私钥解密,则必然是对应的公钥加的密
CSR文件必须在申请和购买SSL证书之前创建。也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请 者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书
2、创建根证书
### 创建自己的CA证书(不使用第三方权威机构的CA来认证,自己充当CA的角色)
mkdir -p /home/harbor/cert/ && cd /home/harbor/cert/
### 生成根证书私钥(无加密)
openssl genrsa -out ca.key 2048 # 生成根证书私钥(无加密)
### 生成自签名证书(使用已有私钥ca.key自行签发根证书)
openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj "/CN=Harbor-ca"
### 创建服务器端证书
#### 生成服务器端私钥和CSR签名请求
openssl req -newkey rsa:4096 -nodes -sha256 -keyout server.key -out server.csr # 一路回车
#### 签发服务器证书
echo subjectAltName = IP:192.168.1.90 > extfile.cnf
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 999999 -extfile extfile.cnf -out server.crt
### 设置docker证书
#### 如果如下目录不存在,请创建,如果有域名请按此格式依次创建
mkdir -p /etc/docker/certs.d/192.168.1.90
##### 如果端口为443,则不需要指定。如果为自定义端口,请指定端口
##### /etc/docker/certs.d/yourdomain.com:port
### 将 ca 根证书依次复制到上述创建的目录中
cp ca.crt /etc/docker/certs.d/192.168.1.90
cp server.crt /etc/docker/certs.d/192.168.1.90
6、服务启动
证书创建完成之后,准备工作已经做完,现在可以启动脚本来启动程序
1、重启 Docker
systemctl restart docker
2、运行脚本启动 Harbor
[root@k8s-harbor harbor]# pwd
/home/harbor
[root@k8s-harbor harbor]# ./install.sh
3、登录Web Harbor
7、Harbor 仓库的登录与登出验证
# 登录仓库
docker login -u admin -p 123456 192.168.1.90
# 登出仓库
docker logout 192.168.1.90
如果docker需要从此仓库下载镜像需要在/etc/docker/daemon.json 文件中增加
"insecure-registries":["192.168.1.90"],
重启 Docker
systemctl daemon-reload
systemctl restart docker
总结
以上就是 Harbor 的介绍及部署,我对 Harbor 的了解没有那么深入,只是知道它是用作 Docker 镜像的私有仓库。更方便更有效的管理和使用镜像。