Harbor高可用实现基于haproxy
Harbor 基础
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
官网地址: https://goharbor.io/
特性
- 安全
- 安全和漏洞分析
- 内容签名和验证
- 管理
- 多租户
- 可扩展的 API 和 Web UI
- 跨多个注册中心复制,包括 Harbor
- 身份集成和基于角色的访问控制
Harbor 部署
- 安装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
- 安装 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
harbor 新建项目
选项说明
- 公开: 如果不勾选公开下载也需要密码
- 存储容量: 此项目的镜像容量上限,-1 为不限制
- 镜像代理: 镜像代理功能
harbor 开启垃圾清理
开启后 harbor 可以自动清理无tag的镜像。
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如下
108如下
配置 Harbor 同步规则
注意: 双向配置 对端 Harbor 和 本端都要配置
设置中配置 复制管理如下图:
- 复制模式 : 推荐使用push 本端收到镜像,push到对端
- 资源过滤器: 看情况而定
- 目标仓库: 选择对端
- 目标: 也就是对端的项目
- 触发模式: 推荐时间驱动 同时 勾选删除本地资源时也删除远端的资源
- 带宽: 限流
107如下
108如下
客户端测试上传镜像
# 先登录仓库
[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检查
108检查
Harbor基于https实现
未完待续
作者:闫世成
出处:http://cnblogs.com/yanshicheng