zoukankan      html  css  js  c++  java
  • 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实现

    未完待续

    作者:闫世成

    出处:http://cnblogs.com/yanshicheng

    联系:yans121@sina.com

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。
  • 相关阅读:
    【java基础知识】1
    【android】工程基本文件介绍
    【sqlite权威指南】笔记3 sqlite入门
    【sqlite权威指南】笔记2 sqlite介绍
    【sqlite权威指南】笔记1 概述
    【sqlite】1 start
    【操作系统】笔记8 存储器
    【操作系统】笔试7 汇编
    【操作系统】笔记6 java基本类型及运算
    【操作系统】笔记5
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/15756591.html
Copyright © 2011-2022 走看看