千家信息网

Docker--------Harbor registry安全认证搭建 [ Https ]

发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,1. 背景 docker中要使用镜像,一般会从本地、docker Hup公共仓库和其它第三方公共仓库中下载镜像,一般出于安全和外网(墙)资源下载速率的原因考虑企业级上不会轻易使用。那么有没有一种办法可
千家信息网最后更新 2025年01月27日Docker--------Harbor registry安全认证搭建 [ Https ]

1. 背景

  docker中要使用镜像,一般会从本地、docker Hup公共仓库和其它第三方公共仓库中下载镜像,一般出于安全和外网(墙)资源下载速率的原因考虑企业级上不会轻易使用。那么有没有一种办法可以存储自己的镜像又有安全认证的仓库呢? ----> 企业级环境中基于Harbor搭建自己的安全认证仓库。

Harbor是VMware公司最近开源的企业级Docker Registry项目, 其目标是帮助用户迅速搭建一个企业级的Docker registry服务。


2. 选择的理由

* 提供了管理UI

* 基于角色的访问控制(Role Based Access Control)

* AD/LDAP集成

* 审计日志(Audit logging)

* 原生支持中文


3. 相关介绍

Harbor在架构上主要由五个组件构成:

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

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

* Core services: 这是Harbor的核心功能,主要提供以下服务:

* UI:提供图形化界面,帮助用户管理registry上的镜像(p_w_picpath), 并对用户进行授权。

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

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

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

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

各个组件之间的关系如下图所示:


Harbor的每个组件都是以Docker容器的形式构建的,所以使用Docker Compose来对它进行部署。

用于部署Harbor的Docker Compose 模板位于 /Deployer/docker-compose.yml. 打开这个模板文件,会发现Harbor由5个容器组成:

* proxy: 由Nginx 服务器构成的反向代理。

* registry:由Docker官方的开源registry 镜像构成的容器实例。

* ui: 即架构中的core services, 构成此容器的代码是Harbor项目的主体。

* mysql: 由官方MySql镜像构成的数据库容器。

* log: 运行着rsyslogd的容器,通过log-driver的形式收集其他容器的日志。

这几个容器通过Docker link的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。


Harbor的认证流程

A、首先,请求被代理容器监听拦截,并跳转到指定的认证服务器。

B、如果认证服务器配置了权限认证,则会返回401。通知dockerclient在特定的请求中需要带上一个合法的token。而认证的逻辑地址则指向架构图中的core services。

C、 当docker client接受到错误code。client就会发送认证请求(带有用户名和密码)到coreservices进行basic auth认证。

D、 当C的请求发送给ngnix以后,ngnix会根据配置的认证地址将带有用户名和密码的请求发送到core serivces。

E、 coreservices获取用户名和密码以后对用户信息进行认证(自己的数据库或者介入LDAP都可以)。成功以后,返回认证成功的信息。


Harbor的安装方式

* 在线online安装 --> 由于国内墙和网速率的原因,体验不理想

 * 离线offline安装 --> 下载包较大 [ 包含了相关依赖镜像 ]

 此次选择离线包安装


4. 环境

[root@harbor ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@harbor ~]# uname -r3.10.0-327.36.3.el7.x86_64


5. 服务器 IP 地址

192.168.60.150


6. 创建证书

* 创建证书存放目录

[root@harbor ~]# mkdir -p /data/cert


* 切换工作路径切证书存放目录

[root@harbor ~]# cd /data/cert/


* 创建 CA 根证书

[root@harbor cert]# openssl req  -newkey rsa:4096 \-nodes -sha256 -keyout ca.key -x509 -days 365 \-out ca.crt -subj "/C=CN/L=wuhan/O=lisea/CN=harbor-registry"


* 生成一个证书签名, 设置访问域名为 harbor.lisea.acn

[root@harbor cert]# openssl req -newkey rsa:4096 \-nodes -sha256 -keyout harbor.lisea.cn.key \-out server.csr -subj "/C=CN/L=wuhan/O=lisea/CN=harbor.lisea.cn"


* 生成主机的证书

[root@harbor cert]# openssl x509 -req -days 365 \-in server.csr -CA ca.crt -CAkey ca.key \-CAcreateserial -out harbor.lisea.cn.crt


7. harbor安装部署

* 安装 docker

[root@harbor ~]# yum install docker -y


* 设置 docker 服务开机启动

[root@harbor ~]# systemctl enable docker.service


* 启动 docker 服务

[root@harbor ~]# systemctl start docker.service


* 安装 docker-compose

[root@harbor ~]# yum install python-pip -y[root@harbor ~]# pip install --upgrade pip[root@harbor ~]# pip install docker-compose[root@harbor ~]# pip install --upgrade backports.ssl_match_hostname


* 下载 harbor 离线包 [ https://github.com/vmware/harbor ]

[root@harbor ~]# wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz


* 解压下载的harbor包 [ harbor-offline-installer-v1.1.2.tgz ]

[root@harbor ~]# tar zxf harbor-offline-installer-v1.1.2.tgz


* 切换进harbor包目录

[root@harbor ~]# cd harbor


* 修改habor配置文件 [ harbor.cfg ]

hostname = harbor.lisea.cn          # 指定私有仓库的主机名,可以是IP地址,也可以是域名   ui_url_protocol = https             # 用户访问私仓时使用的协议,默认时http,配置成httpsdb_password = root123             # 指定mysql数据库管理员密码harbor_admin_password:Harbor12345  # harbor的管理员账户密码ssl_cert = /data/cert/harbor.lisea.cn.crt    # 设置证书文件路径ssl_cert_key = /data/cert/harbor.lisea.cn.key  # 设置证书密钥文件路径


* 通过自带脚本一键安装

[root@harbor harbor]# ./install.sh


* 通过浏览器访问管理 [ 提前设置本地 hosts文件本地重定向至harbor服务器IP ]

https://harbor.lisea.cn

用户默认为admin

密码默认为Harbor12345 [可通过安装前 harbor.cfg 配置文件修改 harbor_admin_password 指定 ]



8. 客户端使用测试 [ docker 机 ]

* 通过 admin 账户登陆创建 test 用户

* 退出 admin 账户登陆 test 用户

 * 创建 test 项目, 访问级别选择公开


* 创建仓库证书存放目录

[root@harbor client]# mkdir /etc/docker/certs.d/harbor.lisea.cn


* 从harbor服务器获取证书至仓库证书目录

[root@harbor client]# scp root@192.168.60.150:/data/cert/ca.crt /etc/docker/certs.d/harbor.lisea.cn/ca.crt


* 用户登陆 [ 本地需要做hosts harbor.lisea.cn 域名重定向至harbor服务器IP ]

[root@harbor client]# docker login -u test -p Test123456 harbor.lisea.cnLogin Succeeded


* 编写dockerfile文件

# Url https://lisea.cn# Base imgae# Base imgaeFROM centos# MaintainerMAINTAINER lisea lisea@126.com# CommandsRUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpmRUN yum install nginx -yRUN echo "daemon off;" >> /etc/nginx/nginx.confRUN echo "this is test nginx p_w_picpath" > /usr/share/nginx/html/index.htmlEXPOSE 80CMD ["nginx"]


* 通过Dockerfile构建一个新镜像, 直接指明registry和标签

[root@harbor client]# docker build -t harbor.lisea.cn/test/nginx:v1.0.1 .


* 上传镜像至 harbor registry

[root@harbor client]# docker push harbor.lisea.cn/test/nginx:v1.0.1


* web中查看镜像是否上传成功 [ 成功上传nginx ]

* 删除本地镜像

[root@harbor client]# docker rmi harbor.lisea.cn/test/nginx:v1.0.1


* 从harbor中下载镜像

[root@harbor client]# docker pull harbor.lisea.cn/test/nginx:v1.0.1



9. 总结



以需求驱动技术,技术本身没有优略之分,只有业务之分。


用户 服务 镜像 认证 容器 证书 仓库 文件 服务器 密码 配置 数据 目录 管理 成功 企业 地址 数据库 权限 组件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术完善与发展 宿迁高性能服务器规格 数据库中什么时候用连接符号 网络技术刚入门学什么 asp链接数据库错误代码 企业信息网络技术运用具体案例 2021网络安全讲话 网络安全相关考试资质 信息技术网络安全与教育 云计算和服务器集群的区别 信息网络安全监察专升本 网站短信服务器发送截获 天津网络安全宣传 佛山市启星网络技术有限公司 深圳巨人网络技术有限公司 服务器管理iis使用教程 明日之后夏尔镇服务器是哪个线的 绍兴软件开发工程师工资 沈阳盘古网络技术 数据库服务器IP地址在哪看 北京安特帕斯计算机网络技术 德邦快递软件开发人员加班多么 每日更新 代理服务器 民富通达软件开发 北京丰台青少年网络安全教育 查看hive配置的元数据库信息 带理服务器 阿里服务器磁盘扩容 小学生关于网络安全 网络技术行业支付劳务费
0