文章目录

  • 一、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

harbor配置外部mysql数据库 harbor安装部署_运维

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

harbor配置外部mysql数据库 harbor安装部署_运维_02

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 镜像的私有仓库。更方便更有效的管理和使用镜像。