Harbor 镜像仓库

目录

一、Harboar概述

1.1 什么是 Harbor

1.2 Harbor优势

1.3 Harbor构成

1.4 Harbor的误区

二、Harbor 安装(http)

2.1 两种方式

2.2 具体安装步骤

2.2.1 先安装Docker和Docker Compose

扫描二维码关注公众号,回复: 14887734 查看本文章

2.2.2 下载Harbor

2.2.3 harbor.yml 的hostname

2.2.8 镜像推送

三、Harbor部署Https

3.1 生成SSL证书

3.2 Harbor启用HTTPS

3.3 重新配置并部署Harbor

3.4 将数字证书复制到Docker主机


一、Harboar概述


1.1 什么是 Harbor

  • Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。
  • Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
  • Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。

1.2 Harbor优势

  • 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
  • 基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
  • 支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
  • 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
  • 图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
  • 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
  • Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

1.3 Harbor构成


Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

官 方 :Harbor

Github:https://github.com/goharbor/harbor

1.4 Harbor的误区

误区一: Harbor是负责存储容器镜像的 (Harbor是镜像仓库,那么它就应当是存储镜像的)
其实关于镜像的存储,Harbor使用的是官方的docker registry服务去完成,至于registry是用本地存储或者s3都是可以的,Harbor的功能是在此之上提供用户权限管理、镜像复制等功能,提高使用的registry的效率。

误区二:Harbor镜像复制是存储直接复制 (镜像的复制,很多人以为应该是镜像分层文件的直接拷贝)
其实Harbor镜像复制采用了一个更加通用、高屋建瓴的做法,通过docker registry 的API去拷贝,这不是省事,这种做法屏蔽了繁琐的底层文件操作、不仅可以利用现有docker registry功能不必重复造轮子,而且可以解决冲突和一致性的问题。


二、Harbor 安装(http)


2.1 两种方式

• 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小

• 离线安装:安装包包含部署的相关镜像,因此安装包比较大

2.2 具体安装步骤

2.2.1 先安装Docker和Docker Compose

https://github.com/docker/compose/releases

[root@offline-client harbor]# ll
total 500940
-rw-r--r-- 1 root root  12254032 May 15 19:02 docker-compose-Linux-x86_64
-rw-r--r-- 1 root root 500705880 May 15 18:45 harbor-offline-installer-v2.0.0.tgz
[root@offline-client harbor]# 
[root@offline-client harbor]# 
[root@offline-client harbor]# mv  docker-compose-Linux-x86_64 /usr/bin/docker-compose
[root@offline-client harbor]# chmod +x /usr/bin/docker-compose 
[root@offline-client harbor]# 

2.2.2 下载Harbor

使用 tar 包的安装离线安装,下载上传到服务器。

https://github.com/goharbor/harbor/archive/refs/tags/v2.5.0.tar.gz

## 使用离线下载的 tar包安装
[root@offline-client harbor]# docker-compose --help
[root@offline-client harbor]# ll
total 491056
-rw-r--r-- 1 root root      3361 May 11  2020 common.sh
-rw-r--r-- 1 root root 502808042 May 11  2020 harbor.v2.0.0.tar.gz
-rw-r--r-- 1 root root      7816 May 11  2020 harbor.yml.tmpl
-rwxr-xr-x 1 root root      2523 May 11  2020 install.sh
-rw-r--r-- 1 root root     11347 May 11  2020 LICENSE
-rwxr-xr-x 1 root root      1856 May 11  2020 prepare
[root@offline-client harbor]# 
[root@offline-client harbor]# cp harbor.yml.tmpl harbor.yml
[root@offline-client harbor]# 
[root@offline-client harbor]# 

2.2.3 harbor.yml 的hostname

先注释掉 https 的连接方式

服务器登录成功, 输入用户名和密码,可以创建客户分配对应的项目权限

进入项目,点击镜像仓库 我们可以看到对应的镜像推送命令

2.2.8 镜像推送

查看是否推送成功


三、Harbor部署Https


3.1 生成SSL证书

cfssl 下载地址:harbor-https-cfssl生成证书_harbor证书生成-kubernetes文档类资源-CSDN下载

分别执行 cfssl.sh 和 certs.sh 脚本 生成证书。"harbor.winnerinf.com"仓库地址换成自己的。

### 下面的证书生成工具可以自己下载,并移动到 /usr/bin目录
[root@docker-harbor ca]# cat cfssl.sh 
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl*
mv cfssl_linux-amd64 /usr/bin/cfssl
mv cfssljson_linux-amd64 /usr/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

### 生成相应的证书
[root@docker-harbor ca]# cat certs.sh 
cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}
EOF

cat > ca-csr.json <<EOF
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        }
    ]
}
EOF

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

cat > harbor.winnerinf.com-csr.json <<EOF
{
  "CN": "harbor.winnerinf.com",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes harbor.winnerinf.com-csr.json | cfssljson -bare harbor.winnerinf.com 

3.2 Harbor启用HTTPS

编辑 harbor.yml 启用 https 放开

[root@docker-harbor ca]# pwd
/hadoop/software/harbor/ca
[root@docker-harbor ca]# ll
total 44
-rw-r--r-- 1 root root  294 May 28 12:11 ca-config.json
-rw-r--r-- 1 root root  960 May 28 12:11 ca.csr
-rw-r--r-- 1 root root  212 May 28 12:11 ca-csr.json
-rw------- 1 root root 1679 May 28 12:11 ca-key.pem
-rw-r--r-- 1 root root 1273 May 28 12:11 ca.pem
-rw-r--r-- 1 root root 1022 May 28 11:30 certs.sh
-rwxr-xr-x 1 root root  313 May 28 11:30 cfssl.sh
-rw-r--r-- 1 root root  972 May 28 12:11 harbor.winnerinf.com.csr
-rw-r--r-- 1 root root  193 May 28 12:11 harbor.winnerinf.com-csr.json
-rw------- 1 root root 1679 May 28 12:11 harbor.winnerinf.com-key.pem
-rw-r--r-- 1 root root 1322 May 28 12:11 harbor.winnerinf.com.pem
[root@docker-harbor ca]# 



[root@docker-harbor ca]# vim harbor.yml
https:
port: 443
certificate: /hadoop/software/harbor/ca/harbor.winnerinf.com.pem
private_key: /hadoop/software/harbor/ca/harbor.winnerinf.com-key.pem

3.3 重新配置并部署Harbor

[root@offline-client harbor]# ./prepare
###
[root@offline-client harbor]# docker-compose down
[root@offline-client harbor]# docker-compose up -d
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-portal ... done
Creating harbor-db     ... done
Creating registryctl   ... done
Creating redis         ... done
Creating registry      ... done
Creating harbor-core   ... done
Creating harbor-jobservice ... done
Creating nginx             ... done
[root@offline-client harbor]# 

重启后访问就要使用https访问

3.4 将数字证书复制到Docker主机

此时 如果使用其他的docker主机登录 Harbor ,需要将证书分发到对应的docker主机

登录offline-dn03 docker服务器

[root@offline-dn03 ~]# mkdir /etc/docker/certs.d/harbor.winnerinf.com

登录offline-client docker服务器将证书发送到到offline-dn03 docker服务器

[root@offline-client ssl]# cp harbor.winnerinf.com.pem  harbor.winnerinf.com.crt 
[root@offline-client ssl]# ll
total 48
-rw-r--r-- 1 root root  294 May 15 20:43 ca-config.json
-rw-r--r-- 1 root root  960 May 15 20:43 ca.csr
-rw-r--r-- 1 root root  212 May 15 20:43 ca-csr.json
-rw------- 1 root root 1679 May 15 20:43 ca-key.pem
-rw-r--r-- 1 root root 1273 May 15 20:43 ca.pem
-rw-r--r-- 1 root root 1022 May 15 20:43 certs.sh
-rwxr-xr-x 1 root root  313 May 15 20:43 cfssl.sh
-rw-r--r-- 1 root root 1322 May 15 20:56 harbor.winnerinf.com.crt
-rw-r--r-- 1 root root  972 May 15 20:43 harbor.winnerinf.com.csr
-rw-r--r-- 1 root root  193 May 15 20:43 harbor.winnerinf.com-csr.json
-rw------- 1 root root 1679 May 15 20:43 harbor.winnerinf.com-key.pem
-rw-r--r-- 1 root root 1322 May 15 20:43 harbor.winnerinf.com.pem
[root@offline-client ssl]# 
[root@offline-client ssl]# scp harbor.winnerinf.com.crt offline-dn03:/etc/docker/certs.d/harbor.winnerinf.com/
harbor.winnerinf.com.crt                                                                                                 100% 1322     1.3MB/s   00:00    
[root@offline-client ssl]#

 拷贝到需要访问  harbor的 docker 服务器 就可以 访问 harbor 镜像仓库了。

猜你喜欢

转载自blog.csdn.net/qq_35995514/article/details/128519755