harbor的使用
前言
前面的时候我们简单的了解的过registry的安装和使用
docker pull registry:latest
docker run -itd --name myregistry -p 5000:5000 registry:latest
docker tag nginx:latest 127.0.0.1:5000/nginx:v1
docker push 127.0.0.1:5000/nginx:v1
dokcker pull 127.0.0.1:5000/nginx:v1
但假如 我们想对上传镜像和 下载进行的操作进行权限管理,规定的用户才能在下载和修改指定的库中的内容,怎么才能实现这个功能?这个时候我们就可以用到harbor
一、harbor的简介
Harbor被部署为多个Docker容器,因此可以部署在任何支持Docker的Linux发行版本上
服务端主机需要安装的环境有Python、Docker、和Docker-compose
在k8s中,harbor也会用
harbor是用项目来管理镜像的,这样便于管理
二、部署Harbor服务
实验环境:
harbor服务端:192.168.100.21,docker、compose,harbor
client端:192.168.100.22,docker
第一台主机做私有仓库,第二台主机做客户端去进行访问验证
所需参数
这些参数必须在安装前进行设置,如果管理者想要更新他们,必须在改完参数之后再次安装,参数才会生效
工作原理
上面我们说了docker registry v2将安全认证暴露给了外部服务使用,那么是怎样暴露的呢?我们在命令行中输入docker login https://registry.qikqiak.com为例来为大家说明下认证流程:
. 1.docker client接收到用户输入的docker login 命令,将命令转化为调用engine api的RegistryLogin 方法
·2.在 RegistryLogin方法中通过http盗用registry服务中的auth方法
·3.因为我们这里使用的是v2版本的服务,所以会调用loginV2方法,在 loginV2方法中会进行/v2/接口调用,该接口会对请求进行认证
4.此时的请求中并没有包含token 信息,认证会失败,返回401错误,同时会在 header中返回去哪里请求认证的服务器地址
.5.registry client端收到上面的返回结果后,便会去返回的认证服务器那里进行认证请求,向认证服务器发送的请求的 header中包含有加密的用户名和密码
·6.认证服务器从header中获取到加密的用户名和密码,这个时候就可以结合实际的认证系统进行认证了,比如从数据库中查询用户认证信息或者对接ldap服务进行认证校验
·7.认证成功后,会返回一个token 信息,client端会拿着返回的 token再次向registry服务发送请求,这次需要带上得到的token,请求验证成功,返回状态码就是200了
. 8.docker client端接收到返回的200状态码,说明操作成功,在控制台上打印 Login Succeeded 的信息
至此,整个登录过程完成,整个过程可以用下面的流程图来说明:
1、下载软件包
[root@docker ~]# hostnamectl set-hostname harbor
[root@docker~]# su
[root@harbor ~]# yum install wget -y;wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
[root@harbor ~]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
2、配置文件的参数解读
所需参数
这些参数必须在安装前进行设置,如果管理者想要更新他们,必须在改完参数之后再次安装,参数才会生效
可选参数
这些参数对于更新时可选的,即管理者可以将其保留为默认值,在启动后可以在web端上进行修改更新
如果进入harbor.cfg,只会在第一次启动Harbor时生效,随后对这些参数的更新,Harbor将被忽略
备注:
如果选择通过WEB设置这些参数,必须得在启动Habor后只有admin这个管理员用户的情况下操作;当harbor中有除了admin之外的用户时,auth_mode不能被修改;所以,设置参数要趁早
[root@harbor ~]# cd /usr/local/harbor/
[root@harbor harbor]# ls
common docker-compose.clair.yml docker-compose.notary.yml docker-compose.yml harbor_1_1_0_template harbor.cfg harbor.v1.2.2.tar.gz install.sh LICENSE NOTICE prepare upgrade
[root@harbor harbor]# vim /usr/local/harbor/harbor.cfg
修改第五行的hostname为本地ip,不要使用localhost或127.0.0.1,因为Harbor需要由外部客户机访问
hostname = 192.168.100.21
## 配置文件Harbor
#访问管理用户界面和注册表服务的IP地址或主机名。
#不要使用localhost或127.0.0.1,因为Harbor需要由外部客户机访问。
hostname = reg.mydomain.com
#用于访问UI和令牌/通知服务的协议,默认情况下是http。
#如果在nginx上启用了ssl,则可以将其设置为https。
ui_url_protocol = http
#mysql db的db_auth的根用户的密码,在任何生产使用之前更改,mysql db内存放的是用户验证信息,当用户登录时的账号密码会与mysql的内容进行比对,如果正确,就会给用户一个30分钟的临时令牌token
db_password = root123
#镜像复制作业线程最大数量。
max_job_workers = 3
#确定是否为注册中心的令牌生成证书。
#如果该值为on,那么prepare脚本将创建新的根证书和私钥,以生成访问注册中心的令牌。如果该值为off,则使用默认的密钥/证书,也可以指定外部来源的根证书/密钥
#此标志还控制公证员证书的创建。
customize_crt = on
#nginx的cert和密钥文件的路径,它们只应用于协议设置为https
ssl_cert = /data/cert/server.crt
#证书的路径,仅当协议设置为 https 时才应用。
ssl_cert_key = /data/cert/server.key
#密钥的路径,仅当协议设置为 https 时才应用。
#密钥存储的路径,用于在复制策略中加密或解密远程 register 密码的密钥路径。
secretkey_path = /data
#Admiral's url, 注释此属性, or 将其值设置为NA when Harbor is 独立
admiral_url = NA
#Clair的postgres数据库的密码,只有在使用Clair部署Harbor时才有效。
#请在部署之前更新它,后续更新将导致Clair的API服务器和Harbor无法访问Clair的数据库。
clair_db_password = password
#注意:开始初始属性和结束初始属性之间的属性只在第一次引导时生效,这些属性的后续更改应该在web ui上执行
#开始初始属性,即可选参数,此处为分界线,上面是所需参数
#电子邮件帐户设置发送密码重置电子邮件。
#电子邮件服务器使用给定的用户名和密码在到主机的TLS连接上进行身份验证并充当身份。
#身份留空作为用户名。
email_identity =
#Harbor需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才需要。
#请注意,在默认情况下SSL连接时没有启用。如果SMTP服务器需要SSL,但不支持STARTTLS
#那么应该通过设置启用SSL email_ssl = TRUE。
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
##Harbor管理员的初始密码,只有在Harbor启动时才有效。
#在第一次启动之后就没有效果了
#启动后从用户界面更改管理员密码。默认的用户名/密码是 admin/Harbor12345。
harbor_admin_password =