前言:
而今兄弟们对“nginx g daemon off”大致比较重视,小伙伴们都想要分析一些“nginx g daemon off”的相关文章。那么小编也在网上收集了一些对于“nginx g daemon off””的相关知识,希望我们能喜欢,小伙伴们一起来学习一下吧!技能目标:
· 掌握Harbor工作原理
· 掌握Harbor安装部署
· 掌握Harbor日常操作管理
4.1 案例分析
4.1.1 案例概述
Docker官方镜像仓库是一个用于管理公共镜像的地方,大家可以在上面找到想要的镜像,也可以把自己的镜像推送上去。但是,有时候服务器无法访问互联网,或者不希望将自己的镜像放到互联网上,那么就需要用到Docker Registry私有仓库,它可以用来存储和管理自己的镜像。最近BDQN公司将项目全部打包成镜像有部署私有仓库服务的需求,经过几轮商讨,最终选择Docker Harbor,Docker Harbor有可视化的Web管理界面可以方便管理Docker镜像操作也很方便简单,又提供了多个项目的镜像权限管理控制功能等。
4.1.2 案例前置知识点
1. 什么是Harbor
Harbor是VMware公司开源的企业级Docker Registry项目,其目标是帮助用户迅速搭建一个企业级的Docker Registry服务。它以Docker公司开源的Registry为基础,提供了管理UI。基于角色的访问控制(Role Based AccessControl)、AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全,以提升用户使用 Registry 构建和运行环境传输镜像的效率。
2. Harbor的优势
1) 基于角色控制:用户和仓库都是基于项目进行组织的,而用户基于项目可以拥有不同的权限。
2) 基于镜像的复制策略: 镜像可以在多个Harbor实例之间进行复制(同步)。适用于负载平衡、高可用性、多数据中心、混合和多云场景。
3) 支持LDAP / AD:Harbor与现有的企业LDAP / ADA集成,用于用户认证和管理。
4) 图像删除和垃圾收集:镜像可以被删除,也可以回收镜像占用的空间。
5) 图形UI:用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。
6) 审计: 对存储库的所有操作都进行记录。
7) RESTful API:用于大多数管理操作的RESTful API,易于与外部系统集成。
3. Harbor在架构上主要由五个组件构成
1)Proxy:Harbor的Registry、UI、token等服务。通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。
2)Registry:负责储存Docker镜像,并处理Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次Docker pull/push请求都要携带一个合法的token,Registry会通过公钥对token 进行解密验证。
3)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进行请求。
4)Database(Harbor-db):为coreservices提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
5)Log collector(Harbor-log):为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析,如图4.1所示。
图4.1
Harbor的每个组件都是以Docker容器的形式构建的,因此,使用Docker Compose来对它进行部署。在源代码中(), 用于部署Harbor的Docker Compose模板位于Harbor/make/docker-compose.tpl。
4.1.3 案例环境
1. 本案例实验环境
本案例环境如表4-1所示。
表4-1创建Docker Compose 环境
2. 案例需求
1)通过Harbor创建Docker私有仓库。
2)图形化管理Docker私有仓库镜像。
3. 案例实现思路
1)部署Docker Compose。
2)部署Harbor服务。
3)通过Harbor来管理上传的私有镜像。
4)维护Harbor。
4.2 案例实施
4.2.1 部署Harbor所依赖的Docker Compose服务
1. 下载最新Docker-Compose
[root@Harbor ~]# curl -L -`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@Harbor ~]# chmod +x /usr/local/bin/docker-compose
2. 查看Docker-Compose版本判断安装是否成功
[root@Harbor ~]# docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3
4.2.2 部署Harbor服务
Harbor被部署为多个Docker容器,因此可以部署在任何支持Docker的Linux发行版上。目标主机需要安装Python、Docker和Docker Compose。
1. 下载Harbor安装程序
[root@Harbor ~]# wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
[root@Harbor ~]# tar xvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
2. 配置Harbor参数文件
配置参数位于文件/usr/local/harbor/harbor.cfg中。安装之前需要修改IP地址。
vim /usr/local/harbor/harbor.cfg
hostname = 192.168.168.91
关于Harbor.cfg配置文件中有两类参数,所需参数和可选参数。
1)所需参数:这些参数需要在配置文件Harbor.cfg中设置。如果用户更新它们并运行install.sh脚本重新安装Harbour,参数将生效。具体参数如下:
· hostname:用于访问用户界面和register服务。它应该是目标机器的IP地址或完全限定的域名(FQDN),例如192.168.168.91或hub.kgc.cn。不要使用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密码的密钥路径。
2)可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动Harbour后在Web UI上进行更新。如果进入Harbor.cfg,只会在第一次启动Harbor时生效,随后对这些参数的更新,Harbor.cfg将被忽略。
注意:如果选择通过UI设置这些参数,请确保在启动Harbour后立即执行此操作。具体来说,必须在注册或在Harbor中创建任何新用户之前设置所需的auth_mode。当系统中有用户时(除了默认的admin用户), auth_mode不能被修改。具体参数如下:
· 电子邮件设置:Harbor需要这些参数才能向用户发送"密码重置"电子邮件,并且只有在需要该功能时才需要。请注意,在默认情况下SSL连接时没有启用。如果SMTP服务器需要SSL,但不支持STARTTLS,那么应该通过设置启用SSL email_ssl = TRUE。
· harbour_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验证,这在远程实例具有自签名或不可信证书时经常使用。
另外,默认情况下,Harbour将镜像存储在本地文件系统上。在生产环境中,可以考虑使用其他存储后端而不是本地文件系统,如S3、Openstack Swif、Ceph等。需要更新common/templates/registry/config.yml文件。
3. 启动并安装Harbor
配置完成就可以启动Harbor了,如下操作:
[root@Harbor harbor]# sh /usr/local/harbor/install.sh
4. 查看Harbor启动镜像
查看Harbor启动镜像,如下所示。
[root@Harbor harbor]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------
Harbor-adminserver /Harbor/Harbor_adminserver Up
Harbor-db docker-entrypoint.sh mysqld Up 3306/tcp
Harbor-jobservice /Harbor/Harbor_jobservice Up
Harbor-log /bin/sh -c crond && rm -f ... Up 127.0.0.1:1514->514/tcp
Harbor-ui /Harbor/Harbor_ui Up
nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
registry /entrypoint.sh serve /etc/ ... Up 5000/tcp
如果一切都正常,应该可以打开浏览器访问的管理页面,默认的管理员用户名和密码是admin/harbor12345。如图4.2所示,说明部署成功。
图4.2
至此, Harbor已经搭建完成,具体在WEB UI下面操作也是非常的简单,只有几个选项。
5. 创建一个新项目
1)输入用户名和密码登录界面后可以创建一个新项目。点击"+项目"按钮,如图4.3所示。
图4.3
2)填写项目名称为"myproject-kgc",如图4.4所示。
图4.4
3)点击"确定"按钮,成功创建后如图4.5所示。
图4.5
4)可以使用Docker命令在本地通过127.0.0.1来登录和推送镜像了。默认情况下,Register服务器在端口80上侦听。
5)登录Harbor。
[root@Harbor ~]# docker login -u admin -p Harbor12345
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
6)下载体积小点的镜像进行测试。
[root@Harbor ~]# docker pull cirros
7)镜像打tag。
[root@Harbor ~]# docker tag cirros 127.0.0.1/myproject-kgc/cirros:v1
8)上传镜像到Harbor。
[root@Harbor ~]# docker push 127.0.0.1/myproject-kgc/cirros:v1
The push refers to repository [127.0.0.1/myproject-kgc/cirros]
30063a215fed: Pushed
97ff63f27246: Pushed
f70e23dbea2d: Pushed
v1: digest: sha256:3fd64cb391e075e9e7335392aaa89d18029aafe5ca24cc123545c7b8c9c1d59c size: 943
9)在Harbor界面myproject-kgc目录下就可以看见这个镜像,以及这个镜像的一些信息,如图4.6所示。
图4.6
6. 客户端上传镜像
以上操作都是在Harbor服务器本地操作,如果其他客户端上传镜像到Harbor,就会报如下错误。出现这问题的原因是Docker自从1.3.X之后Docker Registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以与私有镜像交互时出现以下错误
[root@client ~]# docker login -u admin -p harbor12345
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get : dial tcp 192.168.168.91:443: getsockopt: connection refused
1) 在Docker客户端配置操作如下:
解决办法是:在Docker server启动的时候,增加启动参数,默认使用HTTP访问
[root@client ~]#vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.168.91
2)重启Docker,再次登录
[root@client ~]# systemctl daemon-reload
[root@client ~]# systemcl restart docker
3)再次登录Harbor
[root@client ~]# docker login -u admin -p harbor12345
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
4)下载体积小一点的镜像进行测试
[root@client ~]# docker pull cirros
5)镜像打标签及上传到myproject-kgc项目里面
[root@client ~]# docker tag cirros 192.168.168.91/myproject-kgc/cirros:v2
[root@client ~]# docker push 192.168.168.91/myproject-kgc/cirros:v2
6)查看Harbor的web管理界面,myproject-kgc项目里面有两个镜像。如图4.7所示:
图4.7
4.2.3 Harbor日常操作管理
1. 通过Harbor Web 创建项目
点击"+项目",按规范填写项目名称。本章案例中项目级别设置为"私有",即不勾选(勾选后会变为"公开"),如上图4.3和图4.4所示。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与Docker hub一致。
2. 创建Harbor用户
1)创建用户并分配权限
系统管理->用户管理->+用户,填写用户名为"kgc-user01",邮箱为kgc-user01@kgc.cn,全名为"课超新人",密码为"A123a456",注释为"管理员",如图4.8所示。
图4.8
点击""确定"按钮后,可将上述创建的用户设置为管理员角色或进行删除操作。这里不作任何设置,如图4.9所示。
图4.9
2)添加项目成员
项目->myproject-kgc-test->成员->+成员,填写上述创建的用户并分配角色为"开发人员",如图4.10所示。
图4.10
可对成员角色进行变更或者删除操作,如图4.11所示。
图4.11
3)在客户端上用普通账户镜像操作
(1)删除上述打标签的本地镜像.
[root@client ~]# docker rmi 192.168.168.91/myproject-kgc/cirros:v2
Untagged: 192.168.168.91/myproject-kgc/cirros:v2
Untagged: 192.168.168.91/myproject-kgc/cirros@sha256:3fd64cb391e075e9e7335392aaa89d18029aafe5ca24cc123545c7b8c9c1d59c
(2)首先退出当前用户,然后使用上述创建的账户kgc-user01登录。
[root@client ~]# docker logout 192.168.168.91
Removing login credentials for 192.168.168.91
[root@client ~]# docker login 192.168.168.91
Username: kgc-user01
Password:
Login Succeeded
(3)下载192.168.168.91/myproject-kgc/cirros标签为v1的镜像。
[root@client ~]# docker pull 192.168.168.91/myproject-kgc/cirros:v1
v1: Pulling from myproject-kgc/cirros
Digest: sha256:3fd64cb391e075e9e7335392aaa89d18029aafe5ca24cc123545c7b8c9c1d59c
Status: Downloaded newr image for 192.168.168.91/myproject-kgc/cirros:v1
3. 查看日志
Web界面日志,操作日志按时间顺序记录用户相关操作,如图4.12所示。
图4.12
4.2.4 管理 Harbor
可以使用docker-compose来管理Harbor。一些有用的命令如下所示(必须在与docker-compose.yml相同的目录中运行)。
1. 停止/启动/重启Harbor
[root@Harbor]# cd /usr/local/harbor
[root@Harbor Harbor]# docker-compose stop | start | restart
2. 修改Harbor.cfg配置文件
要更改Harbour的配置文件时,请先停止现有的Harbour实例并更新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@Harbor ~]# rm -r /data/database
[root@Harbor ~]# rm -r /data/registry