
Harbor 是一个CNCF
基金会托管的开源的可信的云原生docker registry
项目,可以用于存储、签名、扫描镜像内容,Harbor 通过添加一些常用的功能如安全性、身份权限管理等来扩展 docker registry 项目,此外还支持在 registry 之间复制镜像,还提供更加高级的安全功能,如用户管理、访问控制和活动审计等,在新版本中还添加了Helm
仓库托管的支持。
Harbor
最核心的功能就是给 docker registry 添加上一层权限保护的功能,要实现这个功能,就需要我们在使用 docker login、pull、push 等命令的时候进行拦截,先进行一些权限相关的校验,再进行操作,其实这一系列的操作 docker registry v2 就已经为我们提供了支持,v2 集成了一个安全认证的功能,将安全认证暴露给外部服务,让外部服务去实现。
Harbor 认证原理
上面我们说了 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
的信息
至此,整个登录过程完成,整个过程可以用下面的流程图来说明:

安装 Harbor
- 安装docker https://www.centoscn.vip/307.html
- 安装docker-compose
[root@harb ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose [root@harb ~]# chmod +x /usr/local/bin/docker-compose [root@harb ~]# docker-compose -version docker-compose version 1.24.0, build 0aa59064
- 下载地址 https://github.com/goharbor/harbor/releases
[root@iZ0jl4dahgopddd1qnxqbtZ ~]# tar zxvf harbor-offline-installer-v2.2.0.tgz
生成私有证书
[root@iZ0jl4dahgopddd1qnxqbtZ ~]# mkdir -p certs [root@iZ0jl4dahgopddd1qnxqbtZ ~]# cd certs/ [root@iZ0jl4dahgopddd1qnxqbtZ ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.key -x509 -days 365 -out harbor.crt Generating a 4096 bit RSA private key ...................................................................++ .++ writing new private key to 'harbor.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]: State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address []:
安装harbor
- 修改配置文件,这里注释了https,如有需要自行配置即可。
[root@iZ0jl4dahgopddd1qnxqbtZ harbor]# cp harbor.yml.tmpl harbor.yml [root@iZ0jl4dahgopddd1qnxqbtZ harbor]# vim harbor.yml hostname: 192.168.90.10 # http related config http: # port for http, default is 80. If https enabled, this port will redirect to https port port: 80 # https related config https: # https port for harbor, default is 443 port: 443 # The path of cert and key files for nginx certificate: /opt/harbor/certs/harbor.crt private_key: /opt/harbor/certs/harbor.key
- 安装
[root@jenkins harbor]# ./install.sh
- 添加私有仓库
[root@bogon ~]# vi /etc/docker/daemon.json "insecure-registries":["http://192.168.90.10"], "registry-mirrors": ["https://7ua5qu05.mirror.aliyuncs.com"] }
- 安装成功后,可以通过
docker login
命令来测试仓库的连通性,看到如下字样即表示安装成功(也可以通过浏览器访问 Web UI):
root@bogon ~]# systemctl restart docker [root@bogon ~]# docker login 192.168.90.10 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
- 访问http://192.168.90.10
- 默认账号admin,默认密码Harbor12345
- 参考地址https://me.jinchuang.org/archives/652.html
harbor的关闭与开启
- 关闭(修改配置文件必须先关闭服务
[root@docker harbor]# pwd /opt/harbor [root@docker harbor]# docker-compose down -v Stopping nginx ... done Stopping harbor-jobservice ... done Stopping harbor-core ... done Stopping harbor-portal ... done Stopping redis ... done Stopping registryctl ... done Stopping harbor-db ... done Stopping registry ... done Stopping harbor-log ... done Removing nginx ... done Removing harbor-jobservice ... done Removing harbor-core ... done Removing harbor-portal ... done Removing redis ... done Removing registryctl ... done Removing harbor-db ... done Removing registry ... done Removing harbor-log ... done Removing network harbor_harbor
- 启动服务
[root@docker harbor]# docker-compose up -d
继续阅读
- 我的QQ
- QQ扫一扫
-
- 我的头条
- 头条扫一扫
-
评论