29

Docker Harbor私有仓库简介及部署-zhangjianyf的博客

 5 years ago
source link: https://blog.51cto.com/3388803/2418088
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Docker Harbor私有仓库简介及部署

Harbor简介

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

Harbor特性

  • 基于角色的访问控制 :用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。

  • 镜像复制 : 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。

  • 图形化用户界面 : 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。

  • AD/LDAP 支持 : Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。

  • 审计管理 : 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

  • 国际化 : 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。

  • RESTful API : RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。

  • 部署简单 : 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。

Harbor组件

Harbor在架构上主要由6个组件构成:

  • Proxy:Harbor的registry, UI, token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。

  • Registry: 负责储存Docker镜像,并处理docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token 进行解密验证。

  • Core services: 这是Harbor的核心功能,主要提供以下服务:

  • UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。

  • webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。

  • token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。

  • Database:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。

  • Job Services:提供镜像远程复制功能,可以把本地镜像同步到其他Harbor实例中。

  • Log collector:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

各组件之间的关系

6.png

Harbor的实现

Harbor的每个组件都是以Docker容器的形式构建的,官方也是使用Docker Compose来对它进行部署。用于部署Harbor的Docker Compose模板位于 harbor/docker-compose.yml,打开这个模板文件,发现Harbor是由7个容器组成的;

# docker-compose ps

      Name                     Command               State                                Ports                               ------------------------------------------------------------------------------------------------------------------------------

harbor-adminserver   /harbor/harbor_adminserver       Up    

harbor-db            docker-entrypoint.sh mysqld      Up      3306/tcp    

harbor-jobservice    /harbor/harbor_jobservice        Up    

harbor-log           /bin/sh -c crond && rm -f  ...   Up      127.0.0.1:1514->514/tcp

harbor-ui            /harbor/harbor_ui                Up          

nginx                nginx -g daemon off;             Up      0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp

registry             /entrypoint.sh serve /etc/ ...   Up      5000/tcp

nginx:nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,所以开放https的443端口,它将流量分发到后端的ui和正在docker镜像存储的docker registry。

harbor-jobservice:harbor-jobservice 是harbor的job管理模块,job在harbor里面主要是为了镜像仓库之前同步使用的;

harbor-ui:harbor-ui是web管理页面,主要是前端的页面和后端CURD的接口;

registry:registry就是docker原生的仓库,负责保存镜像。

harbor-adminserver:harbor-adminserver是harbor系统管理接口,可以修改系统配置以及获取系统信息。

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

harbor-db:harbor-db是harbor的数据库,这里保存了系统的job以及项目、人员权限管理。由于本harbor的认证也是通过数据,在生产环节大多对接到企业的ldap中;

harbor-log:harbor-log是harbor的日志服务,统一管理harbor的日志。通过inspect可以看出容器统一将日志输出的syslog。

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

安装及部署

CentOS Linux release 7.3.1611

Docker Engine

17.12.0-ce

docker-compose

1.24.0

harbor

1.6.2

安装harbor之前,需要安装好docker engine、docker-compose

一、安装docker

请参阅链接:二进制安装Docker

二、安装docker-compose

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。

Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

官方网址:Docker compose

#  curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose

# chmod +x /usr/bin/docker-compose

三、安装harbor

我这里是下载离线安装包,进行安装的

# tar xf harbor-offline-installer-v1.6.2.tgz

# mv harbor /usr/local/

# cd /usr/local/harbor/

# vi harbor.cfg

_version = 1.6.0

hostname = node176

ui_url_protocol = http

max_job_workers = 10

customize_crt = on

ssl_cert = /data/cert/server.crt

ssl_cert_key = /data/cert/server.key

secretkey_path = /data

admiral_url = NA

log_rotate_count = 50

log_rotate_size = 200M

http_proxy =

https_proxy =

no_proxy = 127.0.0.1,localhost,ui,registry

email_identity =

email_server = smtp.mydomain.com

email_server_port = 25

email_username = [email protected]

email_password = abc

email_from = admin <[email protected]>

email_ssl = false

email_insecure = false

harbor_admin_password = Harbor12345

auth_mode = db_auth

ldap_url = ldaps://ldap.mydomain.com

ldap_basedn = ou=people,dc=mydomain,dc=com

ldap_uid = uid

ldap_scope = 2

ldap_timeout = 5

ldap_verify_cert = true

ldap_group_basedn = ou=group,dc=mydomain,dc=com

ldap_group_filter = objectclass=group

ldap_group_gid = cn

ldap_group_scope = 2

self_registration = off

token_expiration = 30

project_creation_restriction = adminonly

db_host = postgresql

db_password = root123

db_port = 5432

db_user = postgres

redis_host = redis

redis_port = 6379

redis_password =

redis_db_index = 1,2,3

clair_db_host = postgresql

clair_db_password = root123

clair_db_port = 5432

clair_db_username = postgres

clair_db = postgres

clair_updaters_interval = 12

uaa_endpoint = uaa.mydomain.org

uaa_clientid = id

uaa_clientsecret = secret

uaa_verify_cert = true

uaa_ca_cert = /path/to/ca.pem

registry_storage_provider_name = filesystem

registry_storage_provider_config =

registry_custom_ca_bundle =

# ./install.sh

打开网址:http://172.20.20.176

输入默认的用户名及密码:admin/Harbor12345

最后成功如下:

7.png

配置Harbor支持HTTPS访问链接

# mkdir -p /data/cert && cd /data/cert

  • 创建CA证书

# openssl genrsa -out ca.key 2048

  • 生成自签名证书(使用已由私钥ca.key自行签发根证书)

# openssl  req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/CN=harbor-ca"

  • 生成服务器端私钥和csr签名请求

# openssl req -newkey rsa:4096 -nodes -sha256 -keyout server.key -out server.csr

  • 签发服务器证书

# echo subjectAltName = IP:172.20.20.176 > extfile.cnf

# openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -extfile extfile.cnf -out server.crt

  • 修改harbor的配置文件,harbor.cfg

# cd /usr/local/harbor/

# vi harbor.cfg

hostname = 172.20.20.176

ui_url_protocol = https

# mkdir -p /etc/docker/certs.d/172.20.20.176

# cp /data/cert/ca.crt /etc/docker/certs.d/172.20.20.176/

修改/etc/sysconfig/docker或修改/etc/docker/daemon.json【任选一种】

修改/etc/sysconfig/docker

OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false --insecure-registry registry:5000

OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false --insecure-registry www.node175.com

# cat > /etc/docker/daemon.json << EOF

{ "insecure-registries":["www.node175.com"] }

  • 启动Harbor

# systemctl restart docker

# cd /usr/local/harbor/

# docker-compose  down

# ./prepare

## docker-compose  up -d

https://172.20.20.176/

8.png

遇到问题摘要:

在其他docker节点上,进行docker login harbor地址时,出现

Error response from daemon: Get https://www.node175.com/v2/: x509: certificate is not valid for any names, but wanted to match www.node175.com 等错误信息

解决方法:

将harbor的ca.crt及daemon.json拷贝到其他docker节点的相应位置:

1.harbor的ca.crt路径为:/etc/docker/certs.d/www.node175.com

拷贝到其他docker节点的 /etc/docker/certs.d/www.node175.com,没有则新建

2.拷贝harbor的/etc/docker/daemon.json  到其他docker的/etc/docker目录

3.重启docker服务即可


Recommend

  • 20

    Harbor概述Harbor是VMware公司开源的企业级DockerRegistry项目Harbor的优势基于角色控制基于镜像的复制策略支持LDAP/AD图像删除和垃圾收集图形UI审计RESTfulAPIHarbor架构组成Proxy通过一个前置的反向代理统一接受浏览器,Docker客户端的请求,并将请求转发给后端...

  • 22

    Harbor仓库介绍Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的DockerRegistry管理项目,它包括权限管理(RBAC...

  • 4
    • www.pkslow.com 3 years ago
    • Cache

    使用Harbor搭建Docker私有仓库

    1 开源的仓库管理工具Harbor Harbor是一个由CNCF托管的开源的Docker镜像仓库管理工具,我们可以通过它快速的建立起自己的私有仓库。当然,搭建私有仓库的选择很多,如Docker官方提供的regi...

  • 7
    • www.cnblogs.com 3 years ago
    • Cache

    docker的企业级仓库-harbor

    Harbor 一、背景 Docker中要使用镜像,我们一般都会从本地、Docker Hub公共仓库或者其它第三方的公共仓库中下载镜像,但是出于安全和一些内外网的原因考虑,企业级上不会轻易使用。普通的Docker Registry又不满足需求,所以一般...

  • 8
    • www.wencst.com 3 years ago
    • Cache

    安装企业级docker镜像仓库Harbor

    Harbor官方介绍 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor...

  • 9

    在kubernetes 集群上搭建docker 私有仓库Harbor-阳明的博客|Kubernetes|Istio|Prometheus|Python|Golang|云原生 it’s the season for rainy days and yellow ginkgo leaves. Harbor是一个用于存储和分发...

  • 7
    • supereagle.github.io 2 years ago
    • Cache

    私有镜像仓库选型:Harbor VS Quay

    Docker 虽然提供公有镜像仓库 Docker hub,但是满足不了绝大部分企业对镜像仓库私有化部署的需求。 私有镜像仓库解决方案中,作为 CNCF 项目的 Harbor 长期处于统治地...

  • 6

    Harbor 安装条件 官网给出了安装需要的最低硬件和软件的条件:https://goharbor.io/docs/2.0.0/install-config/installation-prereq...

  • 7

    Harbor 是一个 CNCF 基金会托管的开源的可信的云原生 docker registry 项目,可以用于存储、签名、扫描镜像内...

  • 6

    go程序-->docker私有仓库镜像-->k8s部署 https://www.ywbj.cc/?p=671 https://blog.51c...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK