一、harbor介绍

  在实际生产运维中,往往需要把镜像发布到几十、上百台或更多的节点上。这时单台Docker主机上镜像已无法满足,项目越来越多,镜像就越来越多,都放到一台Docker主机上是不行的,我们需要一个像Git仓库一样系统来统一管理镜像。这里介绍的是一个企业级镜像仓库Harbor,将作为我们容器云平台的镜像仓库中心。

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

二、harbor和registry的比较

  Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。

  1、提供分层传输机制,优化网络传输
  Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。

  2、提供WEB界面,优化用户体验
  只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。

  3、支持水平扩展集群
  当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。

  4、良好的安全机制
  企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。

  5、Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

三、部署harbor(在部署节点上)

  harbor需要安装docker和docker-compose,client只需要安装docker

  docker-compose的安装:

yum install epel-release
yum install -y python-pip
pip install --upgrade pip
pip install docker-compose

1、下载harbor

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

2、解压至/opt下

[root@ren8 kubernetes]# tar zxf harbor-offline-installer-v1.4.0.tgz
[root@ren8 kubernetes]# ls
bash k8s197.tar.gz
ca.tar.gz kube-yunwei-197
harbor kube-yunwei-197.tar.gz
harbor-offline-installer-v1.4.0.tgz scope.yaml
image sock-shop
image.tar.gz
[root@ren8 kubernetes]# cp -r harbor /opt/
[root@ren8 kubernetes]# cd /opt/harbor/
[root@ren8 harbor]# ls -trl
总用量 805152
-rwxr-xr-x 1 root root 25791 2月 6 2018 prepare
-rw-r--r-- 1 root root 482 2月 6 2018 NOTICE
-rw-r--r-- 1 root root 10771 2月 6 2018 LICENSE
-rwxr-xr-x 1 root root 5773 2月 6 2018 install.sh
drwxr-xr-x 3 root root 156 2月 6 2018 ha
-rw-r--r-- 1 root root 824398580 2月 6 2018 harbor.v1.4.0.tar.gz
-rw-r--r-- 1 root root 1140 10月 23 15:11 docker-compose.clair.yml
-rw-r--r-- 1 root root 1732 10月 23 15:12 docker-compose.notary.yml
-rw-r--r-- 1 root root 3396 10月 23 15:13 docker-compose.yml
drwxr-xr-x 4 root root 37 10月 23 15:17 common
-rw-r--r-- 1 root root 5968 10月 24 15:57 harbor.cfg

3、修改配置文件

(1)创建harbor工作目录,并准备ca证书,移动到harbor工作目录下

[root@ren8 ~]# ls
anaconda-ks.cfg cert.tar.gz k8saddons.tar.gz original-ks.cfg
bin docker kubernetes token.sh
bin.tar.gz k8saddons kubernetes.tar.gz yum-repo.sh
[root@ren8 ~]# tar xf cert.tar.gz
[root@ren8 ~]# mkdir -p /data/harbor
[root@ren8 ~]# cp -r cert /data/harbor
[root@ren8 ~]# cd /data/harbor/cert/
[root@ren8 cert]# ls -trl
总用量 24
-rw-r--r-- 1 root root 3272 9月 28 17:43 ca.key
-rw-r--r-- 1 root root 2130 9月 28 17:43 ca.crt
-rw-r--r-- 1 root root 3272 9月 28 17:49 harbor.key
-rw-r--r-- 1 root root 1756 9月 28 17:49 harbor.csr
-rw-r--r-- 1 root root 2013 9月 28 17:49 harbor.crt
-rw-r--r-- 1 root root 17 9月 28 17:49 ca.srl

(2)修改harbor主配置文件harbor.cfg

[root@ren8 cert]# cd /opt/harbor/
[root@ren8 harbor]# ls
common ha LICENSE
docker-compose.clair.yml harbor.cfg NOTICE
docker-compose.notary.yml harbor.v1.4.0.tar.gz prepare
docker-compose.yml install.sh

[root@ren8 harbor]# vim harbor.cfg
###################修改如下参数#####################
hostname = reg.yunwei.com
ui_url_protocol = https
ssl_cert = /data/harbor/cert/harbor.crt     #ca证书名称必须与实践文件同名 
ssl_cert_key = /data/harbor/cert/harbor.key   #
secretkey_path = /data/harbor           #ca证书的目录
harbor_admin_password = admin

(3)修改 docker-compose.clair.yml 编排文件

/data/harbor/clair-db:/var/lib/postgresql/data:z

(4)修改 docker-compose.notary.yml 编排文件

/data/harbor/notary-db:/var/lib/mysql:z

(5)修改 docker-compose.yml 编排文件

/data/harbor/:/var/log/docker/:z
/data/harbor/registry:/storage:z
/data/harbor/database:/var/lib/mysql:z
/data/harbor/config/:/etc/adminserver/config/:z
/data/harbor/secretkey:/etc/adminserver/key:z
/data/harbor/:/data/:z
/data/harbor/secretkey:/etc/ui/key:z
/data/harbor/ca_download/:/etc/ui/ca/:z
/data/harbor/psc/:/etc/ui/token/:z
/data/harbor/job_logs:/var/log/jobs:z
/data/harbor/secretkey:/etc/jobservice/key:z

4、安装、启动harbor

  执行./install.sh(sh install.sh)脚本即可。

[root@ren8 harbor]# ls
common ha LICENSE
docker-compose.clair.yml harbor.cfg NOTICE
docker-compose.notary.yml harbor.v1.4.0.tar.gz prepare
docker-compose.yml install.sh
[root@ren8 harbor]# sh install.sh

  验证harbor是否部署成功(必须在/opt/harbor/目录下执行)

[root@ren8 harbor]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------
harbor-adminserver /harbor/start.sh Up
harbor-db /usr/local/bin Up 3306/tcp
/docker-entr ...
harbor-jobservice /harbor/start.sh Up
harbor-log /bin/sh -c Up 127.0.0.1:1514->1051
/usr/local/bin/ ... 4/tcp
harbor-ui /harbor/start.sh Up
nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp
, 0.0.0.0:4443->4443
/tcp,
0.0.0.0:80->80/tcp
registry /entrypoint.sh serve Up 5000/tcp
/etc/ ...

5、各节点设置登录harbor私有镜像仓库(为各节点分发ca证书)

(1)在每个节点(包括harbor节点)的/etc/docker/目录下,创建certs.d/reg.yunwei.com/目录

[root@ren8 ~]# mkdir -p /etc/docker/certs.d/reg.yunwei.com/

(2)harbor节点上,将harbor的ca证书中的ca.crt拷贝到/etc/docker目录下

[root@ren8 ~]# cp /data/harbor/cert/ca.crt /etc/docker/certs.d/reg.yunwei.com/

(3)将harbor节点的ca.crt文件,分发给各节点的/etc/docker/certs.d/reg.yunwei.com/下

[root@ren8 ~]# scp /etc/docker/certs.d/reg.yunwei.com/ca.crt ren7:/etc/d
ocker/certs.d/reg.yunwei.com/
[root@ren8 ~]# scp /etc/docker/certs.d/reg.yunwei.com/ca.crt ren6:/etc/d
ocker/certs.d/reg.yunwei.com/
[root@ren8 ~]# scp /etc/docker/certs.d/reg.yunwei.com/ca.crt ren5:/etc/d
ocker/certs.d/reg.yunwei.com/

(4)harbor镜像库登录验证

  1)命令行:各节点登陆镜像库地址后,输入用户名/密码(admin/admin)后出现 Login Succeeded

[root@ren7 ~]# docker login reg.yunwei.com
Username: admin
Password:
Login Succeeded
   2)web浏览器:浏览器输入harbor节点ip

  如果登录不上,可以修改配置文件 /etc/docker/daemon.json

[root@ren8 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["http://cc83932c.m.daocloud.io"],
"insecure-registries": ["192.168.11.7:5000"],
"insecure-registries": ["192.168.11.8"], #添加harbor节点的ip的安全认证
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
[root@ren8 ~]# systemctl daemon-reload
[root@ren8 ~]# systemctl restart docker

四、上传镜像到harbor私有镜像仓库

1、本地镜像重新打tag

docker tag SOURCE_IMAGE[:TAG] reg.yunwei.com/learn/IMAGE[:TAG]

2、将重新打好tag的镜像上传到镜像库

  如果在推送镜像时,被拒绝(denied: requested access to the resource is denied),是因为没有docker login 登陆harbor镜像库。

docker push reg.yunwei.com/learn/IMAGE[:TAG]

3、其它节点配置好了ca证书的ca.crt文件后,便可执行如下命令下载镜像。在kubernetes集群中节点中启动pod时,会自动下载镜像

docker pull reg.yunwei.com/learn/busybox:latest

五、harbor启动和停止

  进入到harbor目录下,拥有docker-compose.yml的文件目录下执行如下的命令启动和关闭:

[root@ren8 harbor]# docker-compose start
[root@ren8 harbor]# docker-compose restart
[root@ren8 harbor]# docker-compose stop
[root@ren8 harbor]# docker-compose rm

六、harbor各组件介绍

  默认情况下,harbor运行起来后有如下容器:

[root@ren8 harbor]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d82eb9967cc3 vmware/harbor-jobservice:v1.4.0 "/harbor/start.sh" 46 hours ago Up 2 hours (healthy) harbor-jobservice
5e8849eaf757 vmware/nginx-photon:v1.4.0 "nginx -g 'daemon of…" 46 hours ago Up 2 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx
6e4a776103b5 vmware/harbor-ui:v1.4.0 "/harbor/start.sh" 46 hours ago Up 2 hours (healthy) harbor-ui
eff0c2c84df6 vmware/harbor-adminserver:v1.4.0 "/harbor/start.sh" 46 hours ago Up 2 hours (healthy) harbor-adminserver
ca862377182c vmware/registry-photon:v2.6.2-v1.4.0 "/entrypoint.sh serv…" 46 hours ago Up 2 hours (healthy) 5000/tcp registry
f37bb2d03d39 vmware/harbor-db:v1.4.0 "/usr/local/bin/dock…" 46 hours ago Up 2 hours (healthy) 3306/tcp harbor-db
d9f6ccc5d821 vmware/harbor-log:v1.4.0 "/bin/sh -c /usr/loc…" 46 hours ago Up 2 hours (healthy) 127.0.0.1:1514->10514/tcp harbor-log

  分别为nginx,harbor-jobservice,harbor-ui,harbor-adminserver,registry,harbor-db,harbor-log,由上我们可以得出下面的架构图:

  Harbor是通过docker compose来部署的,这也是为什么在装Harbor之前,需要安装docker-compose。各个模块的详细介绍如下:

  1、Proxy:对应启动组件nginx,是一个nginx反向代理,Harbor的registry,UI,token services等组件,都处在一个反向代理后边,该代理负责将来自浏览器,docker clients的请求转发到后端服务上

  2、Registry:对应启动组件registry.负责存储Docker镜像文件,以及处理Docker的push,pull等请求.Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull,push请求转发到token服务来获取有效的token.

  3、Core services:Harbor的核心功能,主要包括3个服务:UI,Job services和Log collector.

  (1)UI:对应启动组件harbor-ui.以图像用户界面的方式,辅助用户管理镜像,我个人觉得这样使得使用Harbor时,更加友好.

  (2)Job services:对应启动组件harbor-jobservice,主要用于镜像复制,和registry通信,本地镜像可以push到Harbor镜像仓库中,同样也可以从Harbor镜像仓库中pull到本地,同时记录job_log.

  (3)Log collector:对应启动组件harbor-log.负责收集其他模块的日志到一个地方

  4、Database:对应启动组件harbor-db.负责存储project,user,role,replication等的metadata数据.

  5、adminserver:对应启动组件harbor-adminserver.是系统的配置管理中心,当ui和jobserver启动时,需要加载adminserver的配置

docker部署harbor私有镜像库(3)的更多相关文章

  1. docker搭建harbor私有镜像库

    创建harbor私有镜像库 一.部署准备: harbor软件包   在部署节点上: 1)解压harbor的软件包将harbor目录下所有文件发送到/opt/目录下   tar zxvf harbor- ...

  2. Docker部署Registry私有镜像库

    拉取镜像 docker pull registry:2.6.2   生成账号密码文件,这里采用htpasswd方式认证 docker run --rm --entrypoint htpasswd re ...

  3. 部署Harbor私有镜像仓库

    Harbor私有镜像仓库无坑搭建 目录 1. harbor介绍 2. docker-ce的安装 3. docker-compose的安装 4. Harbor私有仓库的安装 5. 客户端连接镜像仓库配置 ...

  4. 第4篇创建harbor私有镜像库

        一.部署准备: 1.准备harbor软件包       在部署节点上:       2.挂载一个磁盘,专门存储harbor镜像和文件     3.进入到/etc/docker/harbor/目 ...

  5. 03: 使用docker搭建Harbor私有镜像仓库

    1.1 harbor介绍 1.Harbor简介 1. Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器. 2. 镜像的存储harbor使用的是官方的docker regi ...

  6. kubernetes第三章--创建harbor私有镜像库

  7. 如何在K8S中优雅的使用私有镜像库 (Docker版)

    前言 在企业落地 K8S 的过程中,私有镜像库 (专用镜像库) 必不可少,特别是在 Docker Hub 开始对免费用户限流之后, 越发的体现了搭建私有镜像库的重要性. 私有镜像库不但可以加速镜像的拉 ...

  8. docker从私有镜像库pull/push镜像问题:Error response from daemon: Get https://xxxx.com/: x509: certificate signed by unknown authority

    docker从私有镜像库pull/push镜像问题:Error response from daemon: Get https://harbor.op.xxxx.com/v2/: x509: cert ...

  9. 【下一代核心技术DevOps】:(四)私有镜像库阿里云Docker服务使用

    1.使用阿里云镜像库有很多优点 稳定可靠,阿里技术,放心使用. 国内cdn多节点加速,下载速度非常快 可以和阿里云Git代码集成,不需要第三方CI工具,当然带的自动构建服务也可以和其他的Git库集成, ...

随机推荐

  1. NPM 与 NPX 区别

    NPM 和 NPX 区别 NPM Node Package Manager npm 是 Node.js 的软件包管理器,其目标是自动化的依赖性和软件包管理 NPX npx 是执行 Node 软件包的工 ...

  2. leetcode 刷题(数组篇)74 题 搜索二维矩阵 (二分查找)

    二分查找要注意边界值的取值,边界情况的判定 题目描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一 ...

  3. 【pytest官方文档】解读Skipping test functions,跳过测试用例详解

    有时候,为了满足某些场景的需要,我们知道有些测试函数在这时候肯定不能执行,或者执行了也会失败.那么我们 可以选择去跳过这个测试函数,这样也就不会影响整体的测试函数运行效果,不至于在你运行的众多绿色通过 ...

  4. LNMP架构上线动态网站

    第一步,一键安装所需程序 yum install -y nginx php php-mysql php-fpm mariadb-server 第二步,修改Nginx配置文件/etc/nginx/ngi ...

  5. Day14_75_反射(reflect)

    反射 反射的基本概念 反射是由Smith在1982年首次提出,主要是指程序可以访问,检测,修改它本身状态或行为的一种能力.并且能够根据自身行为的状态或结果,调整和修改所描述行为的状态和相关语义. ja ...

  6. (数据科学学习手札118)Python+Dash快速web应用开发——特殊部件篇

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  7. 记某次sql注入绕过ids

    昨天测试sql注入,发现个站,存在ids,一个单引号直接拦截,无论我怎么编码都不行,怕不是废了.. 灵机一动 基础探测 /*'*/ 报错 /*''*/ 返回正常 是字符串类型. 先本地测试 返回所有 ...

  8. 【秒懂音视频开发】21_显示BMP图片

    文本的主要内容是:使用SDL显示一张BMP图片,算是为后面的<播放YUV>做准备. 为什么是显示BMP图片?而不是显示JPG或PNG图片? 因为SDL内置了加载BMP的API,使用起来会更 ...

  9. 利用宝塔面板搭建 Laravel 5.5 环境

    1.更新系统 yum install epel-release #rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest- ...

  10. 各种数据类型是否可进入if判断

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...