1 Harbor入门

1.1 Harbor简介

Harbor是一个开源的可信云本机注册表项目,用于存储,签名和扫描内容。Harbor通过添加用户通常需要的功能(如安全性,身份和管理)来扩展开源Docker Distribution。使注册表更接近构建和运行环境可以提高图像传输效率。Harbor支持在注册表之间复制映像,还提供高级安全功能,如用户管理,访问控制和活动审计。

镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。harbor以docker-compose的规范形式组织各个组件,并通过docker-compose工具进行启停。

docker的registry是用本地存储或者s3都是可以的,harbor的功能是在此之上提供用户权限管理、镜像复制等功能,提高使用的registry的效率。Harbor的镜像拷贝功能是通过docker registry的API去拷贝,这种做法屏蔽了繁琐的底层文件操作、不仅可以利用现有docker registry功能不必重复造轮子,而且可以解决冲突和一致性的问题。

1.2 Harbor尝鲜

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

Harbor 在线体验地址:https://demo.goharbor.io/harbor/sign-in?redirect_url=%2Fharbor%2Fprojects 注册登录即可

页面如下:

1.3 架构与设计

如上图所示,Harbor包含6个组件:

Proxy: Harbor的组件,例如注册表,UI和令牌服务,都在反向代理之后。代理将来自浏览器和Docker客户端的请求转发给各种后端服务。

Registry:负责存储Docker镜像和处理Docker pull/pash 命令。由于Harbor需要对图像实施访问控制,因此Registry会将客户端定向到令牌服务,以获取每个提取或推送请求的有效令牌。

Core services:港湾的核心功能,主要提供以下服务:

UI:一个图形用户界面,用于帮助用户管理Registry Webhook上的图像:Webhook是一种在Registry中配置的机制,因此可以将Registry中的图像状态更改填充到Harbor的Webhook端点。Harbor使用webhook更新日志,启动复制和其他一些功能。令牌服务:负责根据用户的项目角色为每个docker push / pull命令发出令牌。如果从Docker客户端发送的请求中没有令牌,则注册表会将请求重定向到令牌服务。数据库:数据库存储项目,用户,角色,复制策略和图像的元数据。

Job services:用于图像复制,本地图像可以复制(同步)到其他Harbor实例。

log collector:负责在一个地方收集其他模块的日志。

2 Harbor安装准备

2.1 版本说明

本次采用的Harbor版本为1.8.1,采用离线安装的方式进行安装,安装地址为:https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.1.tgz

2.2 环境说明

Harbor被部署为多个Docker容器,因此可以部署在任何支持Docker的Linux发行版上。目标主机需要Docker,并且要安装Docker Compose。

①硬件环境

Resource Capacity Description
CPU minimal 2 CPU 4 CPU is preferred
Mem minimal 4GB 8GB is preferred
Disk minimal 40GB 160GB is preferred

②软件环境

软件 版本 描述
Docker engine version 17.06.0-ce+ or higher 安装文档: docker engine doc
Docker Compose version 1.23.0 or higher安装文档 安装文档: docker compose doc
Openssl latest is preferred Generate certificate and keys for Harbor

③网络环境

港口 协议 描述
443 HTTPS Harbor端口和核心API将接受此端口上的https协议请求,此端口可以在配置文件中更改
4443 HTTPS 只有在启用“公证”时才需要连接到Dock的Docker Content Trust服务,此端口可以在配置文件中更改
80 HTTP Harbor端口和核心API将接受此端口上的http协议请求

④部署说明

目前kubernetes环境如下:

  • k8s-master:172.171.15.90

  • k8s-worker1:172.171.15.91

  • k8s-worker1:172.171.15.92

部署方案:在两个worker节点部署karbor,作为双主结构,在master部署nginx进行负载分担(暂时未实现):

3 Harbor安装与配置

3.1 Worker节点安装Harbor

1).将下载的离线安装包拷贝到worker节点,并进行解压并进入[各worker节点]

1
2
tar zxvf harbor-offline-installer-v1.8.1.tgz
cd harbor

2).修改harbor.yml

k8s-worker1:

1
vim harbor.yml

修改内容

1
hostname: 172.171.15.91

k8s-worker2:

1
vim harbor.yml

修改内容

1
hostname: 172.171.15.92

3)安装 docker-compose ,版本需要1.18.0+,[各worker节点]:

1
2
3
curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

4)执行install.sh[各worker节点]:

1
sh install.sh

最终结果:

表示成功

5)验证:

任意访问一台:http://172.171.15.92/

用户名:admin

密码:Harbor12345

3.2 Master节点安装Nginx

1)创建目录并拉取nginx镜像[Master节点]

1
2
mkdir nginx
docker pull nginx:1.13.12

如果拉取缓慢的话请配置国内镜像源。

2)编辑nginx.conf[Master节点]

1
vim nginx.conf

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

stream {
upstream hub {
server 172.171.15.91:80;
}
server {
listen 80;
proxy_pass hub;
proxy_timeout 300s;
proxy_connect_timeout 5s;

}
}

2)编辑restart.sh[Master节点]

1
vim restart.sh

内容如下:

1
2
3
4
5
6
#!/bin/bash
docker stop harbornginx

docker rm harbornginx

docker run -idt --net=host --name harbornginx -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:1.13.12

3.3 配置Hashboard用户

创建k8s项目[各worker节点]:

创建用户pusher:[各worker节点]:

将该用户添加为k8s为开发人员[各worker节点]:

4 Harbor体验

4.1 配置域名解析以及docker仓库

1)配置/etc/hosts

①k8s-master1

1
127.0.0.1 hub.pml.com

②k8s-worker1

1
172.171.15.90 hub.pml.com

–insecure-registry 172.171.15.90

2)配置docker仓库[各节点]:

1
vim /etc/docker/daemon.json

内容如下:

1
2
3
4
5
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kdzfmmxg.mirror.aliyuncs.com"],
"insecure-registries":["hub.pml.com"]
}

4.2 上传镜像测试

1)将之前的ngin镜像打tag[master节点]:

1
docker tag nginx:1.13.12 hub.pml.com/k8s/nginx:1.13.12

2)用户登录[master节点]

1
docker login -u pusher -p Harbor12345 hub.pml.com

3)上传镜像[master节点]:

1
docker push hub.pml.com/k8s/nginx:1.13.12

4)查看:

5)worker1拉取该镜像


评论