从小白到大神之路之学习运维第75天-------Harbor企业镜像仓库部署

第四阶段

时  间:2023年8月7日

参加人:全班人员

内  容:

Harbor企业镜像仓库部署

目录

一、案例概述

二、什么是 Harbor 

(一)Harbor 的优势

(二)Harbor 架构构成 

(三)Core services 这是 Harbor 的核心功能,

三、安装部署haabor仓库

(一)部署harbor环境

四、harbor常规操作

(一)创建一个新项目

(二)客户端上传镜像 

(三)Harbor 日常操作管理 

五、Harbor安全设置

(一)为Harbor配置https

拓展:常用的一些设置


一、案例概述

        Docker 官方镜像仓库是用于管理公共镜像的地方,大家可以在上面找到想要的镜像,也可以把自己的镜像推送上去。但是有时候服务器无法访问互联网,或者不希望将自己的镜像放到互联网上,那么就需要用到 Docker Registry 私有仓库,它可以用来存储和管理自己的镜像。最近公司将项目全部打包成镜像有部署私有仓库服务的需求,经过几轮商讨,最终选择 Docker Harbor,Docker Harbor 有可视化的 Web 管理界面可以方便管理Docker 镜像操作也很方便简单,又提供了多个项目的镜像权限管理控制功能等。

二、什么是 Harbor 

        Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 仓库服务。它以Docker公司开源的Registry为基础,提供了管理 UI。

      基于角色的访问控制(Role Based AccessControl)、AD/LDAP集成、以及审计日志 (Auditlogging) 等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。

        作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全,以提升用户使用 Registry 构建和运行环境传输镜像的效率。

(一)Harbor 的优势

基于角色控制:用户和仓库都是基于项目进行组织的,而用户基于项目可以拥有不同的权限。

基于镜像的复制策略: 镜像可以在多个 Harbor 实例之间进行复制(同步)。适用于负载平衡、高可用性、多数据中心、混合和多云场景。

支持 LDAP / AD:Harbor 与现有的企业 LDAP / ADA 集成,用于用户认证和管理。

图像删除和垃圾收集:镜像可以被删除,也可以回收镜像占用的空间。

图形 UI:用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。

审计: 对存储库的所有操作都进行记录。

RESTful API:用于大多数管理操作的 RESTful API,易于与外部系统集成。

(二)Harbor 架构构成 

Proxy:Harbor 的 Registry、UI、token 等服务。通过一个前置的反向代理统一接收浏览器Docker 客户端的请求,并将请求转发给后端不同的服务。

Registry:负责储存Docker镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个 token服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的token,Registry会通过公钥对 token 进行解密验证。

(三)Core services 这是 Harbor 的核心功能,

主要提供以下服务:

UI(Harbor-ui):提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。

Webhook:为了及时获取 registry 上image状态变化的情况,在Registry上配置webhook,把状态变化传递给UI模块。

Token 服务:负责根据用户权限给每个Docker push/pull命令签发token.Docker客户端向 Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向 Registry进行请求。

Database(Harbor-db):为 core services 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信息等数据。

Log collector(Harbor-log):为了帮助监控 Harbor 运行,负责收集其他组件的log,供日后进行分析。

        Harbor的每个组件都是以Docker容器的形式构建的,因此,使用Docker Compose 来 对它进行部署。在源代码中(https://github.com/vmware/Harbor), 用于部署Harbor的Docker Compose 模板位于 Harbor/make/docker-compose.tpl。

三、安装部署haabor仓库

角色

主机名

IP地址

软件

主库

huyang1

192.168.100.131

docker-ce

docker-compose

Harbor-offline

从库

huyang2

192.168.100.132

docker-ce

docker-compose

Harbor-offline

Docker客户端

huyang3

192.168.100.133

docker-ce

(一)部署harbor环境

1、关闭防火墙

[root@huyang2 ~]# systemctl stop firewalld

[root@huyang2 ~]# iptables -F

[root@huyang2 ~]# setenforce 0

2、安装docker-ce(所有主机)

[root@huyang2 ~]# wget -O

/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@huyang2 ~]# yum -y install yum-utils

device-mapper-persistent-data lvm2

[root@huyang2 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@huyang2 ~]# ls /etc/yum.repos.d/

backup  Centos-aliyun.repo  CentOS-Media.repo  docker-ce.repo

[root@huyang2 ~]# yum -y install docker-ce

[root@huyang2 ~]# systemctl start docker

[root@huyang2 ~]# systemctl enable docker

3、配置阿里云镜像加速器

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

[root@huyang2 ~]# cat << END > /etc/docker/daemon.json

{

"registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]

}

END

[root@huyang2 ~]# systemctl daemon-reload

[root@huyang2 ~]# systemctl restart docker

[root@huyang2 ~]# docker version

4、部署Docker Compose 服务

下载最新 Docker-Compose(两台harbor主机)

[root@huyang2 ~]# curl -L \

https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

[root@huyang2 ~]# chmod +x   /usr/local/bin/docker-compose

查看 Docker-Compose 版本判断安装是否成功

[root@huyang2 ~]# docker-compose --version

5、部署 Harbor 服务 

Harbor 被部署为多个 Docker 容器,因此可以部署在任何支持 Docker 的 Linux 发行版上。目标主机需要安装 Python、Docker 和 Docker Compose。

6、下载 Harbor 安装程序(两台harbor主机)

[root@huyang1 ~]# wget

http://harbor.orientsoft.cn/harbor-v1.5.0/harbor-offline-installer-v1.6.0.tgz

[root@huyang1 ~]# tar xf

harbor-offline-installer-v1.6.0.tgz

7、配置 Harbor 参数文件

配置参数位于文件/usr/local/harbor/harbor.cfg 中。安装之前需要修改IP地址。

[root@huyang1 ~]# vim /usr/local/harbor/harbor.cfg

备注:在此只需修改hostname为当前主仓库的ip地址就行,其他默认设置!

        关于 Harbor.cfg 配置文件中有两类参数,所需参数和可选参数。

        所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor,参数将生效。具体参数如下:

hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.200.111或 www.crushlinux.com。不要使用 localhost 或 127.0.0.1 为主机名。

ui_url_protocol:(http 或 https,默认为 http)用于访问 UI 和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https。

max_job_workers:镜像复制作业线程。

db_password:用于 db_auth 的 MySQL 数据库 root 用户的密码。

customize_crt:打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。当由外部来源提供密钥和根证书时,将此属性设置为 off。

ssl_cert:SSL 证书的路径,仅当协议设置为 https 时才应用。

ssl_cert_key:SSL 密钥的路径,仅当协议设置为 https 时才应用。

secretkey_path:用于在复制策略中加密或解密远程 register 密码的密钥路径。

        可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动时生效,随后对这些参数的更新,Harbor.cfg 将被忽略。

        注意:如果选择通过 UI 设置这些参数,请确保在启动 Harbour 后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的 auth_mode。当系统中有用户时(除了默认的 admin 用户), auth_mode 不能被修改。具体参数如下:

电子邮件设置:Harbor 需要这些参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才需要。请注意,在默认情况下 SSL 连接时没有启用。如果SMTP 服务器需要 SSL,但不支持 STARTTLS,那么应该通过设置启用 SSL email_ssl = TRUE。

harbor_admin_password:管理员的初始密码,只在 Harbour 第一次启动时生效。之后,此设置将被忽略,并且应在 UI 中设置管理员的密码。请注意,默认的用户名/密码是 admin/Harbor12345。

auth_mode:使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于 LDAP 身份验证,请将其设置为 ldap_auth。

self_registration:( 打开或关闭,默认打开)启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在 Harbour 中创建新用户。注意:当 auth_mode 设置为 ldap_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽略。

token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。

project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目。如果将其值设置为“adminonly”,那么只有admin 可以创建项目。

verify_remote_cert:打开或关闭,默认打开。此标志决定了当 Harbour 与远程register 实例通信时是否验证 SSL/TLS 证书。将此属性设置为 off 将绕过 SSL/TLS验证,这在远程实例具有自签名或不可信证书时经常使用。

        另外,默认情况下Harbor 将镜像存储在本地文件系统上。在生产环境中,可以考虑使用其他存储后端而不是本地文件系统,如 S3、Openstack Swif、Ceph 等。需要更新 common/templates/registry/config.yml 文件。

8、启动并安装 Harbor 

配置完成就可以启动 Harbor 了,如下操作:

[root@huyang1 ~]# sh /usr/local/harbor/install.sh

9、查看 Harbor 启动镜像

[root@huyang1 ~]# docker-compose ps

        如果一切都正常,应该可以打开浏览器访问 http://192.168.100.131的管理页面,默认的管理员用户名和密码是 admin/Harbor12345。

至此, Harbor已经搭建完成,具体在WEB UI下面操作也是非常的简单,只有几个选项。

四、harbor常规操作

(一)创建一个新项目

1、输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮。

2、填写项目名称为“2304”

3、点击“确定”按钮,成功创建

4、可以使用 Docker 命令在Harbor本地通过 127.0.0.1 来登录和推送镜像了。默认情况下, Register 服务器在端口 80 上侦听。

5、登录 Harbor。

[root@hhuyang1 ~]# docker login -u admin -p Harbor12345 http://127.0.0.1

6、下载体积小点的镜像进行测试。

[root@huyang1 ~]# docker pull busybox

7、镜像打 tag

[root@huyang1 ~]# docker tag busybox

127.0.0.1/2304/busybox:test1

8)上传镜像到 Harbor

[root@huyang1 ~]# docker push

127.0.0.1/2304/busybox:test1

9、在 Harbor 界面 2304目录下就可以看见这个镜像,以及这个镜像的一些信息。

(二)客户端上传镜像 

        以上操作都是在 harbor01 服务器本地操作,如果其他客户端上传镜像到 Harbor,就会报如下错误。出现这问题的原因是 Docker 自从 1.3.X 之后 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。

[root@huyang2 ~]# docker login -u admin -p Harbor12345 http://192.168.100.131

1、在 Docker 客户端配置操作如下:

解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问

[root@huyang2 ~]# vim

/usr/lib/systemd/system/docker.service

2、重启 Docker,再次登录

[root@huyang2 ~]# systemctl daemon-reload

[root@huyang2 ~]# systemctl restart docker

3、再次登录 Harbor

[root@huyang2 ~]# docker login -u admin -p Harbor12345 192.168.100.131

4、下载体积小一点的镜像进行测试

[root@huyang2 ~]# docker pull busybox

5、镜像打标签及上传到 myproject-crushlinux 项目里面

[root@huyang2 ~]# docker tag busybox 192.168.100.131/2304/busybox:test2

[root@huyang2 ~]# docker push 192.168.100.131/2304/busybox:test2

6、查看 Harbor 的 web 管理界面,myproject-crushlinux 项目里面有两个镜像。

(三)Harbor 日常操作管理 

1、通过 Harbor Web 创建项目 

        点击“+项目”时按规范填写项目名称。项目级别:私有即不勾选(勾选后会变为"公开")。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与Docker hub 一致。

2、创建 Harbor 用户 

1)创建用户并分配权限

系统管理->用户管理->创建用户,填写用户名为“OP---Ada”,邮箱为 [email protected],全名为“Ada”,密码为“Hy584540”,注释为“管理员”。

点击“”确定“按钮后,可将上述创建的用户设置为管理员角色或进行删除操作。

取消管理员:

2)添加项目成员

项目-> 2304->成员->+成员,填写上述创建的用户并分配角色为“项目管理员”。

新建成员:

可对成员角色进行变更或者删除操作。

3)在客户端上用普通账户镜像操作

(1)删除上述打标签的本地镜像.

[root@huyang2 ~]# docker rmi 192.168.100.121/2304/busybox:test2

[root@huyang2 ~]# docker images

备注:Harbor没有发生变化!

(2)首先退出当前用户,然后使用上述创建的账户OP---Ada登录。 

[root@huyang2 ~]# docker logout 192.168.100.131

[root@huyang2 ~]# docker login 192.168.100.131

(3)下载 192.168.100.131/2304/busybox 标签为 test1 的镜像。

[root@huyang2 ~]# docker pull 192.168.100.131/2304/busybox:test1

[root@huyang2 ~]# docker images

(4)查看日志

Web 界面日志,操作日志按时间顺序记录用户相关操作。

3、管理 Harbor 

可以使用 docker-compose来管理Harbor。一些有用的命令如下所示(必须在与docker-compose.yml 相同的目录中运行)。

1)停止/启动/重启 Harbor

[root@huyang1 ~]# cd /usr/local/harbor/

[root@huyang1 ~]# docker-compose stop | start | restart

2)修改 Harbor.cfg 配置文件

要更改 Harbor 的配置文件时,请先停止现有的 Harbor 实例并更新 harbor.cfg;然后运行 prepare 脚本来填充配置;最后重新创建并启动 Harbour 的实例。

[root@harbor harbor]# docker-compose down -v

[root@harbor harbor]# vi harbor.cfg

[root@harbor harbor]# ./prepare

[root@harbor harbor]# docker-compose up -d

3)移除 Harbor 服务容器同时保留镜像数据/数据库

[root@harbor harbor]# docker-compose down -v

4)移除 Harbor 服务容器全部数据(重新部署时采用)

持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的 /var/log/Harbor/目录下:

[root@huyang1 ~]# rm -r /data/database

[root@huyang1 ~]# rm -r /data/registry

五、Harbor安全设置

(一)为Harbor配置https

1、创建自己的CA证书

[root@huyang1 ~]# yum -y install openssl

[root@huyang1 ~]# mkdir -p /data/ssl

[root@huyang1 ~]# cd /data/ssl/

[root@huyang1 ssl]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

 配置如下:

2、生成证书签名请求

[root@huyang1 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.jx.com.key -out www.jx.com.csr

3、生成注册表主机的证书

[root@huyang1 ssl]# openssl x509 -req -days 365 -in www.jx.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.jx.com.crt

4、查看证书情况

[root@huyang1 ssl]# ls -l

5、信任自签发的域名证书

由于CA证书是我们自己签发的,Linux操作系统是不信任的,因此我们需要把证书加入到系统的信任证书里。

1)将自签ca证书添加到系统信任

[root@huyang1 ~]# cp www.jx.com.crt /etc/pki/ca-trust/source/anchors/

2)让系统ca信任设置立刻生效

[root@huyang1 ~]# update-ca-trust extract

[root@huyang1 ~]# update-ca-trust enable

3)创建harbor的证书目录,并复制

[root@huyang1 ~]# mkdir -p /etc/ssl/harbor

[root@huyang1 ~]# cp /data/ssl/www.jx.com.key /etc/ssl/harbor/

[root@huyang1 ~]# cp /data/ssl/www.jx.com.crt /etc/ssl/harbor/

[root@huyang1 ~]# ll /etc/ssl/harbor/

6、关闭现有harbor

[root@huyang1 ~]# cd /usr/local/harbor/

[root@huyang1  harbor]# docker-compose stop

[root@huyang1  harbor]# docker rm -f $(docker ps -aq)

7、修改harbor.cfg配置文件

[root@huyang1 harbor]# vim harbor.cfg

配置如下:

     7 hostname = www.jx.com

    11 ui_url_protocol = https

    23 ssl_cert = /etc/ssl/harbor/www.jx.com.crt

    24 ssl_cert_key = /etc/ssl/harbor/www.jx.com.key

8、重新安装harbor私有镜像仓库

[root@huyang1 harbor]# ./install.sh --with-notary --with-clair  

备注:##--with-notary启用镜像签名;

--with-clair启用漏洞扫描

9、浏览器进行访问测试 https://192.168.100.131

 

拓展:常用的一些设置

1、配置安全模式

项目创建:设定为仅管理员(企业中不会让注册用户随便创建),不允许自动创建

2、漏洞扫描

3、设置仓库安全等级

猜你喜欢

转载自blog.csdn.net/2302_77582029/article/details/132148219
今日推荐