harbor:搭建本地仓库

594 阅读3分钟
  • 在本地搭建一个harbor镜像仓库,分别介绍无证书和有证书的两种配置方法,也可以存储helm的chart。

  • 0、关闭防火墙和selinux

  • 0.1 设置静态IP

    1. 输入 vim /etc/sysconfig/network-scripts/ifcfg-ens33 查看网卡信息
    1. BOOTPROTO=dhcp 表示每次关闭linux系统在重新启动之后都会重新获得新的ip地址。

    所以需要将dhcp修改为static,修改后为 BOOTPROTO=static 。 同时将获取ip地址的方式改为静态获取之后,需要在下面配置 IP地址,网关,子网掩码。

    IPADDR=192.168.139.139
    GATEWAY=192.168.139.2
    NETMASK=255.255.255.0
    DNS1=8.8.8.8
    

    配置之后如下图:

    image.png

    接下来切换到命令行模式:保存退出esc,:wq。

    3.返回到根目录 输入 service network restart 命令重启网卡

    4.关上linux在启动你的ip地址就不会发生变化了。

  • 0.2 关闭防火墙和selinux

  • 关闭防火墙

      systemctl stop firewalld
      systemctl disable firewalld
      iptables -F
    
  • 关闭selinux

    修改 vi /etc/selinux/config 将其中的 SELINUX=enforcing 改为 SELINUX=disabled

  • 0.3 服务器命名

  •   hostnamectl set-hostname hub.ruan.com
    
  • 1、安装docker

  •   yum install wget -y 
      wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
      yum install docker-ce docker-ce-cli -y
      mkdir /etc/docker/ 
      cat > /etc/docker/daemon.json << EOF
      {
      "registry-mirrors": ["https://gqs7xcfd.mirror.aliyuncs.com","https://hub-mirror.c.163.com"],
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
      "max-size": "100m"
      },
      "storage-driver": "overlay2"
      }
      EOF
      systemctl daemon-reload && systemctl enable docker && systemctl start docker
    
  • 2、安装Docker Compose

  •   # 下载docker-compose插件
      curl -L "https://github.com/docker/compose/releases/download/1.18.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      # 移动到命令目录
      chmod +x /usr/local/bin/docker-compose
      # 测试
      docker-compose version
    
  • 3、安装harbor

  • 3.1 下载harbor

  •   # 使用wget直接下载
      yum install wget
      # Harbor下载地址参考 https://github.com/goharbor/harbor/releases
      wget https://github.com/goharbor/harbor/releases/download/v2.3.2/harbor-offline-installer-v2.3.2.tgz
    
  • 3.2 解压软件包

  •   tar -zxvf harbor-offline-installer-v2.3.2.tgz
    
  • 3.3 修改配置文件(无证书)

  •   cd harbor
      cp harbor.yml.tmpl harbor.yml
      vi harbor.yml
      
      # hostname:目标的主机名或者完全限定域名
      hostname: hub.ruan.com
      
      如果禁用http协议,以下内容全部注释
      # certificate:SSL证书的路径,仅当协议设置为https时才应用
      # certificate: /data/cert/hub.ruan.com.cert
      # prite_key:SSL密钥的路径,仅当协议设置为https时才应用
      # private_key: /data/cert/hub.ruan.com.key
      # harbor_admin_password:admin用户的登录密码
      harbor_admin_password: Harbor12345
      
      # 依旧注释
      # external_url: https://hub.ruan.com:8433
      
      # 安装流程:检查环境  ->  导入镜像  -> 准备环境  ->  准备配置(含移除旧版本)->  开始启动
      ./prepare
      ./install.sh
    
  • 4、登录

  • 4.1 添加docker信任列表

  •   vim /etc/docker/daemon.json
      加上"insecure-registries":["https://hub.ruan.com"]
    
  • 注意:别忘了加逗号

  •   systemctl daemon-reload && systemctl restart docker
    
  • 4.2 docker登录

  •   docker login hub.ruan.com
    
  • 4.3 登录网页管理界面

  • 直接输入ip或者域名即可

  • 5、创建https证书

  • 若要配置HTTPS,必须创建SSL证书,可以使用受信任的第三方CA签名的证书,也可以使用自签名的证书。使用OpenSSL创建CA,并使用CA对服务器证书和客户端证书进行签名。

  • 5.1 生成证书颁发目录

  •   mkdir -p /data/cert && chmod -R 777 /data/cert && cd /data/cert
    
  • 1.生成CA证书私钥

  •   openssl genrsa -out ca.key 4096
    
  • 2.生成CA证书

  •   openssl req -x509 -new -nodes -sha512 -days 36500     -subj "/CN=hub.ruan.com"     -key ca.key     -out ca.crt
    
  • 5.2 生成服务器证书

  • 1.生成私钥

  •   openssl genrsa -out hub.ruan.com.key 4096
    
  • 2.生成证书签名请求(CSR)

  •   openssl req -sha512 -new     -subj "/CN=hub.ruan.com"     -key hub.ruan.com.key     -out hub.ruan.com.csr
    
  • 3.生成x509 v3扩展文件

  •   cat > v3.ext <<-EOF
      authorityKeyIdentifier=keyid,issuer
      basicConstraints=CA:FALSE
      keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
      extendedKeyUsage = serverAuth
      subjectAltName = @alt_names
      
      [alt_names]
      DNS.1=hub.ruan.com
      EOF
    
  •   openssl x509 -req -sha512 -days 36500     -extfile v3.ext     -CA ca.crt -CAkey ca.key -CAcreateserial     -in hub.ruan.com.csr     -out hub.ruan.com.crt
    
  • 注意:如果这一步没有生成28个,CA报错,则重新生成CA证书

  •   openssl req  -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 36500 -out ca.crt -subj "/C=CN/L=zhejiang/O=lisea/CN=harbor-registry"
      openssl req -newkey rsa:4096 -nodes -sha256 -keyout hub.ruan.com.key -out ca.csr -subj "/C=CN/L=zhejiang/O=lisea/CN=hub.ruan.com"
      openssl x509 -req -days 365 -in ca.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out hub.ruan.com.crt
    
  • 转换hub.ruan.com.crthub.ruan.com.cert,供Docker使用

  •   openssl x509 -inform PEM -in hub.ruan.com.crt -out hub.ruan.com.cert
    
  • 6、添加证书到Docker

  • 6.1 将以下三个证书复制到 /etc/docker/certs.d/hub.ruan.com/ 文件夹下

image.png

  •   cp ca.crt /etc/docker/certs.d/hub.ruan.com/
      cp hub.ruan.com.cert /etc/docker/certs.d/hub.ruan.com/
      cp hub.ruan.com.key /etc/docker/certs.d/hub.ruan.com/
    
  • 如果需要在另一台电脑上登录,可以使用 ssh 传输

  • 6.2 域名解析

  • /etc/hosts文件里添加域名解析

  •   192.168.139.139 hub.ruan.com
    
  • 7、修改 harbor.yml 配置文件里证书路径以及IP地址

  • 7.1 停止harbor

  •   # 切换到harbor.yml所在目录
      cd harbor
      
      docker-compose down
    
  • 7.2 修改配置文件(有证书)

  •   cd harbor
      cp harbor.yml.tmpl harbor.yml
      vi harbor.yml
      
      # hostname:目标的主机名或者完全限定域名
      hostname: hub.ruan.com
      
      如果禁用http协议,以下内容全部注释
      # certificate:SSL证书的路径,仅当协议设置为https时才应用
      certificate: /data/cert/hub.ruan.com.cert
      # prite_key:SSL密钥的路径,仅当协议设置为https时才应用
      private_key: /data/cert/hub.ruan.com.key
      # harbor_admin_password:admin用户的登录密码
      harbor_admin_password: Harbor12345
      
      # 依旧注释
      # external_url: https://hub.ruan.com:8433
      
      # 安装流程:检查环境  ->  导入镜像  -> 准备环境  ->  准备配置(含移除旧版本)->  开始启动
      ./prepare
      ./install.sh
      或者直接
      docker-compose up -d
    
  • 访问的话可以直接访问IP地址即可,也可以在host文件中加入域名映射到host文件中,使用域名进行访问。

  • 如果其他服务器的Docker需要登录Harbor里的东西,需要下面两个步骤

  • 直接复制上面的三个证书到那个服务器即可

    执行命令(地址是Harbor服务器IP地址):echo “192.168.139.139 hub.ruan.com” >> /etc/hosts\

  • 8、helm

  • 如果使用Helm,添加仓库的时候需要加入证书

  • helm repo add --ca-file /data/cert/ca.crt --cert-file /data/cert/hub.ruan.com.cert --key-file /data/cert/hub.ruan.com.key myrepo https://hub.ruan.com/chartrepo/myrepo
    
  • 推送目录,app是目录

  • helm push --ca-file /data/cert/ca.crt --cert-file /data/cert/hub.ruan.com.cert --key-file /data/cert/hub.ruan.com.key --username=admin --password=h12345 app myrepo
    
  • 推送tgz文件,redis.tgz是chart应用文件

  • helm push --ca-file /data/cert/ca.crt --cert-file /data/cert/hub.ruan.com.cert --key-file /data/cert/hub.ruan.com.key --username=admin --password=h12345 app myrepo