Administrator
Administrator
发布于 2025-06-17 / 9 阅读
0
0

自建harbor镜像仓库搭建(https)

第一章:Harbor介绍

Harbor介绍
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

官网地址:https://github.com/goharbor/harbor

第二章:创建自签发证书

[root@harbor ~]# hostnamectl set-hostname harbor && bash
[root@harbor ~]# mkdir /data/ssl -p
[root@harbor ~]# cd /data/ssl

#创建私钥
[root@harbor ssl]# openssl genrsa -out ca.key 3072

备注:
openssl genrsa -out ca.key 3072 这个命令的意思是使用 OpenSSL 生成一个 3072 位的 RSA 私钥,并将其保存到一个名为 ca.key 的文件中。具体来说:
•	openssl 是调用 OpenSSL 命令行工具。
•	genrsa 表示生成一个 RSA 私钥。
•	-out ca.key 指定将生成的私钥保存到名为 ca.key 的文件中。
•	3072 指定生成的 RSA 密钥的长度为 3072 位。
这个命令通常用于创建一个私钥,然后可以用这个私钥去签发证书或进行其他加密操作

#创建证书请求文件
[root@harbor ssl]# openssl req -new -x509 -days 3650 -key ca.key -out ca.pem
备注:需要按照提示签发证书:
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:BJ
Organization Name (eg, company) [Default Company Ltd]:公司名称
Organizational Unit Name (eg, section) []:公司组织名称
Common Name (eg, your name or your server's hostname) []:填写你的域名
Email Address []:邮箱地址

备注:
使用 OpenSSL 创建一个自签名的 X.509 证书,并将其保存到一个名为 ca.pem 的文件中:
•	req 表示生成证书请求和证书的子命令。
•	-new 表示创建一个新的证书请求。
•	-x509 表示生成一个自签名的证书,而不是证书请求。X.509 是一种常用的证书标准。
•	-days 3650 指定证书的有效期为 3650 天(大约 10 年)。
•	-key ca.key 指定用于签名证书的私钥文件 ca.key。这个私钥文件应该是之前生成的。
•	-out ca.pem 指定将生成的自签名证书保存到名为 ca.pem 的文件中。
运行这个命令后,系统会提示你输入一些信息,比如国家、组织名称、公共名(Common Name,通常是域名或 IP 地址)等。这些信息将会包含在生成的证书中。
最终,ca.pem 文件会包含一个自签名的证书,可以用于各种用途,比如作为一个简单的 CA(证书颁发机构)证书,或者在开发和测试环境中用于 HTTPS 等。

#生成域名的证书:
[root@harbor ssl]# openssl genrsa -out harbor.key 3072
备注:
openssl genrsa -out harbor.key 3072 这个命令的意思是使用 OpenSSL 生成一个 3072 位的 RSA 私钥,并将其保存到一个名为 harbor.key 的文件中。具体来说:
•	openssl 是调用 OpenSSL 命令行工具。
•	genrsa 表示生成一个 RSA 私钥。
•	-out harbor.key 指定将生成的私钥保存到名为 harbor.key 的文件中。
•	3072 指定生成的 RSA 密钥的长度为 3072 位。
这个命令通常用于创建一个私钥,然后可以用这个私钥去签发证书或进行其他加密操作。生成的私钥文件 harbor.key 是 PEM 格式,可以用 OpenSSL 工具进行查看和进一步处理。

#生成证书请求文件
[root@harbor ssl]# openssl req -new -key harbor.key -out harbor.csr
备注:
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:BJ     
Organization Name (eg, company) [Default Company Ltd]:公司名称
Organizational Unit Name (eg, section) []:公司组织单位名称
Common Name (eg, your name or your server's hostname) []:填写你的域名
Email Address []:邮箱地址

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:#这个地方不需要填东西,直接回车就可以
An optional company name []:#这个地方不需要填东西,直接回车就可以

openssl req -new -key harbor.key -out harbor.csr 这个命令的意思是使用 OpenSSL 生成一个新的证书签名请求(CSR),并将其保存到一个名为 harbor.csr 的文件中。具体来说:
•	openssl 是调用 OpenSSL 命令行工具。
•	req 表示生成证书请求的子命令。
•	-new 表示创建一个新的证书签名请求。
•	-key harbor.key 指定使用之前生成的私钥文件 harbor.key 来签名这个证书请求。
•	-out harbor.csr 指定将生成的证书签名请求保存到名为 harbor.csr 的文件中。
运行这个命令后,系统会提示你输入一些信息,比如:
•	国家 (Country)
•	州或省 (State or Province)
•	地理位置 (Locality)
•	组织名称 (Organization)
•	组织单位名称 (Organizational Unit)
•	公共名 (Common Name),通常是域名或 IP 地址
•	电子邮件地址 (Email Address)
这些信息将会包含在生成的证书签名请求中。harbor.csr 文件是一个 PEM 格式的文件,它包含了公钥和你输入的详细信息,但没有私钥。你可以将这个 CSR 文件发送给证书颁发机构 (CA),由他们签名生成一个正式的证书。

签发证书:
[root@harbor ssl]# openssl x509 -req -in harbor.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out harbor.pem -days 3650
显示如下,说明证书签发好了:
Signature ok
subject=/C=CN/ST=BJ/L=BJ/O=xianchao/OU=k8s/CN=harborxianchao.cn/emailAddress=15011572657@163.com
Getting CA Private Key

备注:
openssl x509 -req -in harbor.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out harbor.pem -days 3650 这个命令的意思是使用 OpenSSL 通过签署一个证书签名请求(CSR)来生成一个新的证书,并使用一个现有的 CA 证书和私钥进行签名。具体来说:
•	openssl 是调用 OpenSSL 命令行工具。
•	x509 表示处理 X.509 证书的子命令。
•	-req 表示这个命令输入的是一个证书签名请求(CSR)。
•	-in harbor.csr 指定输入的证书签名请求文件是 harbor.csr。
•	-CA ca.pem 指定用于签名的 CA 证书文件是 ca.pem。
•	-CAkey ca.key 指定用于签名的 CA 私钥文件是 ca.key。
•	-CAcreateserial 表示如果没有 CA 序列号文件(通常是一个 .srl 文件),则创建一个新的。
•	-out harbor.pem 指定输出生成的签名证书文件名为 harbor.pem。
•	-days 3650 指定生成的证书的有效期为 3650 天(大约 10 年)。
这个命令执行后,会使用 ca.pem 和 ca.key 作为 CA 证书和私钥,来签署 harbor.csr 生成的证书请求,最终生成一个新的证书 harbor.pem。这个证书的有效期为 3650 天。生成的 harbor.pem 证书可以用于各种安全通信用途,比如 HTTPS 服务器、客户端认证等。

第三章:安装Harbor

1、关闭防火墙
[root@harbor ~]# systemctl stop firewalld && systemctl disable firewalld
2、关闭selinux
[root@harbor ~]# setenforce 0
[root@harbor ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
注意:修改selinux配置文件之后,重启机器,selinux才能永久生效
3、配置hosts文件
[root@harbor ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.20.210 beijia.com

4、安装基础软件包
[root@harbor ~]# yum install -y  wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack

5、安装docker
[root@harbor ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
[root@harbor ~]# yum clean all
[root@harbor ~]# yum makecache
#查看所有仓库中所有docker版本,并选择特定版本安装
[root@harbor ~]# yum list docker-ce --showduplicates | sort -r
[root@harbor ~]# yum install docker-ce-24.0.9-1.el9 -y

#docker配置文件
[root@harbor ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.m.daocloud.io"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
     "max-size": "100m",
     "max-file": "10"
  },
  "storage-driver": "overlay2",
  "live-restore": true,
  "default-shm-size": "128M",
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 10,
  "debug": false
}

#启动docker
[root@harbor ~]# systemctl enable --now docker.service

6、开启包转发功能和修改内核参数
内核参数修改:br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发。
[root@harbor ~]# modprobe br_netfilter
[root@harbor ~]# cat > /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
[root@harbor ~]# sysctl -p /etc/sysctl.d/docker.conf

[root@harbor ~]# systemctl restart docker

7、解压缩包
#把harbor的离线包harbor-offline-installer-v2.3.0-rc3.tgz上传到服务器
下载harbor离线包的地址:
https://github.com/goharbor/harbor/releases
https://github.com/goharbor/harbor/tags
[root@harbor ~]# tar -zxvf harbor-offline-installer-v2.3.0-rc3.tgz -C /data/
[root@harbor ~]# cd /data/harbor/
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
修改配置文件:
hostname:  beijia.com
#修改hostname,跟上面签发的证书域名保持一致
#协议用https
certificate: /data/ssl/harbor.pem
private_key: /data/ssl/harbor.key

8、安装docker-compose
上传docker-compose-Linux-x86_64文件到harbor机器
[root@harbor ~]# mv docker-compose-Linux-x86_64.64 /usr/local/bin/docker-compose
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose

9、执行安装命令
[root@harbor ~]# cd /data/harbor/
[root@harbor ~]# ./install.sh
看到下面内容,说明安装成功:
[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registryctl   ... done
Creating harbor-db     ... done
Creating redis         ... done
Creating registry      ... done
Creating harbor-portal ... done
Creating harbor-core   ... done
Creating harbor-jobservice ... done
Creating nginx             ... done
✔ ----Harbor has been installed and started successfully.----

10、验证测试
在自己电脑修改hosts文件
10.1.20.210 beijia.com
浏览器进行访问登录:https://beijia.com/
默认账号密码:admin/Harbor12345

11、扩展:
如何停掉harbor:
[root@harbor harbor]# cd /data/harbor
[root@harbor harbor]# docker-compose stop 
如何启动harbor:
[root@harbor ~]# cd /data/harbor
[root@harbor harbor]# docker-compose up -d

12、配置docker配置文件
#添加仓库配置
[root@harbor harbor]# cat /etc/docker/daemon.json
"insecure-registries": ["10.1.20.210","beijia.com"],

#测试上传下载镜像
[root@harbor ~]# docker tag nginx:latest 10.1.20.210/beijia/nginx:1
[root@harbor ~]# docker login 10.1.20.210
输入账号密码:admin/Harbor12345
[root@harbor ~]# docker push 10.1.20.210/beijia/nginx:1


评论