zoukankan      html  css  js  c++  java
  • 十三、搭建SSL的私有harbor仓库

    一、实验环境

     
    System OS: CentOS Linux release 7.6.1810 (Core)
    docker version: Docker version 20.10.1
    
    node1 192.168.32.211 docker+harbor
    node2 192.168.32.212 docker
    
    harbor软件版本:
    harbor-offline-installer-v2.1.2

    二、部署ssl的私有harbor仓库

    1、安装docker

    #下载docker-ce的yum源
    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
    #把docker-ce源的地址修改为清华源的地址
    sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
    #更新docker-ce.repo
    yum makecache fast
    #安装docker-ce
    yum install -y docker-ce

    2、安装Docker Compose

    方法一:
    https://github.com/docker/compose/releases
    方法二:
    yum install -y docker-compose
    
    [root@node1 ~]# docker-compose -v
    docker-compose version 1.18.0, build 8dd22a9

    3、部署Harbor HTTP

    #上传harbor-offline-installer-v2.1.2.tgz
    cd /app
    tar harbor-offline-installer-v2.1.2.tgz
    cd harbor 
    cp harbor.yml.tmpl harbor.yml 
    
    ########################################harbor.yml配置文件######################################
    vim harbor.yml 
    # Configuration file of Harbor
    
    # The IP address or hostname to access admin UI and registry service.
    # DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
    hostname: 192.168.32.211
    
    # http related config
    http:
      # port for http, default is 80. If https enabled, this port will redirect to https port
      port: 80
    
    # https related config
    #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
    
    # # Uncomment following will enable tls communication between all harbor components
    # internal_tls:
    #   # set enabled to true means internal tls is enabled
    #   enabled: true
    #   # put your cert and key files on dir
    #   dir: /etc/harbor/tls/internal
    
    # Uncomment external_url if you want to enable external proxy
    # And when it enabled the hostname will no longer used
    # external_url: https://reg.mydomain.com:8433
    
    # The initial password of Harbor admin
    # It only works in first time to install harbor
    # Remember Change the admin password from UI after launching Harbor.
    harbor_admin_password: 123456
    ......
    ####################################end###################################################
    
    
    ./prepare 
    
    ./install.sh
    [root@node1 harbor]# docker ps
    CONTAINER ID   IMAGE                                COMMAND                  CREATED         STATUS                   PORTS                       NAMES
    4289e237bf1e   goharbor/harbor-jobservice:v2.1.2    "/harbor/entrypoint.…"   3 minutes ago   Up 3 minutes (healthy)                               harbor-jobservice
    775f3d56527f   goharbor/nginx-photon:v2.1.2         "nginx -g 'daemon of…"   3 minutes ago   Up 3 minutes (healthy)   0.0.0.0:80->8080/tcp        nginx
    3fa161a8dd62   goharbor/harbor-core:v2.1.2          "/harbor/entrypoint.…"   3 minutes ago   Up 3 minutes (healthy)                               harbor-core
    518b19e39709   goharbor/harbor-registryctl:v2.1.2   "/home/harbor/start.…"   3 minutes ago   Up 3 minutes (healthy)                               registryctl
    decebb8bffd5   goharbor/harbor-db:v2.1.2            "/docker-entrypoint.…"   3 minutes ago   Up 3 minutes (healthy)                               harbor-db
    0393da381782   goharbor/redis-photon:v2.1.2         "redis-server /etc/r…"   3 minutes ago   Up 3 minutes (healthy)                               redis
    8aac2bb9c083   goharbor/registry-photon:v2.1.2      "/home/harbor/entryp…"   3 minutes ago   Up 3 minutes (healthy)                               registry
    48b17d48e306   goharbor/harbor-portal:v2.1.2        "nginx -g 'daemon of…"   3 minutes ago   Up 3 minutes (healthy)                               harbor-portal
    25e5d96537ca   goharbor/harbor-log:v2.1.2           "/bin/sh -c /usr/loc…"   3 minutes ago   Up 3 minutes (healthy)   127.0.0.1:1514->10514/tcp   harbor-log

    4、生成SSL证书

    4.1搭建CA服务器

    CA服务器上操作,本操作为node1

     
    #安装openssl
    yum -y install openssl 
    #openssl配置文件信息
    #####################################################
     vim /etc/pki/tls/openssl.cnf 
    [CA_default]
    dir  :ca的工作目录变量。被下方参数引用(注意:centos5上,此参数要改成绝对路径,不能用相对路径);
    certs    :证书存放位置;
    crl_dir     :吊销证书的存放位置;
    database    :索引文件数据库。签署的所有证书索引文件。自动生成;
    new_certs_dir    :刚签署的证书存放位置;
    certificate       :ca自己的证书位置;
    serial        :下一个证书的编号;
    crlnumber         :已吊销证书的证书编号;
    crl        :当前正在使用的证书吊销列表文件;
    private_key        :ca自己的私钥,安全性很高(可以加密私钥位置文件,让别人拿到也看不了。但是每次使用都得
    解密);
    ##################################end###############################
    
    
    #进入CA的工作目录
    mkdir /harbor_CA
    cd /harbor_CA
    #创建自己的CA证书(不使用第三方权威机构的CA来认证,自己充当CA的角色)
    (umask 077; openssl genrsa -out ca.key 2048) 
    生成自签名证书(使用已有私钥cakey.pem自行签发根证书)
    openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt 
    
    ###########################需要填写的信息#############################
    Country Name (2 letter code) [XX]:CN          #国家代码
    State or Province Name (full name) []:SC      #所在省份
    Locality Name (eg, city) [Default City]:CD    #所在城市 
    Organization Name (eg, company) [Default Company Ltd]:test    #机构名称
    Organizational Unit Name (eg, section) []:test   #部门名称
    Common Name (eg, your name or your server's hostname) []:www.ywx.com  #主机名称(重要)
    Email Address []:test@163.com    #邮箱地址
    #########################end############################################
    
    cd /harbor_CA 
    #创建索引文件
    touch index.txt 
    #证书编号位置
    touch serial 
    #自定义开始证书编号
    echo 01 > serial 
    #已吊销证书编号文件
    touch crlnumber 

    4.2为harbor生成证书请求文件

    本操作为node1

    #创建证书目录并进入
    mkdir /root/harbor_ssl
    cd /root/harbor_ssl
    #生成harbor私钥
    (umask 077; openssl genrsa -out harbor.key 1024) 
    #根据私钥,创建证书申请文件
     openssl req -new -nodes -key /root/harbor_ssl/harbor.key -out /root/harbor_ssl/harbor.csr  -days 365 
     
     ###########################填写信息############################
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN     #国家代码
    State or Province Name (full name) []:SC   #所在省份
    Locality Name (eg, city) [Default City]:SC  #所在城市 
    Organization Name (eg, company) [Default Company Ltd]:TEST  #机构名称
    Organizational Unit Name (eg, section) []:TEST  #部门名称
    Common Name (eg, your name or your server's hostname) []:www.ywx.com   #主机名称(重要)
    Email Address []:test@163.com   #邮箱地址
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:    #空
    An optional company name []:   #空
    [root@node1 harbor_ssl]# 
    #############################end###################################

    4.3 将harbor证书申请文件复制到CA服务器上,有CA进行数字签名

    本操作在node1

    生成注册表主机的证书

    1) 如果您使用的是像reg.yourdomain.com这样的FQDN 来连接您的注册表主机,请运行以下命令以生成注册表主机的证书:

    openssl x509 -req -days 365 -in yourdomain.com.csr -CA /harbor_CA/ca.crt -CAkey /harbor_CA/ca.key -CAcreateserial -out yourdomain.com.crt

    2) 如果你使用IP,比如192.168.32.211来连接你的注册表主机,你可以运行下面的命令:

    echo subjectAltName = IP:192.168.32.211 > extfile.cnf
    openssl x509 -req -in /root/harbor_ssl/harbor.csr -CA /harbor_CA/ca.crt -CAkey /harbor_CA/ca.key -CAcreateserial -extfile /root/harbor_ssl/extfile.cnf -days 365 -out /root/harbor_ssl/harbor.crt

    拷贝回harbor主机

    4.4修改harbar的配置文件并重新安装部署

    本操作在node1

     
    #配置文件修改
     cd /app/harbor/
     vim harbor.yaml
     ##############################配置文件修改##################
     # Configuration file of Harbor
    
    # The IP address or hostname to access admin UI and registry service.
    # DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
    hostname: 192.168.32.211
    
    # http related config
    http:
      # port for http, default is 80. If https enabled, this port will redirect to https port
      port: 80
    
    # https related config
    #https:
      # https port for harbor, default is 443
      port: 443
      # The path of cert and key files for nginx
      certificate: /root/harbor_ssl/harbor.crt
      private_key: /root/harbor_ssl/harbor.key
    
    # # Uncomment following will enable tls communication between all harbor components
    # internal_tls:
    #   # set enabled to true means internal tls is enabled
    #   enabled: true
    #   # put your cert and key files on dir
    #   dir: /etc/harbor/tls/internal
    
    # Uncomment external_url if you want to enable external proxy
    # And when it enabled the hostname will no longer used
    # external_url: https://reg.mydomain.com:8433
    
    # The initial password of Harbor admin
    # It only works in first time to install harbor
    # Remember Change the admin password from UI after launching Harbor.
    harbor_admin_password: 123456
    。。。。
    ###########################################end###################################
    
    #重新部署https的harbor
    ./prepare 
    ./install.sh
    #重启harbor的容器
    docker-compose  down 
    docker-compose  up -d

    5、访问测试

    6、把harbor.crt证书拷贝到docker主机

    本操作在node2

    在具有Docker守护进程的机器上,确保选项“-insecure-registry”不存在,并且您必须将上述步骤中生成的harbor.crt复制到/etc/docker/certs.d/reg.yourdomain.com(或您的注册表主机IP),如果该目录不存在,请创建它。如果您将nginx端口443映射到另一个端口,则应改为创建/etc/docker/certs.d/reg.yourdomain.com:port(或您的注册表主机IP:端口)目录。然后运行任何docker命令来验证设置。

    #创建证书目录
    [root@node2 docker]# mkdir -p /etc/docker/certs.d/192.168.32.211
    #从192.168.32.211上拉取harbor.crt证书
    [root@node2 docker]# cd /etc/docker/certs.d/192.168.32.211
    [root@node2 192.168.32.211]# scp -r 192.168.32.211:/root/harbor_ssl/harbor.crt ./
    [root@node2 192.168.32.211]# ls
    harbor.crt
    
    #重启docker
    [root@node2 192.168.32.211]# systemctl restart docker

    7、上传/下载镜像测试

    本操作在node2

    上传镜像文件

     
    [root@node2 ~]# docker login https://192.168.32.211
    Authenticating with existing credentials...
    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@node2 ~]# docker tag busybox:latest 192.168.32.211/library/busybox:latest
    [root@node2 ~]# docker push 192.168.32.211/library/busybox:latest
    The push refers to repository [192.168.32.211/library/busybox]
    de168d3b8ec4: Pushed 
    latest: digest: sha256:31a54a0cf86d7354788a8265f60ae6acb4b348a67efbcf7c1007dd3cf7af05ab size: 527

    下载镜像文件

    [root@node2 ~]# docker rmi 192.168.32.211/busybox
    Untagged: 192.168.32.211/busybox:latest
    [root@node2 ~]# docker rmi 192.168.32.211/library/busybox
    Untagged: 192.168.32.211/library/busybox:latest
    Untagged: 192.168.32.211/library/busybox@sha256:31a54a0cf86d7354788a8265f60ae6acb4b348a67efbcf7c1007dd3cf7af05ab
    [root@node2 ~]# docker images
    REPOSITORY             TAG       IMAGE ID       CREATED       SIZE
    192.168.32.211/nginx   latest    ae2feff98a0c   9 days ago    133MB
    nginx                  latest    ae2feff98a0c   9 days ago    133MB
    busybox                latest    219ee5171f80   3 weeks ago   1.23MB
    
    下载镜像文件
    [root@node2 ~]# docker pull 192.168.32.211/library/busybox:latest
    latest: Pulling from library/busybox
    Digest: sha256:31a54a0cf86d7354788a8265f60ae6acb4b348a67efbcf7c1007dd3cf7af05ab
    Status: Downloaded newer image for 192.168.32.211/library/busybox:latest
    192.168.32.211/library/busybox:latest
    [root@node2 ~]# docker images
    REPOSITORY                       TAG       IMAGE ID       CREATED       SIZE
    192.168.32.211/nginx             latest    ae2feff98a0c   9 days ago    133MB
    nginx                            latest    ae2feff98a0c   9 days ago    133MB
    192.168.32.211/library/busybox   latest    219ee5171f80   3 weeks ago   1.23MB
    busybox                          latest    219ee5171f80   3 weeks ago   1.23MB
  • 相关阅读:
    20145337实验五Java网络编程及安全
    20145337 《Java程序设计》第10周学习总结
    20145337实验四Android开发基础
    20145337 《Java程序设计》第九周学习总结
    20145337实验三实验报告——敏捷开发与XP实践
    20145337《Java程序设计》第八周学习总结
    20145337《JAVA程序设计》第七周学习总结
    JAVA面向对象程序设计——实验报告
    20145337 《Java程序设计》第六周学习总结
    20145336张子扬 《信息安全系统设计基础》第6周学习总结(一)
  • 原文地址:https://www.cnblogs.com/yaokaka/p/14188993.html
Copyright © 2011-2022 走看看