手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

随笔2个月前发布 熊猫爱购
80 0 0

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

Docker 大家应该比较熟悉了,Docker 之所以能够火遍全球,成为容器化的代名词,Docker Hub 绝对功不可没。

Docker Hub 中央仓库是基于 Docker Registry 构建的,但是默认的 Docker Registry 比较基础和底层,很多基于 Registry 进行了二次开发,而其中最著名的可能就要数 harbor 了。

今天我们就来实践安装当前最新版 Harbor 仓库吧!

官网地址:https://goharbor.io/

当前最新版本为:2.11.1, 以后再更新估计安装也大差不差,因为目前的安装方式已经几年没变过了。

Harbor 安装相对比较简单,一般推荐直接下载 离线安装包(包含有离线镜像)。

下载地址:

https://github.com/goharbor/harbor/releases

安装 Harbor 需要机器上提前安装好 docker & docker-compose, 如果没有安装可以参照我之前的文章:

【快来体验一下 AlmaLinux 并快速安装 docker & docker-compose 吧】

Harbor 安装推荐的机器配置如下

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

我这里使用的 virtual box 虚拟机配置不算太高,不过应该能跑起来,试试吧!

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

如需了解 Virtual Box 安装虚拟机,可以参考我之前写过的一篇文章:

【VirtualBox 安装 Linux 和 Windows 保姆级教程指导(多图慎入)】

安装 Harbor 的步骤一般如下:

0, 机器安装 docker & docker-compose
1, 下载离线安装包
2, 自签证书或者使用已有的 SSL 证书(可选)
3, 修改配置文件
4, 安装并启动服务

下面我会带你全面从 0-1 完成一个单机版的 Harbor 仓库的搭建。

下载离线包

上面已经贴过下载地址了,这里直接演示命令,安装目录位于 /opt/




cd /opt/


wget https://github.com/goharbor/harbor/releases/download/v2.11.1/harbor-offline-installer-v2.11.1.tgz

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

自签证书

由于 docker 默认拉取镜像是 https 方式,而配置 https 需要 ssl 证书,所以我们来自签一个证书吧。当然 docker 也支持非安全拉取,这不是主要想新学一门技能吗,哈哈,开整。

主要分以下 6 步,我这里以 hub.laijuba.com 域名为例供参考




#1 创建 ca.key


openssl genrsa -out ca.key 4096


#2 创建 ca.crt


openssl req -x509 -new -nodes -sha512 -days 365 


 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=Harbor Root CA" 


 -key ca.key 


 -out ca.crt


 


#3 创建 hub.laijuba.com.key


openssl genrsa -out hub.laijuba.com.key 4096


#4 创建 hub.laijuba.com.csr


openssl req -sha512 -new 


    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=hub.laijuba.com" 


    -key hub.laijuba.com.key 


    -out hub.laijuba.com.csr


 


#4 构建用于域名配置的 v3.ext 文件


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.laijuba.com


EOF


 


#5 构建 hub.laijuba.com.crt


openssl x509 -req -sha512 -days 3650 


    -extfile v3.ext 


    -CA ca.crt -CAkey ca.key -CAcreateserial 


    -in hub.laijuba.com.csr 


    -out hub.laijuba.com.crt


 


#6 构建 hub.laijuba.com.cert


openssl x509 -inform PEM -in hub.laijuba.com.crt -out hub.laijuba.com.cert

经过上述操作,总计得到了如下文件:

• ca.key
• ca.crt
• hub.laijuba.com.key
• hub.laijuba.com.csr
• v3.ext
• hub.laijuba.com.crt
• hub.laijuba.com.cert

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

Harbor 搭建需要用到:

• ca.crt
• hub.laijuba.com.key
• hub.laijuba.com.crt

Docker 配置证书需要用到:

• ca.crt
• hub.laijuba.com.key
• hub.laijuba.com.cert

以上证书先备用,后续会用到。

安装 Harbor

解压离线包,并配置,直接看下方操作吧




tar -zxf harbor-offline-installer-v2.11.1.tgz


cd harbor


cp harbor.yml.tmpl harbor.yml


 


# 编辑 harbor.yml 相关配置, 只保留更改的部分,其他未改动的省略


vim harbor.yml


...


hostname: hub.laijuba.com


...


  certificate: /opt/harbor/ssl/hub.laijuba.com.crt


  private_key: /opt/harbor/ssl/hub.laijuba.com.key


...


data_volume: /data/harbor


 


 


# 创建 /opt/harbor/ssl 目录


mkdir ssl


# 拷贝证书


cp ../hub.laijuba.com.crt ../hub.laijuba.com.key ssl/


 


# 执行安装


./install.sh

等待执行完毕

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

安装成功

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

会自动生成一个 docker-compose.yml, 执行 docker-compose ps 可以查看状态, status 都是 healthy 则表示启动成功。

docker-compose ps

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

验证 Harbor

配置 /etc/hosts, 因为是自签的证书,所以配置一下 hosts 模拟 dns 解析




# 要用虚拟机的 IP,不要用 127.0.0.1


10.0.2.15 hub.laijuba.com

注:如果是本机搭建,不要配置 127.0.0.1,否则下面的 Docker 验证始终是成功的,因为默认 docker 拉取镜像配置的有 Insecure Registries: 127.0.0.0/8

使用 curl 模拟请求, 使用 -k 可以忽略证书校验




# 提示证书错误(预料之中)


curl -i https://hub.laijuba.com


curl: (60) SSL certificate problem: unable to get local issuer certificate


More details here: https://curl.se/docs/sslcerts.html


 


curl failed to verify the legitimacy of the server and therefore could not


establish a secure connection to it. To learn more about this situation and


how to fix it, please visit the web page mentioned above.


 


 


# -k 忽略校验响应正常


curl -i -k https://hub.laijuba.com


HTTP/1.1 200 OK


Server: nginx


Date: Tue, 03 Sep 2024 15:09:33 GMT


Content-Type: text/html


Content-Length: 785


Connection: keep-alive


Last-Modified: Thu, 15 Aug 2024 10:00:30 GMT


ETag: "66bdd1be-311"


Cache-Control: no-store, no-cache, must-revalidate


Accept-Ranges: bytes


Strict-Transport-Security: max-age=31536000; includeSubdomains; preload


X-Frame-Options: DENY


Content-Security-Policy: frame-ancestors 'none'


 


<!DOCTYPE html>


<html>


    <head>


        <meta charset="utf-8"/>


        <title>Harbor</title>


...

配置 linux 信任 ca 证书,我这里是 AlmaLinux(Red Hat系列)其他 linux 请自行搜索




cp ../ca.crt /etc/pki/ca-trust/source/anchors/


update-ca-trust


 


# 再次执行curl,不需要带 -k 也可以正常了


curl -i https://hub.laijuba.com


HTTP/1.1 200 OK


Server: nginx


Date: Tue, 03 Sep 2024 15:17:00 GMT


Content-Type: text/html

Docker 验证

验证一下 docker login,默认是会证书校验不通过的




docker login hub.laijuba.com


# 报错


Username: admin


Password: 


Error response from daemon: Get "https://hub.laijuba.com/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

由于在上一步中已经系统信任了证书,但是需要重启一下 docker 才能加载到 受信任的证书。

尝试重启 docker 试试,成功了!




# 先把 harbor 停掉,等 docker 起来再拉起来


docker-compose down


# 重启 docker


systemctl restart docker


# 重新启动 harbor(等待启动完毕)


docker-compose up -d


# 需 STATUS = healthy 才行


docker-compose ps


 


docker login hub.laijuba.com


Username: admin


Password: 


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/#credential-stores


 


Login Succeeded

上面自签证书经过 linux 信任 ca 证书导致 docker 能生效的,如果不希望系统信任 ca 证书应该怎么办呢?

下面再实践一下通过 docker 配置证书

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

首先取消 linux ca 信任




rm -rf /etc/pki/ca-trust/source/anchors/ca.crt


update-ca-trust


 


curl -i https://hub.laijuba.com


curl: (60) SSL certificate problem: unable to get local issuer certificate


More details here: https://curl.se/docs/sslcerts.html


 


curl failed to verify the legitimacy of the server and therefore could not


establish a secure connection to it. To learn more about this situation and


how to fix it, please visit the web page mentioned above.

curl 已经不能用了,证明系统级的证书信任已失效,重启 docker 验证是否还可以(步骤同上)




# 同样先停止 harbor


docker-compose down


# 重启 docker


systemctl restart docker


# 启动 harbor(徐等待启动完毕)


docker-compose up -d


# 需 STATUS = healthy 才行


docker-compose ps


# 登出 harbor


docker logout hub.laijuba.com


# 重新登录


docker login hub.laijuba.com


# 报错


Username: admin


Password: 


Error response from daemon: Get "https://hub.laijuba.com/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

接下来按照 docker 官网的配置来实践只给 docker 配置认证

https://github.com/goharbor/harbor/releases




mkdir -p /etc/docker/certs.d/hub.laijuba.com


# 拷贝 cert, key, ca.crt 至上述目录下


cp ../hub.laijuba.com.cert ../hub.laijuba.com.key ../ca.crt /etc/docker/certs.d/hub.laijuba.com/


 


ls -al /etc/docker/certs.d/hub.laijuba.com


total 12


drwxr-xr-x. 2 root root   75 Sep  4 18:05 .


drwxr-xr-x. 3 root root   29 Sep  4 18:05 ..


-rw-r--r--. 1 root root 2053 Sep  4 18:05 ca.crt


-rw-r--r--. 1 root root 2134 Sep  4 18:05 hub.laijuba.com.cert


-rw-------. 1 root root 3272 Sep  4 18:05 hub.laijuba.com.key

继续重启 docker, 操作同上面




# 同样先停止 harbor


docker-compose down


# 重启 docker


systemctl restart docker


# 启动 harbor(徐等待启动完毕)


docker-compose up -d


# 需 STATUS = healthy 才行


docker-compose ps


 


# 重新登录


docker login hub.laijuba.com


Username: admin


Password: 


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/#credential-stores


 


Login Succeeded

OK, 单独配置 docker 使用证书也验证通过。

总结

今天主要分享了 Harbor 私有仓库的搭建,正常搭建比较简单,最主要是尝试通过自签证书实现 HTTPS 访问,包括验证了 linux 系统级信任自签证书和 docker daemon 配置信任自签证书,希望对你有所帮助。

关于证书,多啰嗦几句,现在全球都在推进 SSL 安全加密,越来越多的网站采用了 HTTPS 访问,没有启用 HTTPS 的网站可能即将在 浏览器 里禁止访问了,下一篇文章计划分享如何获取免费的 SSL 证书并给自己的网站配置 HTTPS 访问,敬请期待。

感谢大家的阅读,如有任何问题,欢迎冠珠公中号: 新质程序猿,找到我,有问必答,一起成长。

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

另外还可以领取我珍藏的 **6000T** 高清资源哟,赠人玫瑰,手有余香,不怕你学不会,就怕你不学啊!

手把手教你搭建 Harbor 私有镜像仓库,包含完整的自签证书及验证过程

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...