ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用Harbor搭建私有仓库

2021-04-30 11:32:14  阅读:238  来源: 互联网

标签:Harbor minutes server 私有 harbor docker root localhost 搭建


Harbor是一个企业级的docker私有仓库;

安装需求(以harbor版本为准):

  • python版本大于2.7

  • docker引擎版本大于1.10

  • docker compose版本大于1.6.0

harbor安装:

官方地址:https://github.com/vmware/harbor/releases

https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.3.tgz

Harbor介绍:

Harbor是VMware公司开源的企业级的DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的docker仓库服务;它以Docker公司开源的Registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access Control),AD/LDAP集成,以及审计日志(Auditlogging)等企业用户需求的功能,同时还支持中文;

Harbor的每个组件都是以Docker容器的形式构建的,使用docker compose来对它进行部署;用于部署harbor的docker compose模板位于/Deployer/docker-compose.yml,由5个容器组成(新版本好像不止5个),这几个容器通过docker link 的形式连接在一起,在容器之间通过容器名字相互访问,对终端用户而言,只要暴露proxy(即nginx)的服务端口;

  • Proxy:由nginx服务器构成的反向代理;

  • Registry:由Docker官方的开源的registry镜像构成的容器实例;

  • UI:即架构中的core services,构成此容器的代码是Harbor项目的主体;(也就是说,harbor最大的作用是提供了web界面)

  • MySQL:由官方MySQL镜像构成的数据库容器;存放用户访问控制数据;

  • Log:运行着rsyslogd的容器,通过log-driver的形式收集其他容器的日志;

Harbor特点:

  • 基于角色控制:用户和仓库都是基于项目进行组织的,而用户基于项目可以拥有不同的权限;

  • 基于镜像的复制策略:镜像可以在多个harbor实例之间进行复制;

  • 支持LDAP:harbor的用户授权可以使用已经存在的LDAP用户;

  • 镜像删除&垃圾回收:image可以被删除并且回收image占用的空间,绝大部分的用户操作API,方便用户对系统进行扩展;

  • 用户UI:用户可以轻松的浏览,搜索镜像仓库以及对项目进行管理;

  • 轻松的部署功能:harbor提供了online,offline安装,除此之外还提供了virtualappliance安装;

  • harbor和docker registry的关系:harbor实质上是对docker registry做了封装,扩展了自己的业务模块;

 

 

Harbor认证过程:

  1. docker daemon从docker registry拉取镜像;

  2. 如果docker registry需要进行授权时(私有仓库),registry将会返回401 Unauthorized响应,同时在响应中包含了docker client如何进行认证的信息;

  3. docker client根据registry返回的信息,向auth server发送请求获取认证token;

  4. auth server根据自己的业务实现去验证提交的用户信息是否符合业务要求;

  5. 用户数据仓库返回用户的相关信息;

  6. auth server将会根据查询的用户信息,生成token令牌,以及当前用户所具有的相关权限信息;

上述就是完整的授权过程,当用户完成上述过程后便可执行相关的pull/push操作,认证信息会每次都带在请求头中;

Harbor整体架构:

 

 

Harbor认证流程:

  1. 首先,请求被代理容器监听拦截,并跳转到指定的认证服务器;

  2. 如果认证服务器配置了权限认证,则会返回401,通知docker client 在特定的请求中需要带上一个合法的token,而认证的逻辑地址则指向架构图中的core services;

  3. 当docker client 接收到错误code 后,client就会发送认证请求(带有用户名和密码)到core services 进行basic auth认证;

  4. 当client的请求发给nginx后,nginx会根据配置的认证地址将带有用户名和密码的请求发送到core services;

  5. core services获取用户名和密码后,对用户信息进行验证(自己的数据库或者介入LDAP都可以),成功后,返回认证成功信息;

 

 

部署:

检查环境:
[root@localhost ~]# python
Python 2.7.5 (default, Nov 16 2020, 22:23:17)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

[root@localhost ~]# docker --version
Docker version 19.03.0, build aeac9490dc

[root@localhost ~]# docker-compose --version
docker-compose version 1.20.0, build ca8d3c6

准备安装包:
harbor-offline-installer-v1.8.3.tgz
解压:
tar -zxvf harbor-offline-installer-v1.8.3.tgz
mv harbor /usr/local/
因为harbor默认使用443端口,所以需要使用证书(新版本貌似默认是80);
创建一个2048位的加密私钥:
[root@localhost ~]# openssl genrsa -des3 -out server.key 2048
创建证书请求:
[root@localhost ~]# openssl req -new -key server.key -out server.csr
Common Name (eg, your name or your server's hostname) []:hub.giao.com

因为此证书,在启动nginx时,它会让我们去输入这个私钥的密码,但此时nginx是放在容器中运行的,启动时无法及时的输入证书中的密码,所以就会报错退出,因此,证书在启动的时候就不能包含密钥,因此需要退密钥操作;
备份密钥:
[root@localhost ~]# cp server.key server.key.backup
退密钥:
[root@localhost ~]# openssl rsa -in server.key.backup -out server.key

生成证书:
[root@localhost ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
将证书,密钥等放在指定目录:
[root@localhost ~]# mkdir -p /data/cert
[root@localhost ~]# mv server.* /data/cert
[root@localhost ~]# cd /usr/local/harbor
[root@localhost harbor]# ll
total 569632
-rw-r--r--. 1 root root 583269670 Sep 15 2019 harbor.v1.8.3.tar.gz
-rw-r--r--. 1 root root     4519 Sep 15 2019 harbor.yml # 配置文件
-rwxr-xr-x. 1 root root     5088 Sep 15 2019 install.sh # 安装脚本,会从配置文件中读取配置
-rw-r--r--. 1 root root     11347 Sep 15 2019 LICENSE
-rwxr-xr-x. 1 root root     1654 Sep 15 2019 prepare

[root@localhost harbor]# vim harbor.yml
hostname: hub.giao.com

  # 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
    port: 443
  #   # The path of cert and key files for nginx
    certificate: /data/cert/server.crt
    private_key: /data/cert/server.key
配置文件中还包含harbor的管理员密码,数据库密码等;

安装:
[root@localhost harbor]# ./install.sh
...
[Step 3]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db   ... done
Creating registry   ... done
Creating registryctl ... done
Creating redis       ... done
Creating harbor-core ... done
Creating harbor-jobservice ... done
Creating harbor-portal     ... done
Creating nginx             ... done

✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at https://hub.giao.com.
For more details, please visit https://github.com/goharbor/harbor .

[root@localhost harbor]# docker ps -a
CONTAINER ID       IMAGE                                               COMMAND                 CREATED             STATUS                   PORTS                                     NAMES
74cb5e51898a       goharbor/nginx-photon:v1.8.3                       "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes (healthy)   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx
44e940f1650b       goharbor/harbor-portal:v1.8.3                       "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes (healthy)   80/tcp                                     harbor-portal
6128ccb0e429       goharbor/harbor-jobservice:v1.8.3                   "/harbor/start.sh"       2 minutes ago       Up 2 minutes                                                       harbor-jobservice
67ba5b5131a6       goharbor/harbor-core:v1.8.3                         "/harbor/start.sh"       2 minutes ago       Up 2 minutes (healthy)                                             harbor-core
40e9f2a0c2d9       goharbor/redis-photon:v1.8.3                       "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes             6379/tcp                                   redis
66f258a03c85       goharbor/harbor-db:v1.8.3                           "/entrypoint.sh post…"   2 minutes ago       Up 2 minutes (healthy)   5432/tcp                                   harbor-db
d4877bbc7ca6       goharbor/harbor-registryctl:v1.8.3                 "/harbor/start.sh"       2 minutes ago       Up 2 minutes (healthy)                                             registryctl
4a601c1db422       goharbor/registry-photon:v2.7.1-patch-2819-v1.8.3   "/entrypoint.sh /etc…"   2 minutes ago       Up 2 minutes (healthy)   5000/tcp                                   registry
a5ceccf4c9bd       goharbor/harbor-log:v1.8.3                         "/bin/sh -c /usr/loc…"   2 minutes ago       Up 2 minutes (healthy)   127.0.0.1:1514->10514/tcp                 harbor-log

注意修改hosts文件解析!

 

 

创建普通用户:

 

 

普通用户新建私有仓库(此处不要勾选公开):

 

 

服务器指定镜像仓库地址:

vim /etc/docker/daemon.json
  {
      "insecure-registries": ["hub.giao.com"]
  }
systemctl restart docker
vim /etc/hosts
192.168.10.123 hub.giao.com
[root@localhost ~]# docker tag tomcat:v1.0 hub.giao.com/hamburger/tomcat:v1.0
因为是私有仓库,需要使用用户名和密码进行登录(不写地址是登录的官方仓库):
[root@localhost ~]# docker login hub.giao.com
Username: laoba
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@localhost ~]# docker push hub.giao.com/hamburger/tomcat:v1.0

 

 

客户端下载:

修改仓库地址,修改hosts解析,先进行登录认证,再正常拉取镜像使用;

标签:Harbor,minutes,server,私有,harbor,docker,root,localhost,搭建
来源: https://www.cnblogs.com/travellingcat/p/14721371.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有