使用Harbor管理镜像(6)

在上一篇文章中,Jenkins在项目构建完成之后,将最终生成的docker镜像推送到阿里云上,但在有些情况下,比如公司政策或出于安全的考虑,并不希望将镜像交由外部的网络,只允许在公司内网中访问,那这时可以使用Harbor来解决这个问题。本文将通过部署Harbor来存储Jenkins最终生成的docker镜像。

1、Harbor简介

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

  • 基于角色的访问控制:用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制:镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
  • AD/LDAP支持:Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
  • 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化:已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言会添加进来。
  • RESTful API RESTful API:提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
  • 部署简单:docker-compose和离线安装。

2、安装

Harbor的安装支持离线和在线安装,同时也可以通过helm在k8s集群中进行安装,这里采用在线安装的方式。

2.1 准备
  1. 硬件
    新建一台虚拟机,CPU 2核 内存 4G 硬盘20+100(挂载到/data目录)G
  2. 软件
    docker:19.03.2
    docker-compose:1.24.1
    openssl:用于生成harbor的证书和key
  3. 网络端口
    由于是在内网中所以可以考虑关闭防火墙,但至少必须保证以下端口是开放的:
    443:harbor门户和核心api使用的接口,使用https协议
    4443:连接到Harbor的Docker内容信任服务
    80:harbor门户和核心api使用的接口,使用http协议
  4. 域名和hosts文件
    1. 最终将新建的虚拟机的域名设置为:harbor.tlh.com

    2. 添加域名映射(需要访问harbor的都需要配置)

       echo "192.168.241.145    harbor.tlh.com" >> /etc/hosts
      

2.2 生成证书

  1. 创建文件夹,存放所有的生成文件

     mkdir ssl
     cd ssl
    
  2. 获取证书授权

    openssl genrsa -out ca.key 4096
    # 设置证书的信息
    openssl req -x509 -new -nodes -sha512 -days 3650 \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.tlh.com" \
    -key ca.key \
    -out ca.crt
    
  3. 创建私钥key

    openssl genrsa -out harbor.tlh.com.key 4096
    
  4. 生成证书前面请求

    openssl req -sha512 -new \
     -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.tlh.com" \
     -key harbor.tlh.com.key \
     -out harbor.tlh.com.csr
    
  5. 生成证书

     cat > v3.ext <<-EOF
     authorityKeyIdentifier=keyid,issuer
     basicConstraints=CA:FALSE
     keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
     extendedKeyUsage = serverAuth
     subjectAltName = @alt_names
     
     [alt_names]
     DNS.1=harbor.tlh.com
     DNS.2=harbor.tlh
     DNS.3=harbor
     EOF
    
     # 生成证书
     openssl x509 -req -sha512 -days 3650 \
     -extfile v3.ext \
     -CA ca.crt -CAkey ca.key -CAcreateserial \
     -in harbor.tlh.com.csr \
     -out harbor.tlh.com.crt
    

2.3 部署安装

  1. 配置Harbor的证书和key

    mkdir /data/cert
    cp harbor.tlh.com.crt /data/cert/
    cp harbor.tlh.com.key /data/cert/
    
  2. 配置docker的证书、key和CA
    Docker进程解析.crt文件作为CA证书,将.cert文件作为客户端证书。

    1. 生成CA

      openssl x509 -inform PEM -in harbor.tlh.com.crt -out harbor.tlh.com.cert
      
    2. 复制文件:每个需要链接到Harbor的需要进行如下操作

      mkdir -p /etc/docker/certs.d/harbor.tlh.com
      # 复制文件
      cp harbor.tlh.com.cert /etc/docker/certs.d/harbor.tlh.com/
      cp harbor.tlh.com.key /etc/docker/certs.d/harbor.tlh.com/
      cp ca.crt /etc/docker/certs.d/harbor.tlh.com/
      
  3. 配置Harbor

    1. 下载在线安装文件
      通过这个链接https://github.com/goharbor/harbor/releases,下载需要安装的在线安装包,这里选择:v1.9.3

    2. 解压

       tar xvf harbor-online-installer-version.tgz
      
    3. 修改配置文件
      在解压之后的文件夹中,修改harbor.yml文件,该文件中所有必填的数据都是没有被注释的,这里主要修改hostname和https的配置:

        hostname: harbor.tlh.com
        # https related config
        https:
           # https port for harbor, default is 443
           port: 443
           # The path of cert and key files for nginx,配置证书和私钥的路径
           certificate: /data/cert/harbor.tlh.com.crt
           private_key: /data/cert/harbor.tlh.com.key
        
        # The default data volume,设置数据存储的路径
        data_volume: /data
      
  4. 安装

    1. 执行准备安装脚本

      ./prepare
      
    2. 执行安装

      ./install.sh
      
    3. 可选插件

      1. Notary:内容信任,对push到仓库的数据进行签名

      2. Clair:镜像(appc和docker)缺陷静态扫描工具

      3. Chart仓库

         # 携带安装notary、Clair和chart
        ./install.sh --with-notary --with-clair --with-chartmuseum
        

3. 使用

  1. 浏览器访问:https://harbor.tlh.com/,用户名:admin 密码:Harbor12345

  2. 创建用户
    进入主界面之后,在用户管理中新建一个用户名为:jenkins 密码为:Jenkins!23的用户,作为docker客户端登陆harbor使用的账户。

  3. 创建项目
    在项目管理界面创建项目名为:tlhhup的项目,容量设置为不限制。


  4. 添加用户
    将2中添加的用户添加到该项目的成员中。

  5. 推送镜像

    docker login reg.yourdomain.com
    docker push reg.yourdomain.com/myproject/myrepo:mytag
    

4. Jenkins中使用

  1. 新建一个id为harbor的凭证,具体方式查看上一篇文章的配置

  2. 修改tlhhup项目的配置,将docker仓库的地址修改为harbor的地址

     stage('Build Docker Image'){
         container('docker'){
             sh '''
                 mkdir context
                 cp target/tlhhup-1.0-SNAPSHOT.jar context
                 cp doc/Dockerfile context
             '''
             sh 'docker build -t harbor.tlh.com/tlhhup/jks:${BUILD_NUMBER} context'
         }
     }
     stage('Push Docker Image'){
         container('docker'){
             sh 'echo Push Docker Image'
             withCredentials([usernamePassword(credentialsId: 'harbor', passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) {
                 sh '''
                     docker login harbor.tlh.com -u ${dockerHubUser} -p ${dockerHubPassword}
                     docker push harbor.tlh.com/tlhhup/jks:${BUILD_NUMBER}
                 '''
             }
         }
     }
    
  3. 构建

    1. Jenkins结果


    2. harbor结果


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353