美文网首页Docker
docker离线安装harbor

docker离线安装harbor

作者: FyK_21f8 | 来源:发表于2021-04-17 05:02 被阅读0次

    ps:安装Harbor需要docker环境,配置https需要openssl

    1 获取Harbor离线安装包

    通过github获取离线安装包,地址:https://github.com/goharbor/harbor/releases,可以根据自己的需要下载自己需要的release版本,这里使用的是v2.2.1,下载对应的离线安装包harbor-offline-installer-v2.2.1.tgz

    image.png

    2 下载docker-compose

    前往github下载docker-compose,地址:https://github.com/docker/compose/releases,根据自己的docker版本选择对应的release版本,这里安装的是1.29.1

    image.png

    3 安装docker-compose

    mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
    
    # 执行权限
    chmod +x /usr/local/bin/docker-compose
    
    # 检查是否安装成功,输出版本号表示安装成功
    docker-compose - v
    

    4 安装Harbor

    mkdir -p /apps
    cd /apps
    # 上传包
    
    # 解压
    tar -zxvf harbor-offline-installer-v2.2.1.tgz
    
    # 复制一份配置文件
    cd harbor
    cp harbor.yml.tmpl harbor.yml
    
    # 编辑配置文件
    vim harbor.yml
    

    主要编辑配置文件的以下内容

    # 修改成你的ip
    hostname: 192.168.211.99
    
    # 修改端口号
    http:
      port: 880
    
    # 如果不需要https,请注释掉https相关
    #https:
    #  port: 443
    #  certificate: /your/certificate/path
    #  private_key: /your/private/key/path
    
    # 配置密码,将 Harbor12345换成你自己的密码
    harbor_admin_password: Harbor12345
    

    启动harbor

    ./install.sh
    

    可以通过docker ps查看各个组件是否启动完成,启动完成后,就可以通过你配置的IP + PORT访问Harbor了,这里有个小坑,因为harbor本身依赖redis和nginx,如果你本机已经跑着名称为nginx和redis的容器,启动会报错,需要先将自己的redis或者nginx容器重命名才能启动成功。如果不需要开启https的话,可以宣布游戏结束了。

    5 Harbor常用命令

    # 启动harbor
    docker-compose up -d
    
    # 关闭harbor
    docker-compose down
    

    6 配置https

    因为Harbor要配合Rancher一起使用,rancher访问Harbor只支持https,所以要重新配置一下。

    6.1 修改openss的配置

    关键点:制作证书前需要设置openss的配置文件,在[ v3_ca ] 下添加subjectAltName = IP:192.168.211.99,否则做出来的证书使用docker登录会报:x509: cannot validate certificate for 192.168.211.99 because it doesn't contain any IP SANs 错误。这里192.168.211.99需要替换成harbor所在机器的ip

    vim /etc/pki/tls/openssl.cnf
    

    [ v3_ca ]下添加以下内容,ip替换成harbor机器所在ip

    subjectAltName = IP:192.168.211.99
    

    6.2 制作证书

    生成CA证书私钥和CA证书

    # 切换到harbor证书所在的目录,可以自己创建目录,和后面配置对上就好
    mkdir -p /apps/harbor/cert
    cd /apps/harbor/cert
    
    # 执行证书命令
    openssl req \
    -newkey rsa:4096 -nodes -sha256 -keyout ca.key \
    -x509 -days 3650 -out ca.crt \
    -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=NETSION/OU=IT/CN=192.168.211.99/emailAddress=xxxx@xxx.com"
    

    说明:C=CN(国家),ST=Guangdong(省份),L=Shenzhen(城市),O=NETSION(公司),OU=IT(部门),CN=192.168.211.99(IP,harbor的ip),emailAddress=XXX@XXX.com(换成你自己的邮箱,或者随便填)
    执行完后,会得到两个文件ca.crtca.key

    生成服务器证书

    # 私钥
    openssl genrsa -out 192.168.211.99.key 4096
    
    openssl req -sha512 -new -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=NETSION/OU=IT/CN=192.168.211.99/emailAddress=xxxx@xxxx.com" -key 192.168.211.99.key -out 192.168.211.99.csr
    

    生成一个使用ip进行访问的x509 v3扩展文件

    cat > v3.ext <<-EOF
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = IP:192.168.211.99
    EOF
    

    使用刚才生成的v3.ext生成Harbor主机证书

    openssl x509 -req -sha512 -days 3650 \
        -extfile v3.ext \
        -CA ca.crt -CAkey ca.key -CAcreateserial \
        -in 192.168.211.99.csr \
        -out 192.168.211.99.crt
    

    转换192.168.211.99.crt192.168.211.99.cert,供Docker使用,Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书

    openssl x509 -inform PEM -in 192.168.211.99.crt -out 192.168.211.99.cert
    

    到这里我们已经生成了一村证书了

    [root@localhost cert]# ls
    192.168.211.99.cert  192.168.211.99.crt  192.168.211.99.csr  192.168.211.99.key  ca.crt  ca.key  ca.srl  v3.ext
    

    6.3 使用证书

    # 编辑配置文件
    cd /apps/harbor
    vim harbor.yml
    

    主要修改以下内容,端口默认443,certificate和private_key替换成你自己的证书路径

    # 放开之前注释掉的https部分,并修改其内容
    https:
      # https port for harbor, default is 443
      port: 8443
      # The path of cert and key files for nginx
      certificate: /apps/harbor/cert/192.168.211.99.crt
      private_key: /apps/harbor/cert/192.168.211.99.key
    

    将服务器证书,密钥和CA文件复制到Harbor主机上的Docker证书文件夹中

    mkdir -p /etc/docker/certs.d/192.168.211.99:8843
    cp 192.168.211.99.cert 192.168.211.99.key ca.crt /etc/docker/certs.d/192.168.211.99:8843
    

    这里文件夹的命名是有规则限定的,/etc/docker/certs.d/yourdomain.com:port/etc/docker/certs.d/harbor_IP:portyourdomain.comharbor_IP根据自己的情况填写harbor域名或者ip,因为我这里使用的时ip访问,所以配置的是ip,port为你配置的https端口,如果是默认的443可以不填写端口,如果你使用的是非默认值,文件夹名称请加上端口号且需要和harbor.yml配置的https端口对应上

    6.4 重启docker与harbor

    # 关闭harbor
    docker-compose down -v
    
    # 重启docker
    service docker restart
    
    # 重新配置
    ./prepare
    
    # 启动
    ./install.sh
    

    ps:我看到网上有些教程在执行./prepare之后直接docker-compose -d就可以了。但是我发现我执行的时候报错了,docker ps -a发现之前相关的容器全部没有了,所以就直接在./install了一次

    6.5 验证https

    页面访问我们的http端口880,发现已经可以自动跳转到https端口8443了

    image.png
    使用admin,密码使用之前在配置文件中配置的密码,默认Harbor12345,登录成功后便看到了harbor清爽的界面
    image.png

    7 本机docker推送镜像到harbor中

    # 随后输入密码
    docker login https://192.168.211.99:8443 -u admin
    
    # 拉一个镜像
    docker pull mongo
    
    # tag镜像
    docker tag mongo:latest 192.168.211.99:8443/library/mongo:latest
    
    # 推送镜像
    docker psuh 192.168.211.99:8443/library/mongo:latest
    

    镜像已经推入harbor中


    image.png

    8 其他机器推送镜像到harbor中

    因为我们的证书是自己制作的,所以要将CA证书发送到其他机器上添加信任,我自己harbor所在的机器ip为192.168.211.99,演示在192.168.211.100机器上配置信任
    在Harbor机器上的操作

    cd /apps/harbor/cert
    
    # 发送
    scp ca.crt root@192.168.211.100:/home
    

    192.168.211.100另外机器上的操作

    # 切换scp过来的目录
    cd /home
    
    # 创建证书文件夹,命名规则和上面介绍的一样
    mkdir -p /etc/docker/certs.d/192.168.211.99:8443/
    
    # 添加证书
    mv ca.crt /etc/docker/certs.d/192.168.211.99:8443/
    
    # 登录docker
    docker login https://192.168.211.99:8443 -u admin
    
    # pull我们刚才推送上去的镜像
    docker pull 192.168.211.99:8443/library/mongo:latest
    

    如果登录的时候出现以下报错,则是时间不同步问题,导致证书失效

    Error response from daemon: Get https://192.168.211.99/v2/: x509: certificate has expired or is not yet valid
    

    参考文档:https://www.cnblogs.com/cjwnb/p/13441071.html

    相关文章

      网友评论

        本文标题:docker离线安装harbor

        本文链接:https://www.haomeiwen.com/subject/yvtulltx.html