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 image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token 进行解密验证。

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

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

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

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

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

* 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. 环境

[[email protected] ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[[email protected] ~]# uname -r
3.10.0-327.36.3.el7.x86_64


5. 服务器 IP 地址

192.168.60.150

6. 创建证书

* 创建证书存放目录

[[email protected] ~]# mkdir -p /data/cert

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

[[email protected] ~]# cd /data/cert/

* 创建 CA 根证书

[[email protected] 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

[[email protected] 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"

* 生成主机的证书

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


7. harbor安装部署

* 安装 docker

[[email protected] ~]# yum install docker -y

* 设置 docker 服务开机启动

[[email protected] ~]# systemctl enable docker.service

* 启动 docker 服务

[[email protected] ~]# systemctl start docker.service

* 安装 docker-compose

[[email protected] ~]# yum install python-pip -y
[[email protected] ~]# pip install --upgrade pip
[[email protected] ~]# pip install docker-compose
[[email protected] ~]# pip install --upgrade backports.ssl_match_hostname

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

[[email protected] ~]# 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 ]

[[email protected] ~]# tar zxf harbor-offline-installer-v1.1.2.tgz

* 切换进harbor包目录

[[email protected] ~]# cd harbor

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

hostname = harbor.lisea.cn          # 指定私有仓库的主机名,可以是IP地址,也可以是域名   
ui_url_protocol = https             # 用户访问私仓时使用的协议,默认时http,配置成https
db_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  # 设置证书密钥文件路径

* 通过自带脚本一键安装

[[email protected] harbor]# ./install.sh

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

https://harbor.lisea.cn

用户默认为admin

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


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

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

* 退出 admin 账户登陆 test 用户

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

* 创建仓库证书存放目录

[[email protected] client]# mkdir /etc/docker/certs.d/harbor.lisea.cn

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

[[email protected] client]# scp [email protected]:/data/cert/ca.crt /etc/docker/certs.d/harbor.lisea.cn/ca.crt

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

[[email protected] client]# docker login -u test -p Test123456 harbor.lisea.cn
Login Succeeded

* 编写dockerfile文件

# Url https://lisea.cn
# Base imgae
# Base imgae
FROM centos

# Maintainer
MAINTAINER lisea [email protected]

# Commands
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install nginx -y
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN echo "this is test nginx image" > /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx"]

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

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

* 上传镜像至 harbor registry

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

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

* 删除本地镜像

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

* 从harbor中下载镜像

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


9. 总结

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

时间: 2024-08-26 21:38:02

Docker--------Harbor registry安全认证搭建 [ Https ]的相关文章

Docker 私有仓库 Harbor registry 安全认证搭建 [Https]

Harbor源码地址:https://github.com/vmware/harborHarbort特性:基于角色控制用户和仓库都是基于项目进行组织的, 而用户基于项目可以拥有不同的权限.基于镜像的复制策略镜像可以在多个 Harbor 实例之间进行复制.支持 LDAPHarbor 的用户授权可以使用已经存在 LDAP 用户.镜像删除 & 垃圾回收Image 可以被删除并且回收 Image 占用的空间.用户 UI用户可以轻松的浏览.搜索镜像仓库以及对项目进行管理.镜像删除 & 垃圾回收绝大部

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

1. 背景     docker中要使用镜像,一般会从本地.docker Hup公共仓库和其它第三方公共仓库中下载镜像,一般出于安全和外网(墙)资源下载速率的原因考虑企业级上不会轻易使用.那么有没有一种办法可以存储自己的镜像又有安全认证的仓库呢? ----> 企业级环境中搭建自己的安全认证私有仓库. 由于Docker1.3.X版本之后docker registry所采用https,前章节docker http部属最后docker push/pull会报错提示,需要做特殊处理. 2. 私有仓库有优

Docker 私服Registry简介与使用Docker-Compose安装Registry

场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100902301 Docker Compose基本使用-使用Compose启动Tomcat为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100904080 Docker Compose部署项目到容器-基于Tomc

Docker私有仓库Registry认证搭建

前言: 首先,Docker Hub是一个很好的用于管理公共镜像的地方,我们可以在上面找到想要的镜像(Docker Hub的下载量已经达到数亿次):而且我们也可以把自己的镜像推送上去.但是,有的时候我们的使用场景需要拥有一个私有的镜像仓库用于管理自己的镜像,这个时候我们就通过Registry来实现此目的.本文详细介绍了本地镜像仓库Docker Registry及Auth Server认证搭建. 集群环境: 系统 主机名 IP地址(Host-Only) 描述 Centos7.2.1511 contr

Docker Registry v2 + Token Auth Server (Registry v2 认证)实例。

关于Registry 对于registry v1 --> v2中,其中的原理.优化等,这里不再做一一介绍.这里有篇文章我瞄过几眼应该是比较不错的介绍文章了:http://dockone.io/article/747 . Registry v2 token机制 官方document:https://docs.docker.com/registry/spec/auth/token/ 目前docker registry v2 认证分为以下6个步骤: 1. docker client 尝试到regist

docker使用registry搭建本地私有仓库

参考链接来自:http://blog.csdn.net/wangtaoking1/article/details/44180901/ 和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库. 使用私有仓库有许多优点: 节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可: 提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用. 接下来我们就大致说一下如何在本地搭建

自建带有认证功能的Docker Harbor

What is Harbor? Harbor is an open source cloud native registry that stores, signs, and scans container images for vulnerabilities. Harbor solves common challenges by delivering trust, compliance, performance, and interoperability. It fills a gap for

docker基础 私有仓库repository搭建(1) registry

使用docker的login命令之后,可以使用push命令将镜像推送到dockerhub上,但是dockerhub毕竟在公网上,免费的帐户只有一个private 的repository是免费的,剩下的就都只能做成public的.由于种种限制,企业私有仓库的创建就有了各种应用场景.本文将从使用registry的方式简单介绍如何搭建私有的repository. pull registry镜像 使用到的registry镜像 [[email protected] ~]# docker search re

docker 之 registry私有仓库(harbor)

1.deploy a registry server 文档:https://docs.docker.com/registry/deploying/ 镜像dockerhub:https://store.docker.com 安装: docker run -d -p 8300:5000 --restart=always --nameemo registry registry:2 访问地址:主机/v2/_catolog 2.harbor 选型:https://www.cnblogs.com/jaazz