转载:https://k8s.abcdocker.com/kubernetes_harbor.html

一、介绍

Docker容器应用的开发和运行路不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境的Registry也是非常必要的。 Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

二、组件

用于部署 Harbor 的 Docker Compose 模板位于 /Deployer/docker-compose.yml. 打开这个模板文件,会发现 Harbor 由 5 个容器组成:

  • proxy:由 Nginx 服务器构成的反向代理。
  • registry:由 Docker 官方的开源 registry 镜像构成的容器实例。
  • ui:即架构中的 core services, 构成此容器的代码是 Harbor 项目的主体。
  • mysql:由官方 MySql 镜像构成的数据库容器。
  • log: 运行着 rsyslogd 的容器,通过 log-driver 的形式收集其他容器的日志。

这几个容器通过 Docker link 的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露 proxy (即 Nginx)的服务端口。

三、工作原理

假设我们将 Harbor 部署在主机名为 registry.abcdocker.com 的虚机上。用户通过 docker login 命令向这个 Harbor 服务发起登录请求:docker login registry.abcdocker.com当用户输入所需信息并点击回车后,Docker 客户端会向地址“registry.abcdocker.com/v2/” 发出 HTTP GET 请求。

Harbor 的各个容器会通过以下步骤处理:

(1)Docker login

(a) 首先,这个请求会由监听 80 端口的 proxy 容器接收到。根据预先设置的匹配规则,容器中的 Nginx会将请求转发给后端的 registry 容器;

(b) 在 registry 容器一方,由于配置了基于 token 的认证,registry 会返回错误代码 401,提示 Docker客户端访问 token 服务绑定的 URL。在 Harbor 中,这个 URL 指向 Core Services;

(c) Docker 客户端在接到这个错误代码后,会向token服务的URL发出请求,并根据HTTP协议的BasicAuthentication 规范,将用户名密码组合并编码,放在请求头部(header);

(d)类似地,这个请求通过 80 端口发到 proxy 容器后,Nginx 会根据规则把请求转发给 ui 容器,ui 容器监听 token 服务网址的处理程序接收到请求后,会将请求头解码,得到用户名、密码;

(e) 在得到用户名、密码后,ui 容器中的代码会查询数据库,将用户名、密码与 mysql 容器中的数据进行比对(注:ui 容器还支持 LDAP 的认证方式,在那种情况下 ui 会试图和外部 LDAP 服务进行通信并校验用户名/密码)。比对成功,ui 容器会返回表示成功的状态码, 并用密钥生成 token,放在响应体中返回给 Docker 客户端。这个过程中组件间的交互过程如下图所示

至此,一次 docker login 成功地完成了,Docker 客户端会把步骤(c)中编码后的用户名密码保存在本地的隐藏文件中。

(2) Docker Push
用户登录成功后用 docker push 命令向 Harbor 推送一个 Docker 镜像:docker push registry.abcdocker.com/library/hello-world

(a) 首先,docker 客户端会重复 login 的过程,首先发送请求到 registry,之后得到 token 服务的地址;

(b) 之后,Docker 客户端在访问ui容器上的token服务时会提供额外信息,指明它要申请一个对imagelibrary/hello-world 进行 push 操作的 token;

(c) token 服务在经过 Nginx 转发得到这个请求后,会访问数据库核实当前用户是否有权限对该 image进行 push。如果有权限,它会把 image 的信息以及 push 动作进行编码,并用私钥签名,生成 token返回给 Docker 客户端;

(d) 得到 token 之后 Docker 客户端会把 token 放在请求头部,向 registry 发出请求,试图开始推送image。 Registry 收到请求后会用公钥解码 token 并进行核对,一切成功后,image 的传输就开始了。我们省去 proxy 转发的步骤,下图描述了这个过程中各组件的通信

四、安装环境

IP地址 docker版本 docker-compose版本 内核 Centos
192.168.1.197 17.03 1.22 4.17.12 7.4

注意:Harbor的所有服务组件都是在Docker中部署的,所以官方安装使用Docker-compose快速部署,所以我们需要安装Docker、Docker-compose. 由于Harbor是基于Docker Registry V2版本,所以就要求Docker版本不小于1.10.0,Docker-compose版本不小于1.6.0

五、环境准备

  1. # 设置主机名
  2. hostnamectl set-hostname harbor
  3. # 时间同步
  4. yum -y install ntp
  5. systemctl enable ntpd
  6. systemctl start ntpd
  7. ntpdate -u cn.pool.ntp.org
  8. hwclock --systohc
  9. timedatectl set-timezone Asia/Shanghai
  10. # 关闭swap分区
  11. vim /etc/fstab #永久关闭swap分区
  12. swap was on /dev/sda11 during installation
  13. UUID=0a55fdb5-a9d8-4215-80f7-f42f75644f69 none swap sw 0 0
  14. #注释掉SWAP分区项,即可
  15. 或者

echo "vm.swappiness = 0">> /etc/sysctl.conf
 sysctl -p
 swapoff -a && swapon -a


  1. # 关闭防火墙 Selinux
  2. systemctl stop firewalld
  3. systemctl disable firewalld
  4. setenforce 0
  5. sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
  6. # 升级内核
  7. rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  8. rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
  9. yum --enablerepo=elrepo-kernel install kernel-ml -y&&
  10. sed -i s/saved/0/g /etc/default/grub&&
  11. grub2-mkconfig -o /boot/grub2/grub.cfg && reboot

六、Docker Install

下载Docker安装包

  1. wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
  2. wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
  1. yum install docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm -y
  2. yum install docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm -y

 

  1. 设置开机启动并启动docker
  2. systemctl enable docker
  3. systemctl start docker
  4. 替换docker相关配置
  5. sed -i '/ExecStart=\/usr\/bin\/dockerd/i\ExecStartPost=\/sbin/iptables -I FORWARD -s 0.0.0.0\/0 -d 0.0.0.0\/0 -j ACCEPT' /usr/lib/systemd/system/docker.service
  6. sed -i '/dockerd/s/$/ \-\-storage\-driver\=overlay2 --insecure-registry 192.168.60.26/g' /usr/lib/systemd/system/docker.service
  1. 注意:
    1.Docker默认从官方拉取镜像,并且从1.12版本之后,默认私有仓库是使用https来进行连接,我们需要将使用私服的主机上docker启动文件进行修改,在启动命令添加--insecure-registry 192.168.1.197

3.3 Docker-compose Install

Github地址:https://github.com/docker/compose/releases

Docker Compose简介

Docker Compose是Docker编排服务的最后一块,前面提到的Machine可以让用户在其它平台快速安装Docker,Swarm可以让Docker容器在集群中高效运转,而Compose可以让用户在集群中部署分布式应用。简单的说,Docker Compose属于一个“应用层”的服务,用户可以定义哪个容器组运行哪个应用,它支持动态改变应用,并在需要时扩展。

  1.  

安装Docker-compose

  1. curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose
  3. $ docker-compose --version
  4. docker-compose version 1.22.0, build f46880fe

Docker-compose常用命令

  1. docker-compose up -d ###后台启动,如果容器不存在根据镜像自动创建
  2. docker-compose down -v ###停止容器并删除容器
  3. docker-compose start ###启动容器,容器不存在就无法启动,不会自动创建镜像
  4. docker-compose stop ###停止容器
  5.  

3.4 Harbor Install

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

Harbor 2种安装方式

  1. 1.离线安装
  2. $ wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.0.tgz
  3. $ tar xf harbor-online-installer-v1.5.0.tgz
  4. 2.在线安装
  5. $ wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.5.2.tgz
  6. $ tar xf harbor-online-installer-v1.5.2.tgz
  7.  
  8. 重点:下载那个823M的安装

配置Harbor
解压之后,配置文件名称harbor.cfg,该文件就是Harbor的配置文件

编辑harbor.cfg
实际上我们只需要修改Hostname字段

  1. [root@harbor harbor]# head harbor.cfg
  2. ## Configuration file of Harbor
  3. #This attribute is for migrator to detect the version of the .cfg file, DO NOT MODIFY!
  4. _version = 1.5.0
  5. #The IP address or hostname to access admin UI and registry service.
  6. #DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
  7. hostname = 192.168.1.197

harbor.cfg相关配置解释

  1. [root@master harbor]# grep -Ev "^$|^[#;]" harbor.cfg
  2. # Harbor版本
  3. _version = 1.5.0
  4. # hostname 设置访问地址,可以使用IP/域名,不可以设置127.0.0.1 && localhost
  5. hostname = 192.168.60.24
  6. # 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
  7. ui_url_protocol = http
  8. # Job 最大进程数
  9. max_job_workers = 50
  10. # 是否创建证书,创建证书将会在下面的路径下生成
  11. customize_crt = on
  12. ssl_cert = /data/cert/server.crt
  13. ssl_cert_key = /data/cert/server.key
  14. # 私钥存储路径
  15. secretkey_path = /data
  16. # 设置日志大小
  17. admiral_url = NA
  18. log_rotate_count = 50
  19. log_rotate_size = 200M
  20. # 是否使用代理
  21. http_proxy =
  22. https_proxy =
  23. no_proxy = 127.0.0.1,localhost,ui
  24. # 邮箱设置,发送重置密码邮件时使用
  25. email_identity =
  26. email_server = smtp.mydomain.com
  27. email_server_port = 25
  28. email_username = sample_admin@mydomain.com
  29. email_password = abc
  30. email_from = admin <sample_admin@mydomain.com>
  31. email_ssl = false
  32. email_insecure = false
  33. # 安装Harbor后,管理员UI登陆的密码,默认是Harbor12345
  34. harbor_admin_password = Harbor12345
  35. # 认证方式,这里支持多种认证方式,比如LDAP、数据库认证。默认是db_auth
  36. auth_mode = db_auth
  37. # LDAP认证时配置项
  38. ldap_url = ldaps://ldap.mydomain.com
  39. ldap_basedn = ou=people,dc=mydomain,dc=com
  40. ldap_uid = uid
  41. ldap_scope = 2
  42. ldap_timeout = 5
  43. ldap_verify_cert = true
  44. ldap_group_basedn = ou=group,dc=mydomain,dc=com
  45. ldap_group_filter = objectclass=group
  46. ldap_group_gid = cn
  47. ldap_group_scope = 2
  48. #是否开启自动注册
  49. self_registration = on
  50. # Token有效时间,默认30分钟
  51. token_expiration = 30
  52. # 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(管理员)
  53. project_creation_restriction = everyone
  54. # Mysql数据库root用户默认密码root123,根据实际时使用来进行修改
  55. db_host = mysql
  56. db_password = root123
  57. db_port = 3306
  58. db_user = root
  59. # Redis配置
  60. redis_url = redis:6379
  61. clair_db_host = postgres
  62. clair_db_password = password
  63. clair_db_port = 5432
  64. clair_db_username = postgres
  65. clair_db = postgres
  66. uaa_endpoint = uaa.mydomain.org
  67. uaa_clientid = id
  68. uaa_clientsecret = secret
  69. uaa_verify_cert = true
  70. uaa_ca_cert = /path/to/ca.pem
  71. registry_storage_provider_name = filesystem
  72. registry_storage_provider_config =

本次我们使用离线安装,安装包在上面

  1. tar xf harbor-offline-installer-v1.5.0.tgz
  2.  
  3. ./install

七、如果外网出现502 错误(权限不足),记得重启服务器或者虚拟机。

八、访问:192.168.1.197

默认端口为80,需要修改端口请修改docker-compose.yaml对应服务的映射

  1.  
  1.  
  1.  

Harbor私有镜像仓库无坑搭建的更多相关文章

  1. 部署Harbor私有镜像仓库

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

  2. harbor私有镜像仓库的搭建与使用与主从复制

    harbor私有镜像仓库,私有仓库有两种,一种是harbor,一种是小型的私有仓库,harbor有两种模式,一种是主 从,一种是高可用仓库,项目需求,需要两台服务器,都有docker.ldap权限统一 ...

  3. 搭建Harbor私有镜像仓库--v1.5.1

     搭建Harbor私有镜像仓库--v1.5.1 1.介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境 ...

  4. Harbor私有镜像仓库(上)

    上图配置为工作环境 特别注意:win10现在不允许使用私有ca证书,到时登录浏览器会失败,可以选用火狐浏览器. 创建自己的CA证书 openssl req -newkey rsa:4096 -node ...

  5. Harbor私有镜像仓库(下)

    Harbor私有镜像仓库(下) 链接:https://pan.baidu.com/s/1MAb0dllUwmoOk7TeVCZOVQ 提取码:ldt5 复制这段内容后打开百度网盘手机App,操作更方便 ...

  6. k8s创建harbor私有镜像仓库

    1. 部署准备 准备harbor软件包 在部署节点上: mv harbor-offline-installer-v1.4.0.tgz /opt/ && cd /opt tar zxvf ...

  7. harbor 私有镜像仓库使用

    使用harbor私有镜像仓库 登录镜像仓库reg.lvusyy.com docker login reg.lvusyy.com [centos@k8smaster ~]$ sudo docker lo ...

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

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

  9. 安装harbor私有镜像仓库

    有朋友安装harbor的过程中遇到很多问题,为此写一篇最简单安装harbor的文档,希望能帮助所有刚开始接触harbor的新手.harbor的架构不做探究. 实验验环境:os --> cento ...

随机推荐

  1. JavaScript原型链基础(prototype chain)

    1.函数基础 2.对象基础 3.原型链基础

  2. Linux之/etc/fstab文件讲解

    /etc/fstab是用来存放文件系统的静态信息的文件.位于/etc/目录下,可以用命令less /etc/fstab 来查看,如果要修改的话,则用命令 vi /etc/fstab 来修改.当系统启动 ...

  3. WMS - resource info

    Description This sample shows how to work with an OGC Web Map Service (WMS). When WMSLayers are adde ...

  4. 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(二)基础环境安装

    一.安装CentOS 6.5 x64 具体安装过程自行百度 1.1 修改IP地址 [root@master ~]# vi /etc/sysconfig/network DEVICE=eth0 TYPE ...

  5. 网络对抗技术作业一 P201421410029

    网络对抗技术作业一 14网安一区李政浩 201421410029 虚拟机 xp 虚拟机Windows xp的 ip地址 本机win10 IP xp虚拟机与主机ping Dir显示目录 Cd进入目录 A ...

  6. 一兄弟把/etc/init.d/functions误删除了,这是多么悲催的节奏啊;

    RPM resource /lib/lsb/init-functions /lib/lsb/init-functions vs. /etc/init.d/functions in init scrip ...

  7. Mysql 调优2个语句

    一.explain 语句 查看语句的执行计划 二.查看具体每一步耗时 .; .执行SQL .show profiles; 获取2执行SQL的query_id .show profile for que ...

  8. 【Git】删除某个全局配置项

    1.查看Git所有配置 git config --list 2.删除全局配置项 (1)终端执行命令: git config --global --unset user.name (2)编辑配置文件: ...

  9. Python2.7-anydbm

    anydbm模块,把各种数据库模块(dbhash (requires bsddb), gdbm, or dbm)的接口进行了统一.打开后返回的对象操作和字典类似 模块方法: anydbm.open(f ...

  10. ETH—Lwip以太网通信

    第39章     ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...