Harbor安装以及ci/cd集成

内容纲要

Harbor介绍

Harbor 是由 VMware 开源的一款云原生制品仓库,Harbor 的核心功能是存储和管理 Artifact。Harbor 允许用户用命令行工具对容器镜像及其他 Artifact 进行推送和拉取,并提供了图形管理界面帮助用户查看和管理这些 Artifact。在 Harbor 2.0 版本中,除容器镜像外,Harbor 对符合 OCI 规范的 Helm Chart、CNAB、OPA Bundle 等都提供了更多的支持。

安装准备

1.需要安装docker和docker-compose并运行,docker安装可以参考:
Gitea+Drone+Rancher CI/CD持续集成解决方案中有详细解决方案

安装

下载地址:https://github.com/goharbor/harbor/releases
直接选择编译好的包

这里有两个包Harbor offline installer 和 Harbor online installer,两者的区别的是 Harbor offline installer 里就包含的 Harbor 需要使用的镜像文件

下载成功,并解压

tar zxf harbor-offline-installer-v1.10.1.tgz -C /data/

进入解压的目录,并 ls

[root@master ~]# cd /data/harbor/
[root@master harbor]# ls
common.sh  harbor.v1.10.1.tar.gz  harbor.yml  install.sh  LICENSE  prepare

编辑配置文件

编辑 harbor.yml 配置文件,hostname 是 harbor 对外暴露的访问地址,HTTP 服务对外暴露 80 端口。这里可暂时先不配置HTTPS,可将HTTPS 相关内容注释。

修改完成后运行./prepare 命令

部署

./install.sh

登录页面

浏览器输入 http://192.168.101.105 访问 Harbor 页面,用户名和密码为 harbor.yml 配置文件中默认设置的 admin,Harbor12345。

编辑 /etc/docker/daemon.json,设置允许访问的 HTTP 仓库地址。

{ 
    "insecure-registries":["11.8.36.21:8888"] 
}

HTTPS 配置(可选)

在生产环境中建议配置 HTTPS,可以使用由受信任的第三方 CA 签名的证书,也可以使用自签名证书。如果想要启用 Content Trust with Notary 来正确签名所有图像,则必须使用 HTTPS。

生成 CA 证书

本次实验中我们使用自签名证书。生产环境中应使用受信任的第三方 CA 签名的证书。

生成 CA 证书私钥
openssl genrsa -out ca.key 4096
生成 CA 证书

-subj 表示证书的组织。CN 后面的值改成 harbor 的 IP 地址或者域名。

openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=11.8.36.21" \ -key ca.key \ -out ca.crt

生成 Server 证书

生成 Harbor 使用的证书和私钥。

生成 Server 私钥
openssl genrsa -out server.key 4096
生成 Server 证书签名请求(CSR)

生成 Harbor 的证书签名请求,使用上面生成的 CA 证书来给 Server 签发证书。

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=11.8.36.21" \
    -key server.key \
    -out server.csr
生成 x509 v3 扩展文件

通过 docker 或者 ctr 等工具拉取 HTTPS 的镜像时,要求 HTTPS 的证书包含 SAN 扩展。

SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。例如下图中 Google 的这张证书的主题备用名称(SAN)中列了一大串的域名,因此这张证书能够被多个域名所使用。对于 Google 这种域名数量较多的公司来说,使用这种类型的证书能够极大的简化网站证书的管理。
使用以下命令生成 x509 v3 扩展文件:

cat > v3.ext <<-EOF
        authorityKeyIdentifier=keyid,issuer
        basicConstraints=CA:FALSE
        keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
        extendedKeyUsage = serverAuth
        subjectAltName = IP:11.8.36.21
        EOF

如果是域名访问通过下面方式生成 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=yourdomain.harbor.com
        EO
使用 CA 证书签发 Server 证书
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in server.csr \
    -out server.crt

为 Harbor 和 Docker 配置证书

将 server 证书和密钥复制到 Harbor 主机上的 /data/cert 目录中
转换 server.crt 为 server.cert

Docker 守护程序会认为 .crt 文件是 CA 证书,因此需要将 server 证书转换为 server.cert 文件。其实改下后缀就可以了,证书里面的内容是一样的。

openssl x509 -inform PEM -in server.crt -out server.cert
重启 Docker Engine
systemctl restart docker

重新部署 Harbor

修改 harbor.yml 配置文件,添加 HTTPS 相关配置,指定 HTTPS 的端口号和证书路径:

使用 prepare 脚本生成 HTTPS 配置

使用 prepare 脚本为反向代理 Nginx 容器生成 HTTPS 配置。

./prepare

删除原有 Harbor 容器

Harbor 原有的数据文件默认是挂载在宿主机的 /data 目录下,因此删除 Harbor 容器并不会丢失数据。

docker-compose down -v

重新启动 Harbor

docker-compose up -d

Gitea+Drone+Rancher CI/CD持续集成对接

Gitea+Drone+Rancher CI/CD持续集成解决方案与Harbor对接只需要将原有的阿里云仓库替换成为我们自己的Harbor仓库即可

THE END
分享
二维码
< <上一篇
下一篇>>