Harbor

IT
IT
IT
335
文章
1
评论
2020年5月13日15:47:40 评论 1,414 3241字阅读10分48秒
Harbor
harbor

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

安装 Harbor

  • 安装docker-compose
[root@iZ2zei14p015t8wkktdhn2Z ~]#  yum -y install epel-release
[root@k8s-master1 ~]# yum install -y python36-setuptools
[root@k8s-master1 ~]# yum install -y python36-pip
[root@iZ2zei14p015t8wkktdhn2Z ~]# pip3 --default-timeout=200 install -U docker-compose
[root@iZ2zei14p015t8wkktdhn2Z ~]# docker-compose -version
docker-compose version 1.25.5, build unknown
  • 下载地址 https://github.com/goharbor/harbor/releases
[root@iZ2zei14p015t8wkktdhn2Z ~]# wget https://github.com/goharbor/harbor/releases/download/v2.0.0-rc3/harbor-offline-installer-v2.0.0-rc3.tgz
[root@iZ2zei14p015t8wkktdhn2Z ~]# tar zxvf harbor-offline-installer-v2.0.0-rc3.tgz

 

  • 准备ca证书(建议大家购买一个便宜的域名,并去申请一个免费的ssl证书,比如阿里云或者腾讯云都提供免费的证书)
  • 创建证书目录
[root@iZ2zei14p015t8wkktdhn2Z ~]# mkdir /data/
[root@iZ2zei14p015t8wkktdhn2Z ~]# mkdir /data/cert
[root@iZ2zei14p015t8wkktdhn2Z ~]# unzip 3160919__xiaomi.tech_nginx.zip 
[root@iZ2zei14p015t8wkktdhn2Z ~]# mv 3160919__xiaomi.tech.key 3160919__xiaomi.tech.pem /data/cert/

安装harbor

  • 修改配置文件
[root@iZ2zei14p015t8wkktdhn2Z ~]# cd harbor
[root@iZ2zei14p015t8wkktdhn2Z harbor]# ll
total 491056
-rw-r--r-- 1 root root      3361 May 11 18:47 common.sh
-rw-r--r-- 1 root root 502808042 May 11 18:48 harbor.v2.0.0.tar.gz
-rw-r--r-- 1 root root      7816 May 11 18:47 harbor.yml.tmpl
-rwxr-xr-x 1 root root      2523 May 11 18:47 install.sh
-rw-r--r-- 1 root root     11347 May 11 18:47 LICENSE
-rwxr-xr-x 1 root root      1856 May 11 18:47 prepare
[root@iZ2zei14p015t8wkktdhn2Z harbor]# cp harbor.yml.tmpl harbor.yml
[root@iZ2zei14p015t8wkktdhn2Z harbor]# vim harbor.yml


hostname: harbor.xiaomi.tech

# 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: /data/cert/3160919__xiaomi.tech.pem
private_key: /data/cert/3160919__xiaomi.tech.key
  • 安装
[root@iZ2zei14p015t8wkktdhn2Z harbor]# sh install.sh
[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-portal ... done
Creating registry      ... done
Creating harbor-db     ... done
Creating redis         ... done
Creating registryctl   ... done
Creating harbor-core   ... done
Creating harbor-jobservice ... done
Creating nginx             ... done
✔ ----Harbor has been installed and started successfully.----
  • 访问

Harbor

  • 默认账号admin,默认密码Harbor12345

Harbor

下载信息
网盘密码:登录可见
下载地址:登录可见
继续阅读
  • 我的QQ
  • QQ扫一扫
  • weinxin
  • 我的头条
  • 头条扫一扫
  • weinxin
Docker 最后更新:2020-8-7
IT
  • 本文由 发表于 2020年5月13日15:47:40
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Docker部署Apollo Apollo

Docker部署Apollo

安装docker $ cd /opt/ $ sudo git clone --depth=1 https://github.com/cncentoscn/setuptools.git $ cd set...
Docker安装redis Docker

Docker安装redis

下载镜像 # docker pull redis 创建目录 # mkdir -p /home/redis/data # mkdir -p /home/redis/config 从 Redis 官方下载...
Centos8.1安装docker Docker

Centos8.1安装docker

yum方式安装 安装依赖 # yum install -y yum-utils device-mapper-persistent-data lvm2 添加仓库 # yum-config-manager...