您的位置:首页 > 运维架构 > Docker

自建Docker Harbor镜像管理工具

2017-06-25 12:33 453 查看

 

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搜索密码是普通用户的密码

    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

    阅读更多
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: