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

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