自建Docker Harbor镜像管理工具

 

Harbor是什么?


 

Harbor 是一个开源的,基于docker registry开发的,具备用户管理,操作审核,项目管理,可扩展的镜像管理工具

 

Harbor架构


 

# 主要组件包括:

  • Proxy:对应启动组件nginx。它是一个nginx反向代理,代理Notary client(镜像认证)、Docker client(镜像上传下载等)和浏览器的访问请求(Core Service)给后端的各服务;
  • UI(Core Service):对应启动组件harbor-ui。底层数据存储使用mysql数据库,主要提供了四个子功能: 
    Registry:对应启动组件registry。负责存储镜像文件,和处理镜像的pull/push命令。Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull、push请求转发到token服务来获取有效的token。
    • UI:一个web管理页面ui;
    • API:Harbor暴露的API服务;
    • Auth:用户认证服务,decode后的token中的用户信息在这里进行认证;auth后端可以接db、ldap、uaa三种认证实现;
    • Token服务(上图中未体现):负责根据用户在每个project中的role来为每一个docker push/pull命令issuing一个token,如果从docker client发送给registry的请求没有带token,registry会重定向请求到token服务创建token。
  • Admin Service:对应启动组件harbor-adminserver。是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候需要加载adminserver的配置;
  • Job Sevice:对应启动组件harbor-jobservice。负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log;
  • Log Collector:对应启动组件harbor-log。日志汇总组件,通过docker的log-driver把日志汇总到一起;
  • Volnerability Scanning:对应启动组件clair。负责镜像扫描
  • Notary:对应启动组件notary。负责镜像认证
  • DB:对应启动组件harbor-db,负责存储project、 user、 role、replication、image_scan、access等的metadata数据。

参考:https://blog.csdn.net/liukuan73/article/details/79634524

 

 

 

Harbor的安装配置


 

# 系统安装运行需求和建议:

1. 一台独立的linux host centos 7.4,docker 17.03.0-ce+以上版本,docker-compose 1.10.0+ .

2. 下载Harbor离线安装包进行安装

3. 自定义Harbor服务器的域名:reg.yujianbo.vip ,可以在hosts文件自定义指向对应的服务器

 

安装步骤:

1. 安装docker

yum remove -y docker docker-common docker-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum list docker-ce.x86_64  --showduplicates | sort -r
#列出可以安装的docker版本
yum -y install docker-ce-18.06.1.ce
#安装指定版本的dockermkdir -p /lib/systemd/system/docker.service.d

cat > /lib/systemd/system/docker.service.d/docker.conf << 'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --default-ulimit nofile=65536
EOF

#--default-ulimit有bug,暂时无法放到/etc/docker/daemon.json里

mkdir -p /etc/docker/
mkdir -p  /srv/docker/
cat > /etc/docker/daemon.json << EOF
{
    "dns": [
        "114.114.114.114",
        "8.8.8.8"
    ],
    "data-root": "/srv/docker/",
    "hosts": [
        "unix:///var/run/docker.sock"
    ],
    "registry-mirrors": [
        "https://0sr73mco.mirror.aliyuncs.com"
    ],
    "insecure-registries": [
        "reg.yujianbo.vip"
    ]
}
EOF

# "hosts": ["unix:///var/run/docker.sock","tcp://127.0.0.1:2375"],
#"registry-mirrors": ["https://registry.docker-cn.com"],中国docker hub专用地址,docker官方提供

systemctl daemon-reload
systemctl start docker
systemctl enable docker
docker info
docker version

 

2.安装docker-compose

yum -y install python-pip
pip
install --upgrade pip
pip
install docker-compose
docker
-compose version

 

3.下载Harbor离线安装包进行安装

mkdir -p /srv/harbor/
wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.2.tgz
#去https://github.com/goharbor/harbor/releases查找stable版本,当前最新stable版本是v1.5.2

tar zxf harbor-offline-installer-v1.5.2.tgz cd harbor sed -i "s#hostname = reg.mydomain.com#hostname = reg.yujianbo.vip#g" harbor.cfg #修改harbor的hostname为咱们自定义的reg.yujianbo.vip
sh install.sh #开始自动安装Harbor,直到成功

安装完成后可以通过http://reg.yujianbo.vip访问Harbor,默认账号密码:admin/Harbor12345

你没有公网域名解析的话可以在/etc/hosts中指定reg.yujianbo.vip和ip地址的对应关系

 

4.使用Harbor push images

docker login reg.yujianbo.vip
#输入账号密码
docker pull nginx #从docker hub拉取最新的nginx镜像
docker tag nginx reg.yujianbo.vip
/library/nginx docker push reg.yujianbo.vip/library/nginx #将nginx镜像push到我们的harbor的默认的library项目中去

 登陆http://reg.yujianbo.vip就可以在项目library中看到我们刚刚push上去的镜像了

 

5.配置Harbor使用微软的活动目录active directory进行登陆认证

ldap://10.1.1.227是微软的DC服务器的地址

cn=test,ou=AAA,dc=local,dc=com  test是普通的用户,AAA是自定义建立的OU,dc=local,dc=com是域控制器的域名

LDAP基础DN,指定只有在ou=AAA,dc=local,dc=com里面创建的用户才能登陆Harbor

LDAP用户UID的属性:sAMAccountName

 
修改配置文件让Harbor使用微软AD进行身份验证
 

下图是微软的活动目录active directory的用户管理页面,其本质上也是一个LDAP服务器,

我个人比较倾向于将所有支持LDAP的服务都统一使用微软的活动目录active directory进行认证,方便企业管理

这样每个员工之开通一个账号就可以登陆公司的所有系统了,比如gitlab,禅道,路由器,防火墙,SVN,

 

 

 6.使用阿里云的OSS代替默认的本地文件存储

cat /srv/harbor/common/templates/registry/config.yml
...
storage:
  oss:
    accesskeyid: 填写你的具有阿里云oss权限账户的RAM的AccessKey ID
    accesskeysecret: 填写你的具有阿里云oss权限账户的RAM的AccessKey ID
    region: oss-cn-beijing
    endpoint: yujianbo-harbor.oss-cn-beijing.aliyuncs.com
    bucket: yujianbo-harbor
    secure: false
...

申请一个阿里云的OSS,创建一个bucket: yujianbo-harbor;在oss的信息中可以查看到endpoint地址;

region 需要你确定你是在哪个地区开通的OSS,可以在https://help.aliyun.com/document_detail/31837.html 查询;

使用阿里云oss可以避免存储的单点故障,阿里云oss还具有共享存储的特点

使用其他的存储类型可以参考: https://docs.docker.com/registry/configuration/#storage

 

7.Harbor服务的维护

如果只是想简单的重启Harbor服务,可以使用如下命令

docker-compose stop
docker
-compose start

 

如果修改的配置文件想让新的配置文件生效,需要如下操作

docker-compose down -v
...
vim /srv/harbor/harbor.cfg
vim /srv/harbor/common/templates/registry/config.yml
...
./prepare
docker-compose up -d

#上面是修改Harbor的配置文件及使用阿里云oss的存储配置文件

 

docker-compose ps命令可以方面的查看Harbor的各个组件是否正常的启动起来

docker-compose ps
       Name                     Command                  State                            Ports                      
---------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                   
harbor-db            /usr/local/bin/docker-entr ...   Up (healthy)   3306/tcp                                        
harbor-jobservice    /harbor/start.sh                 Up                                                             
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                       
harbor-ui            /harbor/start.sh                 Up (healthy)                                                   
nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp,   
                                                                     0.0.0.0:80->80/tcp                              
redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                        
registry             /entrypoint.sh serve /etc/ ...   Up (healthy)   5000/tcp    

 

8.Harbor数据持久化的路径

数据默认存储: /data/

日志默认存储:/var/log/harbor/

 

9.启动Harbor的https功能

cat /srv/harbor/harbor.cfg
......
#set hostname
hostname = reg.yujianbo.vip
#set ui_url_protocol
ui_url_protocol = https
......
#The path of cert and key files for nginx, they are applied only the protocol is set to https 
ssl_cert = /data/cert/reg.yujianbo.vip.crt
ssl_cert_key = /data/cert/reg.yujianbo.vip.key
......
docker-compose down -v
./prepare
docker-compose up -d
#重新生成配置

只需要配置三个地方:

ui_url_protocol = https

ssl_cert = /root/cert/reg.yujianbo.vip.crt

ssl_cert_key = /root/cert/reg.yujianbo.vip.key

 

10.Email settings

Email settings只是在使用harbor本地认证时,忘记密码或注册账号时用到,使用LDAP认证就不需要配置这个选项了

 

11.离线安装Notary, Clair and chart repository service

mkdir -p /srv/harbor/
cd /srv/harbor/

wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0-rc2.tgz
#去https://github.com/goharbor/harbor/releases查找stable版本,使用v1.6.0-rc2版本,之前版本安装会有问题,等待新的稳定版本

tar zxf harbor-offline-installer-v1.6.0-rc2.tgz
cd harbor
vim harbor.cfg
hostname = reg.yujianbo.vip
ui_url_protocol = https
ssl_cert = /data/cert/reg.yujianbo.vip.crt
ssl_cert_key = /data/cert/reg.yujianbo.vip.key
#修改harbor的hostname为咱们自定义的reg.yujianbo.vip,安装Notary必须启用https
./install.sh --with-notary --with-clair --with-chartmuseum
#开始自动安装Harbor,直到成功

docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml -f ./docker-compose.chartmuseum.yml stop
docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml -f ./docker-compose.chartmuseum.yml start
#普通重启harbor
docker
-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml -f ./docker-compose.chartmuseum.yml down -v #vim harbor.cfg ./prepare --with-notary --with-clair --with-chartmuseum docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml -f ./docker-compose.chartmuseum.yml up -d #当有配置文件变化时让新的配置文件生效

 

 

 

 

 

 

 

 

参考资料:

Harbor官网:https://goharbor.io/

Harbor github地址:https://github.com/goharbor/harbor

Harbor安装配置向导:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

posted @ 2017-06-25 12:33  灰色渡鹤影  阅读(2575)  评论(0编辑  收藏  举报