Harbor高可用实现基于haproxy

Harbor 基础

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

  • 安全
    • 安全和漏洞分析
    • 内容签名和验证
  • 管理
    • 多租户
    • 可扩展的 API 和 Web UI
    • 跨多个注册中心复制,包括 Harbor
    • 身份集成和基于角色的访问控制

Harbor 部署

  1. 安装DockerCompose
    github地址:https://github.com/docker/compose/
wget https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 /usr/bin/docker-compose 
chmod +x /usr/bin/docker-compose 
docker-compose version
  1. 安装 Harbor
    github地址:https://github.com/goharbor/harbor/

2.1 下载并解压

wget https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz
tar xf harbor-offline-installer-v2.4.1.tgz -C /usr/local/
cd /usr/local/harbor/

2.2 准备配置文件

cp harbor.yml.tmpl harbor.yml
修改如下:
vim harbor.yml
# 主机地址或者域名
hostname: 10.10.1.107

# 启用http
http:
  port: 80

# 禁用 https 协议
#https:
  #https port for harbor, default is 443
  #port: 443
  # The path of cert and key files for nginx
  #certificate: /your/certificate/path
  #private_key: /your/private/key/path
# 修改 admin 密码
harbor_admin_password: 123456
# harbor 存储目录
data_volume: /data/harbor

2.3 安装harbor
命令选项

  • --with-notary # 验证ssl
  • --with-trivy i # 开启漏洞扫描器
  • --with-chartmuseum # 支持镜像扫描
# 安装
./install.sh  --with-trivy   --with-chartmuseum

# 完成如下
[+] Running 13/13
 ⠿ Network harbor_harbor              Created                                      0.1s
 ⠿ Network harbor_harbor-chartmuseum  Created                                      0.1s
 ⠿ Container harbor-log               Started                                      1.2s
 ⠿ Container redis                    Started                                      5.1s
 ⠿ Container registryctl              Started                                      4.9s
 ⠿ Container harbor-db                Started                                      4.5s
 ⠿ Container harbor-portal            Started                                      4.3s
 ⠿ Container registry                 Started                                      4.0s
 ⠿ Container chartmuseum              Started                                      4.2s
 ⠿ Container harbor-core              Started                                      10.8s
 ⠿ Container trivy-adapter            Started                                      10.8s
 ⠿ Container nginx                    Started                                      13.3s
 ⠿ Container harbor-jobservice        Started                                      13.2s
✔ ----Harbor has been installed and started successfully.----

2.4 登陆测试
http://ip_or_hostname
image

harbor 新建项目

选项说明

  • 公开: 如果不勾选公开下载也需要密码
  • 存储容量: 此项目的镜像容量上限,-1 为不限制
  • 镜像代理: 镜像代理功能
    image

harbor 开启垃圾清理

开启后 harbor 可以自动清理无tag的镜像。
image

Harbor高可用

Harbor 高可用实现方式

此高可用方案按照方案1实现
方案1:
使用 haproxy 代理 harbor 数据存储在本地(也可存储在远端, harbor 在开启同步策略。
方案2:
使用 harbor 使用 keepalived vip ,数据存储在相同的远端。

角色划分

主机地址 角色
10.10.1.105 docker 客户端
10.10.1.106 客户端+haproxy+keeplived
10.10.1.107 Harbor1
10.10.1.108 Harbor2

keepalived 配置

安装使用略过
可以在我的博客里找:https://www.cnblogs.com/yanshicheng/
配置如下

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id Keepalived_107
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_strict
   vrrp_iptables
}
vrrp_instance Harbor {
    state BACKUP
    interface eth1
    virtual_router_id 100
    nopreempt
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        10.10.1.180
    }
    track_interface {
        eth0
        eth1
    }
}

haproxy 配置

安装使用略过
可以在我的博客里找:https://www.cnblogs.com/yanshicheng/
增加代理如下

listen harbor
 bind 10.10.1.180:80
 mode tcp
 balance source
 server harbor107 10.10.1.107:80 weight 10 check inter 3s fall 3 rise 5
 server harbor108 10.10.1.108:80 weight 10 check inter 3s fall 3 rise 5

配置 Harbor 仓库同步

注意: 双向配置 对端 Harbor 和 本端都要配置
设置中配置仓库管理如下图
107如下
image

108如下
image

配置 Harbor 同步规则

注意: 双向配置 对端 Harbor 和 本端都要配置
设置中配置 复制管理如下图:

  • 复制模式 : 推荐使用push 本端收到镜像,push到对端
  • 资源过滤器: 看情况而定
  • 目标仓库: 选择对端
  • 目标: 也就是对端的项目
  • 触发模式: 推荐时间驱动 同时 勾选删除本地资源时也删除远端的资源
  • 带宽: 限流

107如下
image
108如下
image

客户端测试上传镜像

# 先登录仓库
[root@k8s-105 ~]# docker login harbor.superops.cc
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

# 给镜像重新打标
[root@k8s-105 ~]# docker tag alpine:latest harbor.superops.cc/superops/alpine:v1

# 上传镜像
[root@k8s-105 ~]# docker push  harbor.superops.cc/superops/alpine:v1
The push refers to repository [harbor.superops.cc/superops/alpine]
8d3ac3489996: Pushed 
v1: digest: sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3 size: 528

# 其他客户端下载测试
[root@k8s-106 ~]# docker pull  harbor.superops.cc/superops/alpine:v1
v1: Pulling from superops/alpine
Digest: sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3
Status: Downloaded newer image for harbor.superops.cc/superops/alpine:v1
harbor.superops.cc/superops/alpine:v1
[root@k8s-106 ~]# docker image ls
REPOSITORY                           TAG       IMAGE ID       CREATED       SIZE
alpine                               latest    c059bfaa849c   5 weeks ago   5.59MB
harbor.superops.cc/superops/alpine   v1        c059bfaa849c   5 weeks ago   5.59MB

Harbor 仓库检查镜像同步

107检查
image
108检查
image

Harbor基于https实现

未完待续

posted @ 2022-01-02 01:22  闫世成  阅读(306)  评论(1编辑  收藏  举报