企业级Registry服务(harbor)部署

 

修订记录

修订日期

修订者

   修订内容

  备注

 20180527

      brekalinux

 Harbor部署

 初稿









 

 

使用参考地址: https://vmware.github.io/harbor/cn/

部署参考地址: https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

Github地址: https://github.com/vmware/harbor.git

HTTPS配置:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md 

1. 技术背景介绍;

Harbor Vmwar 公司开源的 企业级的 Docker Registry 管理项;

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

2.功能介绍;

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

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

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

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

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

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

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

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

 

3.硬件支持要求;

 

    

资 源

  

最低配置

  

最佳配置

 

 

    CPU

 

  2CPU

 

 4CPU 或更高  

 

    Mem

 

  4GB

 

 8GB 或更高  

 

    Disk

 

 

  40GB

 

 160GB或更高

 

4.软件版本要求;

 

 

软件名

 

 

   软件版本

 

 

                    相关描述

 

Python

 

 

2.7 版本或更高

 

默认cenots 系统自带,注意:2.7版本以上

 

Docker engine

 

 

1.10版本或更高

 

参考地址https://docs.docker.com/engine/installation/

 

Docker Compose

 

1.6版本或更高

 

 

 

参考地址: https://docs.docker.com/compose/install/

 

Openssl

 

 最新优先

 

 

   生成证书和密钥

 

 

5.网络和端口;

 

 

服务监听端口

 

 

   协议

 

            描述

 

 443 

 

 HTTPS

Harbor UIAPI请求这个端口上的https协议请求。

 

 4443

 

 HTTS

连接到Docker信任服务,只有在启认证时才需要。

 

  80 

 

 HTTP

Harbor UIAPI请求这个端口上的http协议请求

 

 

 

6. harbor部署实战;


6.0 部署NGINX反向代理harbor;

yum -y install nginx



upstream reg {

        server your ip:80 max_fails=3 fail_timeout=10s;

}

server{

        listen     80;

        server_name xxxx;   访问域名

client_max_body_size 5000000m; # 限制客户端最大的Body-Size

        access_log /data/log/nginx/reg.log;


        location / {


rewrite ^(.*)$  https://$host$1 permanent;

        }

}



server{

        listen     443  ssl http2;

        server_name  xxx;  #访问域名 

        client_max_body_size 5000000m; # 限制客户端最大的Body-Size

        access_log /data/log/nginx/reg.log;

        ssl_certificate        ###证书路径;

        ssl_certificate_key  ##证书私钥;

        location / {

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://reg;

        proxy_store off;

        proxy_buffering off;

        proxy_cache_use_stale off;

        proxy_connect_timeout 10s;

        proxy_send_timeout 30s;

        proxy_read_timeout 30s;

        add_header Access-Control-Allow-Origin *;

        add_header Access-Control-Allow-Headers X-Requested-With;

        add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD;


        }

}


6.1 部署流程;

 

     (1).获取相关harbor软件; (需提前安装docker,Docker Compose,openssl)

     (2).生成证书和密钥;

     (3).配置harbor.cfg;

         (4.运行install.sh 启动harbor;

 

6.2 获取软件;

   

   软件获取地址: https://github.com/vmware/harbor/releases

    https://github.com/vmware/harbor/archive/v1.5.0.zip

    $ tar xvf harbor-online-installer-<version>.tgz (在线安装)

   $ tar xvf harbor-offline-installer-<version>.tgz (离线安装)

 

6.3 配置https证书;

 

6.3.1 配置自签名证书;

 

(1).进入目录创建CA认证;

 cd /app/harbor/cert

 [root@docker-harbor]#localdomain=reg.ops.com

 

(2).根据自己需要进行修改

openssl req -nodes -subj "/C=CN/ST=GuangDong/L=DongGuan/CN=$localdomain" -newkey rsa:2048 -keyout $localdomain.key -out $localdomain.csr 

 

openssl x509 -req -days 3650 -in $localdomain.csr -signkey $localdomain.key -out $localdomain.crt 

 

openssl x509 -req -in $localdomain.csr -CA $localdomain.crt -CAkey $localdomain.key -CAcreateserial -out $localdomain.crt -days 10000 

 

 

6.3.2 配置商业证书;

 

注意:

https 商业证书需要提前在证书的提供商进行购买;

 

1.将商业的的证书和密钥放置到harbor.cfg 配置文件下:

例如:

ssl_cert = /app/harbor/cert/ops.com.crt  #证书

ssl_cert_key = //app/harbor/cert/ops.com.key.pem #密钥

 

 

 6.3.3 docker 配置自签名客户端认证;

 

 

注意:

      1.自签名docker 需要配置客户端认证

      2.商业证书则不用配置,因客户端能识别;   

      3.否则docker login reg.chehejia.com 会出现如下错误  

       ping attempt failed with error: Get https://reg.chehejia/v2/: x509:

       certificate is valid for server, not reg.chehejia.com 

  

[root@docker-harbor]# mkdir -p /etc/docker/certs.d/reg.chehejia.com/

[root@docker-harbor]# cp /app/harbor/cert/reg.ops.com.crt /etc/docker/certs.d/reg.ops.com//ca.crt

 

 

 

6.4 调整配置文件;

 

 

[root@k8s-cluster-master01 harbor]# grep -v "^#" harbor.cfg |grep -v "^$"

_version = 1.5.0

hostname = reg.ops.com   ###访问域名地址

ui_url_protocol = https  #配置访问协议,默认为http;如果要启动SSl认证https

max_job_workers = 50

customize_crt = on

#######可选的https证书配置地址 

ssl_cert = /app/harbor/cert/ops.com.crt  #证书

ssl_cert_key = /chj/app/harbor/cert/ops.com.key.pem #密钥#

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

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

email_insecure = false

harbor_admin_password = Harbor12345  ##web控制台登录密码

auth_mode = db_auth

ldap_url = ldaps://ldap.mydomain.com配置####ldap###

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 ####配置ldap 完毕########

self_registration = on

##数据库密码###

token_expiration = 30 # token过期时间,默认为30分钟

project_creation_restriction = everyone

db_host = mysql

db_password = root123

db_port = 3306

db_user = root

redis_url = redis:6379

clair_db_host = postgres

clair_db_password = password

clair_db_port = 5432

clair_db_username = postgres

clair_db = postgres

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 =

 

6.5 运行harbor 服务;

 

[root@docker-harbor]# ./install.sh

 

注意:

   1.运行前必须安装docker 并启动docker 服务,Docker Compose服务;

   2.运行启动过程中会拉去对应的docker 镜像 比较慢,耐心等待完毕后自动启动;

   3. 建议提前配置docker 加速器(可选择阿里云加速器);

 

[root@docker-harbor]# docker-compose stop ###关闭harbor

 

 

7.docker部署;

7.1 docker 部署;

 

 
[root@docker-harbor]# yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
 
[root@docker-harbor]# yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
 
 
[root@docker-harbor]# yum-config-manager --enable docker-ce-edge
 
 
[root@docker-harbor]# yum install docker-ce
 
[root@docker-harbor]# systemctl start docker

 

 

7.2 部署Docker Compose

 

[root@docker-harbor]# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
 
[root@docker-harbor]# chmod +x /usr/local/bin/docker-compose
 
[root@docker-harbor]# docker-compose --version
docker-compose version 1.21.2, build a133471

 

8.使用教程;

8.1 harbor 测试;

 

1.访问域名;

 image.png

 

 

 

(2).默认管理员账号密码;

    

     admin/Harbor12345

 

 

(3)新建项目;

 image.png


4.添加用户;

image.png

 

 

(5).添加项目成员;

image.png


image.png

 

8.2 使用docker 上传镜像至harbor;

(1).网拉取一个测试镜像(nginx)

image.png

 

(2)标记本地镜像,将其归入harbor仓库

 

[root@docker-harbor ~]# docker tag docker.io/nginx:latest reg.chehejia.com/public/nginx:v1

 

(3).配置登录harbor;

 

image.png

 

(4).push 镜像到harbor;

图片3_WPS图片.png 

(5). Harbor 控制台查看;

image.png

 image.png

 

9.技术总结;

   

1. harbor 使用非常便捷,

      2.   严格的权限划分,对应镜像使用权限严格控制;

   3    . k8s docker 易用;

   4. 部署技术成本较小(Compose 统一管理)

   5.    方便支持ldap接入适用企业用户;

   6.    审计查询方便;