第一章: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
