项目需求:
  实现Harbor的HTTPS高可用,由于Harbor 服务器配置不高,直接做HTTPS对上传下载镜像时,若docker客户端多时,会非常慢,为了提高harbor的效率,采用以下方式来解决。
拓扑图:

  

1. 先生成证书
  这里我直接使用脚本生成,若手动制作,可参考网上教程。
  https://github.com/zhang75656/shell-tools/blob/master/gencret.sh
  若要使用此脚本,需要事先安装openssl.【注意:我测试环境是ubuntu,若是CentOS需要修改openssl_conf=/etc/pki/tls/openssl.cnf配置文件的位置.】

 2. 将生成的harbor服务器的证书,合并为All-in-one的pem文件, HAProxy需要这样的文件。
  cat harbor.zcf.com.crt harbor.zcf.com.key > harbor.zcf.com.pem

3. 向docker客户端推送harbor证书
  #复制前,需要先在docker客户端创建目录: /etc/docker/certs.d/harbor.zcf.com,
  #docker会自动到这个目录下去找harbor.zcf.com这个主机的证书.
  scp harbor.zcf.com.crt DockerClientIP:/etc/docker/certs.d/harbor.zcf.com/

4. 在两台harbor服务器上安装keepalived,haproxy, socat,docker-ce,docker-compose
   4.1 配置haproxy,支持SSL代理
  #首先要先检查 haproxy -vv 查看编译参数中是否有USE_OPENSSL=1,若有说明haproxy支持SSL
  vim /etc/haproxy/haproxy.cfg
    global
    .....
    #这是必须的选项,具体含义可参考haproxy官网.
    tune.ssl.default-dh-param 2048

    #这个非必须,这是后面,让keepalived监控haproxy是否正常要用到.
    stats socket /run/haproxy.sock mode 600 level admin

    listen harbor_6443
    #这里就用到上面制作的pem文件了。
    bind *:443 ssl crt /etc/haproxy/harbor.zcf.com.pem
    #若要使用http代理,可开启它,注释掉https代理.
    #bind *:80
    mode http
    #因为是内外使用,因此直接使用源地址哈希调度算法
    balance source

  #下面我将Harbor的HTTP端口修改为6680,这是为了测试使用http做为反向代理时,harbor是否能正常工作。
    server 192.168.10.154 192.168.10.154:6680 check inter 3000 fall 3 rise 2
    server 192.168.10.50 192.168.10.50:6680 check inter 3000 fall 3 rise 2

  4.2 配置keepalived
    vim /etc/keepalived/keepalived.conf
    global_defs {
      #vrrp_strict
      script_user root
      }
      vrrp_script chk_haproxy {
        script "/etc/keepalived/chk_haproxy.sh"
        interval 2
        weight 30
        rise 2
        fall 3
        timeout 2
      }
      vrrp_instance harbor_vip1 {
        state BACKUP
        nopreempt
        interface eth0
        virtual_router_id 154
        priority 100
        advert_int 1
        authentication {
          auth_type PASS
          auth_pass testpass
        }
      virtual_ipaddress {
        192.168.10.100
        }
      track_script {
        chk_haproxy
        }
      unicast_src_ip 192.168.10.154
      unicast_peer {
        192.168.10.50
        }
      }

  #监控haproxy的脚本:
   cat /etc/keepalived/chk_haproxy.sh
    #!/bin/bash

    socket="/run/haproxy.scok"
    echo "show info" |socat stdio $socket
    if [ "$?" -ne 0 ]; then
      systemctl start haproxy
      sleep 1
      echo "show info" |socat stdio $socket
      if [ "$?" -ne 0 ];then
        systemctl stop haproxy keepalived
        exit 1
      fi
    fi
    exit 0

  5. 到github上下载harbor的离线镜像包
    https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz
    这个离线包是Google仓库的,需要翻墙才能下载。

  5.1 解压harbor离线包后,修改以下文件
    vim docker-compose.yml
.      ......
      proxy:
      image: goharbor/nginx-photon:v1.7.5
      container_name: nginx
      restart: always
      cap_drop:
         - ALL
      cap_add:
         - CHOWN
         - SETGID
         - SETUID
         - NET_BIND_SERVICE
      volumes:
       - ./common/config/nginx:/etc/nginx:z
      networks:
       - harbor
      dns_search: .
      ports:
          - 6680:80    #将Harbor映射到宿主机的80和443端口都修改了。
              #若以后肯定不会使用让docker客户端使用HTTP方式上传下载镜像,可不修改80的映射.
       - 6443:443
   #注意:修改Harbor监听的端口是为了避免和本机上的HAProxy监听的端口冲突,
               #若HAProxy没有和harbor安装在一起,完全不需要修改!
       - 4443:4443
        .........

   #接着修改模板文件中的token部分的端口
    vim common/templates/registry/config.yml
      auth:
         token:
        issuer: harbor-token-issuer
        realm: $public_url:6680/service/token
             #若上面修改了80的映射,则这里一定要修改,否则会出现
            #HTTPS认证能通过,但docker客户端上传镜像就会报错, 401 (未认证)
        rootcertbundle: /etc/registry/root.crt
        service: harbor-registry

  #然后,修改harbor.cfg文件,这是harbor提供给我们唯一的配置文件
    vim harbor.cfg
      hostname = 192.168.10.154
      harbor_admin_password = adminpass
  #这里只修改了主机名和harbor默认管理员的密码.其它可参考harbor基础部分,选择性设置。

  #最后就可以启动安装harbor了.
    ./install.sh --with-clair    #我这里启用了clair,可通过此组件,来扫描客户端上传的镜像是否存在已知漏洞。
    。。。。
    ----Harbor has been installed and started successfully.----

    Now you should be able to visit the admin portal at http://192.168.10.50.
    For more details, please visit https://github.com/goharbor/harbor .
    #当出现以上内容时,说明harbor安装完成了。

  #打开浏览器,输入 http://192.168.10.50 ,开始配置Harbor的复制仓库功能
  #先创建一个test1的项目。

    

     #接着仓库管理中创建新的仓库复制目标

    

    #创建复制管理

    

    #这样的操作,在两台harbor服务器上都要配置,并且复制的目标分别是对方,因为客户端将镜像上传到harbor1上,harbor2要将harbor1中的新镜像复制过去,harbor2也一样。

Harbor高可用的更多相关文章

  1. harbor高可用部署

    文章转载自:https://blog.csdn.net/networken/article/details/119704025 harbor高可用简介 harbor目前有两种主流的高可用方案: 多ha ...

  2. harbor高可用集群配置

    目录 说明 双主复制 主从同步 双主复制说明 多harbor实例共享后端存储 方案说明 环境说明 配置说明 安装redis和mysql 导入registry数据库 配置harbor 挂载nfs目录 修 ...

  3. Harbor高可用理论及实践(汇聚篇)

    目录 一.理论概述 什么是harbor harbor要解决的问题 有了docker自带的registry为什么还要用harbor harbor的架构组件 Harbor工作原理 二.部署harbor及其 ...

  4. docker仓库之harbor高可用 (三)

    基于上一篇部署完成了企业级仓库harbor的部署,今天我们来聊聊什么是harbor的高可用 Harbor 支持基于策略的 Docker 镜像复制功能,这类似于 MySQL 的主从同步,其可以实现不同的 ...

  5. harbor高可用集群搭建

    高可用harbor集群搭建 一.安装部署 1.节点角色 角色 数量 名称 备注 harbor主节点 2 harbor-1 harbor-2 双主模式 haproxy 2 HA-1 HA-2 需要通过k ...

  6. Docker Harbor 高可用 1.7.5版本(七)

    环境说明: node1 10.10.5.135 仓库 1 node2 10.10.5.136 仓库 2 node3 10.10.5.137 客户端 实验内容: Harbor 可以在两台主机之间相互同步 ...

  7. 014.Docker Harbor+Keepalived+LVS+共享存储高可用架构

    一 多Harbor高可用介绍 共享后端存储是一种比较标准的方案,将多个Harbor实例共享同一个后端存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取.通过前置LB组件,如Keepalived ...

  8. kubernetes部署高可用Harbor

    前言 本文Harbor高可用依照Harbor官网部署,主要思路如下,大家可以根据具体情况选择搭建. 部署Postgresql高可用集群.(本文选用Stolon进行管理,请查看文章<kuberne ...

  9. Kubernetes容器集群 - harbor仓库高可用集群部署说明

    之前介绍Harbor私有仓库的安装和使用,这里重点说下Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制:2)多harbor实例共享后端存储. 一.Harb ...

随机推荐

  1. os.mkdir()与 shutil.rmtree()对文件夹的 创建与删除

    import osimport shutil # os.mkdir('C:/Users/Desktop/123') # 表示在桌面上创建文件# os.mkdir('123') # 表示在此代码文件下创 ...

  2. Vue--基础2

    目录 Vue--基础2 vue成员获取 分隔符成员 计算属性成员 什么是计算属性 计算属性的用法 注意: 监听属性成员 组件 组件的介绍 组件的优点: 局部组件 全局组件 组件复用的数据隔离 组件之间 ...

  3. Vulnhub靶场题解

    Vulnhub简介 Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行 ...

  4. net start mysql 失败提示“NET HELPMSG 3534”

    lz使用的window系统8.0.16版本的mysql,以下四步解决如上问题: 1. mysqld -remove 2. mysqld --initialize 3.mysqld -install(m ...

  5. kill 命令在Java应用中使用注意事项

    前言 我们都知道,kill在linux系统中是用于杀死进程. kill pid [..] kill命令可将指定的信号发送给相应的进程或工作. kill命令默认使用信号为15,用于结束进程或工作.如果进 ...

  6. 服务器架构前面加了防火墙,Nginx如何获取客户端真实ip???

    在大部分实际业务场景中,网站访问请求并不是简单地从用户(访问者)的浏览器直达网站的源站服务器,中间可能经过所部署的CDN.高防IP.WAF等代理服务器.例如,网站可能采用这样的部署架构:用户 > ...

  7. SQLAlchemy的常用数据类型

    SQLAlchemy常用的数据类型 Column 代表数据库表中的一列 是创建对象时数据类型所依赖的对象,通过在Column对象中指明具体的数据类型来实现相应的数据库表中的列的格式自定义. Strin ...

  8. windows定时器编程

    目前,Windows下的定时器编程主要有三种方式. 1)SetTimer定时器是利用Windows窗口消息WM_TIMER来实现的.使用方法非常简单,SetTimer创建定时器,KillTimer销毁 ...

  9. idea 端口被占用

    打开你的DOS命令首先输入 netstat  -ano|findstr  8088   (8088即为被占用的端口号) 再输入taskkill  /pid  7348  /f     (7348即为上 ...

  10. docker学习9-搭建rabbitMQ环境

    前言 docker搭建rabbitMQ环境 下载镜像 rabbitMQ 镜像仓库地址https://hub.docker.com/_/rabbitmq 找带有 mangement的版本,会带后台管理界 ...