Harbor私有仓库部署

Harbor介绍

Harbor是由VMware公司开源的企业级的Docker Registry管理项目,Harbor主要提供Dcoker Registry管理UI,提供的功能包括:基于角色访问的控制权限管理(RBAC)、AD/LDAP集成、日志审核、管理界面、自我注册、镜像复制和中文支持等。Harbor的目标是帮助用户迅速搭建一个企业级的Docker registry服务。它以Docker公司开源的registry为基础。

Harbor的所有组件都在Dcoker中部署,所以Harbor可使用Docker Compose快速部署。需要特别注意:由于Harbor是基于Docker Registry V2版本,所以docker必须大于等于1.10.0版本,docker-compose必须要大于1.6.0版本!

各组件功能如下:

harbor-adminserver:配置管理中心
harbor-dbMysql:数据库
harbor-jobservice:负责镜像复制
harbor-log:记录操作日志
harbor-ui:Web管理页面和API
nginx:前端代理,负责前端页面和镜像上传/下载转发
redis:会话
registry:镜像存储

Nginx(Proxy代理层):Nginx前端代理,主要用于分发前端页面ui访问和镜像上传和下载流量; Harbor的registry,UI,token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务
Registry v2:镜像仓库,负责存储镜像文件; Docker官方镜像仓库, 负责储存Docker镜像,并处理docker push/pull命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token进行解密验证
Database(MySQL或Postgresql):为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据
Core services(Admin Server):这是Harbor的核心功能,主要提供以下服务:

  • UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权
  • webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块
  • Auth服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求
  • API: 提供Harbor,RESTful API

Replication Job Service:提供多个 Harbor 实例之间的镜像同步功能
Log collector:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析

Harbor组件数据流向

在这里插入图片描述

  • proxy,它是一个nginx前端代理,主要是分发前端页面ui访问和镜像上传和下载流量,上图中通过深蓝色先标识;
  • ui提供了一个web管理页面,当然还包括了一个前端页面和后端API,底层使用mysql数据库;
  • registry是镜像仓库,负责存储镜像文件,当镜像上传完毕后通过hook通知ui创建repository,上图通过红色线标识,当然registry的token认证也是通过ui组件完成;
  • adminserver是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置,通过灰色线标识;
  • jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log,上图通过紫色线标识;
  • log是日志汇总组件,通过docker的log-driver把日志汇总到一起,通过浅蓝色线条标识。

实验环境:

角色IP
Harbor172.16.3.225/21
Client172.16.3.226/21

实验步骤:

1)安装Docker,关闭firewalld,Selinux,步骤省略…

[root@k8s-master01 ~]# vim /usr/lib/systemd/system/docker.service 
在ExecStart后面添加:
	--insecure-registry=hub.china.com			# 因为我们的仓库是不安全的,所以我们需要在这里告诉Docker让他相信我们这个仓库是可呗信用的
[root@k8s-master01 ~]# systemctl daemon-reload 
[root@k8s-master01 ~]# systemctl restart docker

Docker-compose下载地址
Harbor仓库下载地址

2) 安装Harbor

[root@k8s-master01 ~]# wget https://github.com/goharbor/harbor/releases/download/v2.1.3/harbor-offline-installer-v2.1.3.tgz
[root@k8s-master01 ~]# wget https://github.com/docker/compose/releases/download/1.25.0-rc4/docker-compose-Linux-x86_64
[root@k8s-master01 ~]# mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
[root@k8s-master01 ~]# chmod a+x /usr/local/bin/docker-compose 
[root@k8s-master01 ~]# docker-compose -v
docker-compose version 1.25.0-rc4, build 8f3c9c58
[root@k8s-master01 ~]# tar zxf harbor-offline-installer-v2.1.3.tgz
[root@k8s-master01 ~]# mv harbor /usr/local/
[root@k8s-master01 ~]# cd /usr/local/harbor/
[root@k8s-master01 harbor]# cp harbor.yml.tmpl harbor.yml
[root@k8s-master01 harbor]# cat > harbor.yml << EOF
hostname: hub.china.com
https:
  port: 443
  certificate: /usr/local/harbor/cert/server.crt
  private_key: /usr/local/harbor/cert/server.key
harbor_admin_password: Harbor12345
database:
  password: root123
  max_idle_conns: 50
  max_open_conns: 1000
data_volume: /usr/local/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
EOF
[root@k8s-master01 harbor]# mkdir cert
[root@k8s-master01 harbor]# cd cert/

3)创建https证书以及配置相关目录权限

[root@k8s-master01 cert]# openssl genrsa -des3 -out server.key 2048			  	# 生成私钥
Generating RSA private key, 2048 bit long modulus
........................................................................................+++
..............................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:   # 给私钥设置一个密码
Verifying - Enter pass phrase for server.key:   # 确认密码
[root@k8s-master01 cert]# openssl req -new -key server.key -out server.csr		# 创建证书的请求
Enter pass phrase for server.key:	# 输入你刚刚创建私钥的密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN 
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:hub.china.com
Email Address []:hub@china.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@k8s-master01 cert]# cp server.key server.key.org							# 私钥备份
[root@k8s-master01 cert]# openssl rsa -in server.key.org -out server.key 		# 转换成证书,退出密码
Enter pass phrase for server.key.org:	# 输入私钥密码
writing RSA key
[root@k8s-master01 cert]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt			# 签名证书
[root@k8s-master01 ~]# chmod a+x *
[root@k8s-master01 cert]# cd ..
[root@k8s-master01 harbor]# ./prepare			# 在启用之前可以先检测一下配置是否有问题
[root@k8s-master01 harbor]# ./install.sh 

在这里插入图片描述
4)在自己主机上添加一下Host

C:\Windows\System32\drivers\etc\host
172.16.3.225 hub.china.com

访问一下域名https://hub.china.com

默认用户:admin  	密码:Harbor12345

在这里插入图片描述
5)新建一个私有的项目上传一个镜像看一下是否可以pull下来

创建一个私有test项目里面有一个busybox镜像

[root@bogon harbor]# vim /usr/lib/systemd/system/docker.service 
添加:
--insecure-registry=hub.china.com
[root@bogon harbor]# systemctl daemon-reload
[root@bogon harbor]# systemctl restart docker
[root@bogon harbor]# echo "172.16.3.225 hub.china.com"  >>  /etc/hosts
[root@bogon harbor]# docker login hub.china.com
[root@bogon harbor]# docker pull busybox
[root@bogon harbor]# docker tag busybox:latest hub.china.com/test/busybox:latest
[root@bogon harbor]# docker push hub.china.com/test/busybox:latest

在这里插入图片描述

在Client机器上login然后下载私有仓库里的镜像

[root@bogon ~]# echo "172.16.3.225 hub.china.com"  >>  /etc/hosts
[root@bogon ~]# vim /usr/lib/systemd/system/docker.service 
添加:
--insecure-registry=hub.china.com
[root@bogon ~]# systemctl daemon-reload
[root@bogon ~]# systemctl restart docker
[root@bogon ~]# docker login hub.china.com
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

[root@bogon ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@bogon ~]# docker pull hub.china.com/test/busybox:latest
latest: Pulling from test/busybox
e5d9363303dd: Pull complete 
Digest: sha256:0415f56ccc05526f2af5a7ae8654baec97d4a614f24736e8eef41a4591f08019
Status: Downloaded newer image for hub.china.com/test/busybox:latest
hub.china.com/test/busybox:latest
[root@bogon ~]# docker images
REPOSITORY                   TAG       IMAGE ID       CREATED      SIZE
hub.china.com/test/busybox   latest    b97242f89c8a   8 days ago   1.23MB

如果可以下载下来说明实验没有问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维生涯记录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值