企业级仓库-Harbor

Harbor简介

Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目。
容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,部署在私有环境内的 Registry 是非常必要的。
Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装
作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。
Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。
另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

Harbor架构

企业级仓库-Harbor

proxy - 前端代理,主要是分发前端页面ui访问和镜像上传和下载流量;
ui - web管理页面,包括一个前端页面和后端API,底层使用mysql数据库;
registry - 镜像仓库,负责存储镜像文件,当镜像上传完毕后通过hook通知ui创建repository,registry的token认证也是通过ui组件完成;
adminserver - 系统的配置管理中心附带检查存储用量,ui和jobserver启动时候需要加载adminserver的配置;
jobsevice - 负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log;
log - 日志汇总组件,通过docker的log-driver把日志汇总到一起。

环境准备:

  • Centos7.8
  • 配置好epel源
  • 已安装好docker的k8s集群

本次配置harbor仓库,是为了让k8s集群的各个节点都能够实现从私有仓库上推拉镜像,便于镜像管理和提高工作效率。

配置过程

1. 安装docker-compose

Docker Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。
使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。

[root@master ~]# yum install -y  docker-compose    

2. 下载harbor

Harbor下载地址: https://github.com/goharbor/harbor/releases

[root@master ~]# wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.1.tgz
[root@master ~]# tar xf harbor-offline-installer-v1.9.1.tgz  -C /usr/local

解压缩之后,目录下会生成harbor.conf文件,该文件就是Harbor的配置文件。

[root@master ~]# cd /usr/local/harbor/
[root@master harbor]# vim harbor.yml
## Configuration file of Harbor

# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
hostname = 192.168.144.30 # 需要修改为自己的IP地址

# 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
ui_url_protocol = http

# mysql数据库root用户默认密码root123,实际使用时修改下
db_password = root123

max_job_workers = 3 
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA

# 邮件设置,发送重置密码邮件时使用
email_identity = 
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后,管理员UI登录的密码,默认是Harbor12345
harbor_admin_password = Harbor12345

# 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证
auth_mode = db_auth

# LDAP认证时配置项
#ldap_url = ldaps://ldap.mydomain.com
#ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
#ldap_search_pwd = password
#ldap_basedn = ou=people,dc=mydomain,dc=com
#ldap_filter = (objectClass=person)
#ldap_uid = uid 
#ldap_scope = 3 
#ldap_timeout = 5

# 是否开启自注册
self_registration = on

# Token有效时间,默认30分钟
token_expiration = 30

# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
project_creation_restriction = everyone

verify_remote_cert = on

3. 配置并安装

把hostname修改为仓库的IP地址

[root@docker ~]# cd /usr/local/harbor/
[root@docker harbor]# vim harbor.yml

企业级仓库-Harbor

[root@docker harbor]# ./prepare

企业级仓库-Harbor

启动harbor

[root@master harbor]# ./install.sh

企业级仓库-Harbor

4. 安装完成后进入web界面

用户名: admin
登录密码:配置文件中的harbor_admin_password = Harbor12345
企业级仓库-Harbor

5. 测试上传镜像

5.1 先登录harbor的Web界面,创建一个项目

这个项目就相当于公司中不同的项目组,每个项目组分别管理各自的项目镜像,后期该项目不需要时,可直接删除该项目。
企业级仓库-Harbor

5.2 给要上传的镜像打标签, 以centos为例:

[root@master harbor]# docker tag centos:latest 192.168.144.30/k8s/centos

5.3 登录镜像库

[root@master harbor]#  docker login -u admin -p Harbor12345 http://192.168.144.30
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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

注意:如果执行登陆操作报错

Error response from daemon: Get https://192.168.144.30/v1/users/: dial tcp 192.168.144.30:443: getsockopt: connection refused

这是因为docker1.3.2版本开始默认docker registry使用的是https,我们设置Harbor默认http方式,所以当执行用docker login、pull、push等命令操作非https的docker regsitry的时就会报错。

解决办法:

  1. 如果系统是MacOS,则可以点击“Preference”里面的“Advanced”在“Insecure Registry”里加上192.168.144.30,重启Docker客户端就可以了。
  2. 如果系统是Ubuntu,则修改配置文件/lib/systemd/system/docker.service,修改[Service]下ExecStart参数,增加–insecure-registry 192.168.144.30。
  3. 如果系统是Centos,可以修改配置/etc/sysconfig/docker,将OPTIONS增加–insecure-registry 192.168.144.30。

5.4 解决centos登录报错

如果已经配置了docker加速,则直接覆盖掉;没有就创建。

[root@master harbor]# vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://pzpl72fb.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.144.30"],
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}

然后重启docker

[root@master harbor]# systemctl damon-reload
[root@master harbor]# systemctl restart docker

能看到自己的IP就ok了

 [root@master harbor]# docker info
.... 
Labels:
Experimental: false
Insecure Registries:
 192.168.144.30
 127.0.0.0/8
....

5.5 上传镜像

[root@master harbor]# docker push 192.168.144.30/k8s/centos
The push refers to repository [192.168.144.30/k8s/centos]
2653d992f4ef: Layer already exists
latest: digest: sha256:dbbacecc49b088458781c16f3775f2a2ec7521079034a7ba499c8b0bb7f86875 size: 529

可以在web页面查看是否上传成功

6. harbor的启动与关闭

6.1 启动

[root@master harbor]# docker-compose up -d
Starting harbor-log ... done
Starting harbor-db ...
Starting redis ...
Starting registryctl ...
Starting harbor-portal ...
Starting registry ... done
Starting harbor-core ... done
Starting harbor-jobservice ...
Starting nginx ... done

6.2 关闭

[root@master harbor]# docker-compose stop
Stopping nginx             ... done
Stopping harbor-jobservice ... done
Stopping harbor-core       ... done
Stopping registry          ... done
Stopping redis             ... done
Stopping harbor-db         ... done
Stopping harbor-portal     ... done
Stopping registryctl       ... done
Stopping harbor-log        ... done

7. 配置其他node节点使用此仓库

只需将其他节点进行以下配置即可

7.1 配置

步骤同5.4,在/etcdocker/damon.json添加一条insecure-registry 192.168.144.30

[root@node1 ~]# vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://pzpl72fb.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.144.30"],
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}

然后重启docker

[root@node1 ~]# systemctl damon-reload
[root@node1 ~]# systemctl restart docker

7.2 验证

登录harbor仓库

[root@k8s-node1 ~]#  docker login -u admin -p Harbor12345 http://192.168.144.30
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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@k8s-node1 ~]# docker pull 192.168.144.30/k8s/centos
Using default tag: latest
latest: Pulling from k8s/centos
7a0437f04f83: Pull complete
Digest: sha256:dbbacecc49b088458781c16f3775f2a2ec7521079034a7ba499c8b0bb7f86875
Status: Downloaded newer image for 192.168.144.30/k8s/centos:latest

私有仓库配置完成

上一篇:python虚拟环境管理之virtualenv,virtualenvwrapper,pipenv,conda


下一篇:vue+vue-router+axios+element-ui构建vue实战项目之三(解读项目文件)