Harbor简单使用手册
本章将会介绍一下Harbor的基本使用, 主要包括以下方面的内容:
1. 基于角色的访问控制
2. 用户账户(User Account)
3. Harbor工程管理
4. 管理工程中的用户成员
5. 复制镜像
5.1 创建复制规则
5.2 列出和停止replication jobs
5.3 手动启动replication进程
5.4 删除replication rule
5.5 查询工程及repositories
6. Administrator Options
○ 6.1 用户管理
○ 6.2 仓库管理(Managing endpoint)
○ 6.3 复制管理(Managing replication)
○ 6.4 认证管理(Managing authentication)
○ 6.5 工程创建管理(Managing project creation)
○ 6.6 用户自注册管理(Managing self-registration)
○ 6.7 邮箱设置管理
7. 为Harbor添加内容扫描
○ 7.1 重新生成配置,开启内容扫描
○ 7.2 Web端内容扫描使用与设置
8. 配置Harbor内容签名(该小节内容,没做出来,过程摘抄原文)
○ 8.1 配置签名
○ 8.2 删除签名镜像
1. 基于角色的访问控制
Harbor提供了基于角色的访问控制(Role Based Access Control, RBAC):
Harbor通过工程(projects)的方式来管理镜像(images)。在添加用户到工程中时,可以是如下三种角色中的一种:
-
Guest
: 指定工程(project)中的Guest用户只有只读访问权限 -
Developer
: 工程中的Developer用户具有读写访问权限 -
ProjectAdmin
: 当创建一个新的工程时,你就会被默认指定为该工程的ProjectAdmin
角色。除了具有读写权限之外,ProjectAdmin
还有一些管理特权,例如向该工程添加/移除成员、启动一个vulnerability扫描
另外除了这上面这三种角色,还有两个系统层面的角色:
-
SysAdmin
: SysAdmin角色的用户具有最高管理权限。除了上面提到的一些权限之外,SysAdmin
用户可以列出所有的工程(projects); 将一个普通用户设置为管理员; 删除用户; 针对所有镜像设置vulnerability扫描策略。公有工程library
也是由系统管理员所拥有。 -
Anonymous
: 当一个用户并没有登录的时候,该用户会被认为是一个匿名用户。一个匿名用户并没有访问私有工程(private project)的权限, 而对于公有工程(public project)拥有只读访问权限。
视频示例: Tencent Video
2. 用户账户(User Account)
Harbor支持两种身份验证方式:
-
Database(db_auth): 这种情况下,所有用户被存放在一个本地数据库
在这种模式下,一个用户可以在Harbor系统中进行注册。如果要禁止自行注册
功能,在初始化配置时请参看installation guide; 或者是在Administraor Options
中禁止该特性。当self-registration被禁止后,系统管理员可以添加用户到Harbor中。
当注册或添加一个新的用户到Harbor中时,Harbor系统中的用户名、email必须是唯一的。密码至少要有8个字符长度,并且至少要包含一个大写字母(uppercase letter)、一个小写字母(lowercase letter)以及一个数字(numeric character)
当你忘记密码的时候,你可以按如下的步骤来重设密码:
1) 在注册页面点击"Forgot Password" 链接 2) 输入你注册时所用的邮箱地址, 然后Harbor系统会发送一封邮件给你来进行密码重设 3) 在收到邮件之后,单击邮件中给出的链接地址,然后会跳转到一个密码重设的Web页面 4) 输入新的密码并单击"Save"按钮
-
LDAP/Active Directory(ldap_auth): 在这种认证模式下,用户的credentials都被存放在外部的LDAP或AD服务器中,用户在那边完成认证后可以直接登录到Harbor系统。
当一个LDAP/AD用户通过username
和password
的方式登录进系统时,Harbor会用LDAP Search DN
及LDAP Search Password
绑定LDAP/AD服务器(请参看installation guide)。假如成功的话,Harbor会在LDAP的LDAP Base DN
目录及其子目录来查询该用户。通过LDAP UID
指定的一些属性(比如: uid、cn)会与username
一起共同来匹配一个用户。假如被成功匹配,用户的密码会通过一个发送到LDAP/AD服务器的bind request所验证。假如LDAP/AD服务器使用自签名证书(self-signed certificate)或者不受信任的证书的话,请不要检查LDAP Verify Cert
。
在LDAP/AD认证模式下,不支持self-registration
、删除用户、修改密码、重设密码等功能,这是因为用户是由LDAP/AD系统所管理.
3. Harbor工程管理
Harbor中的一个工程包含了一个应用程序所需要的所有repositories。在工程创建之前,并不允许推送镜像到Harbor中。Harbor对于project采用基于角色的访问控制。在Harbor中projects有两种类型:
-
Public
: 所有的用户都具有读取public project的权限, 其主要是为了方便你分享一些repositories -
Private
: 一个私有project只能被特定用户以适当的权限进行访问
在登录之后,你就可以创建一个工程(project)。默认情况下,创建的工程都是私有的,你可以通过在创建时选中Access Level
复选框来使创建的工程变为public的:
在工程被创建完成之后,你可以通过导航标签浏览repositories
,members
, logs
,replication
以及configuration
:
你可以通过单击Logs
选项卡来查看所有的日志。你也可以使用username
, operations
以及Advanced Search
中的日期来过滤日志信息:
可以通过单击Configuration
选项卡设置工程相关属性:
-
选中
Public
复选框,你就可以将该工程下的所有repositories设置为公有访问权限 -
通过使能
Enable content trust
复选框来阻止从工程拉取未被登记的镜像 -
通过选择
Prevent vulnerable images from running
复选框和改变vulnerabilities的安全级别,以阻止vulnerable镜像被拉取。假如一个镜像的安全级别高于大于等于当前所设置的级别的话,Image将不能够被拉取。 -
为了激活对push到工程中的新镜像进行vulnerability扫描,可以选中
Automatically scan images
复选框
4. 管理工程中的用户成员
1) 添加成员
你可以向一个已存在的工程添加项目成员,并为其指定相应的角色。在LDAP/AD认证模式下,你也可以添加一个LDAP/AD用户使其成为工程中的一员:
2) 更新及移除成员
可以批量选中工程中的成员,然后修改他们的角色; 也可以删除某些成员:
5. 复制镜像
镜像复制被用于从一个Harbor实例向另一个Harbor实例复制repositories。
该功能是面向工程的(project-oriented), 而一旦系统管理员为该工程设置了相应的规则,当触发条件被触发的话该工程下所有匹配相应规则的repositories都会被复制到远程仓库中。 每一个repository都会启动一个job
来进行复制。假如该工程在远程镜像仓库中并不存在,则会自动的创建出一个新的工程。但是假如该工程已经存在并且被用户配置为没有写权限的话,则这个同步过程会失败。这里注意:项目成员信息将不会被复制
根据不同的网络状况,这个复制过程可能会有一定的延迟。假若是因为网络的原因导致镜像同步失败,则在几分钟之后Harbor会尝试再进行同步(该同步过程会一直进行,直到网络恢复,同步成功)
注意: Harbor 0.35版本之前和之后的不同实例不能进行相互同步。
5.1 创建复制规则
可以通过创建规则来配置复制策略。点击Administration->Replications
页面的NEW REPLICATION RULE
按钮,然后填写一些必须的字段。你可以根据不同的需要选择不同的Image filters和trigger mode。假如当前并没有可用的远程registry,则你需要创建一个远程registry。然后单击SAVE
按钮为指定的工程创建复制规则。假如勾选了Replicate existing images immediately
复选框,则该工程下已存在的镜像将会马上复制到远程镜像仓库。
Image filter
对镜像我们支持两种不同的image filter:
-
Repository
: 复制时会根据镜像名称的repository部分来进行 -
Tag
: 复制时会根据镜像名称的标签(tag)部分来进行
在过滤器中支持两种不同的过滤匹配模式:
-
*
: 匹配除/
之外的任何字符 -
?
: 匹配除/
之外的任何单个字符
Trigger mode
-
Manual
: 当需要的时候,通过手工方式来触发repositories的复制。 Note: 对镜像的删除操作并不会被复制 -
Immediate
: 当有一个新的repository被push到工程中时,其就会被马上复制到远程registry。假如还勾选了Delete remote images when locally deleted
复选框,则在本地镜像被删除时也会马上复制到远程registry。 -
Scheduled
: 每天或者每周复制repositories。Note: 对镜像的删除操作并不会被复制。
5.2 列出和停止replication jobs
选中一个rule
,则属于该规则的所有jobs都会被列出。一个job代表复制repository到远程registry的一个工作进程。可以单击STOP JOBS
,则这个rule规则下的所有处于pending and retrying job
将会被马上停止, 而处于running
工作状态的job会在下一个checkpoint被取消。
5.3 手动启动replication进程
选中一个复制规则,然后点击REPLICATE
按钮, 则该工程下匹配相应规则的镜像将会被马上复制到远程registry。假设当前已经有匹配该规则的处于pending/running状态的job,则新的复制将不会被启动。
5.4 删除replication rule
选中一个replication rule,然后单击DELETE
按钮来将其删除。只有那些没有工作任务的rule会被删除(如果一个rule下有处于pending/running/retrying状态的job,则该rule不能被删除)
系统管理员也可以在Projects
视图下,选中Replication
标签来为来为指定的project设置复制规则。而工程管理员(Project Manager,请参看上面的RBAC)只有只读访问权限:
5.5 查询工程及repositories
在页面顶部输入搜索关键字,然后点击搜索就可以查询出所有匹配的projects
以及repositories
。这些搜索结果包含你有权限访问的public及private repositories。
6. Administrator Options
6.1 用户管理
Administrator
可以将一个或多个普通的用户设置为administrator
角色。也可以进行用户的删除(注意: 只有在数据库认证模式下,才支持删除用户):
6.2 仓库管理(Managing endpoint)
在Administration->Registries
项下,你可以列出、添加、修改或者删除远程的endpoint。只有那些没有被任何rules所引用的endpoint才能被删除:
6.3 复制管理(Managing replication)
在Administration->Replications
项下,你可以添加、删除、或修改replication rules:
6.4 认证管理(Managing authentication)
在没有添加任何用户之前,你可以修改认证模式(Database模式或者LDAP模式), 当Harbor系统中已经有至少一个用户之后(出admin用户外),将不能够修改认证模式:
当使用LDAP模式的时候,用户的自注册功能会被禁止。LDAP服务器的相关参数必须要被填写。更多信息,请参看User account.
6.5 工程创建管理(Managing project creation)
可以使用Project Creation
下拉菜单来设置哪些用户可以创建工程。选择Everyone
的话,则允许所有的用户来创建工程。如果选择Admin Only
,则只允许拥有Administrator
角色的用户创建工程:
6.6 用户自注册管理(Managing self-registration)
你可以管理是否允许用户自己注册一个新的账户。该选项在使用LDAP认证的方式下将不可用。
6.7 邮箱设置管理
你可以改变Harbor的邮箱设置,该邮箱服务器被用于发送响应给重置密码的用户。
[参看]
7. 为Harbor添加内容扫描
7.1 重新生成配置,开启内容扫描
暂停之前的容器,并清理配置文件:
docker-compose stop ./prepare
加上内容信任,扫描器和helm仓库重新安装:
./install.sh --with-notary --with-clair --with-chartmuseum
(请使用./install.sh --help 查看相关附加参数,我使用的最新版本,clair已经被弃用了!!!)
根据./install.sh --help 查看相关附加参数,新命令应该是:
# ./install.sh --with-notary --with-trivy --with-chartmuseum
运行后,会删除旧的容器,生成新的容器。如下图所示:
7.2 Web端内容扫描使用与设置
刷新网页端可以看到多了一些配置:
可以看到以前上传的镜像都是没有经过扫描的,可以对已经上传的镜像进行扫描:
勾选docker,点击扫描就可以开始扫描了,扫描之后截图如下:
如果docker存在漏洞会有提示,如图:
也可以配置镜像上传的时候自动扫描:
8. 配置Harbor内容签名(该小节内容,没做出来,过程摘抄原文)
8.1 配置签名
签名属于内容信任,没有签名的内容可以选择不部署,从上面图中可以看到刚上传的内容是没有签名的。
内容信任的服务端口是4443,接下来就进行harbor内容信任的配置:
勾选相关选项:
在客户端将证书放在指定位置并打开内容信任功能:
# mkdir -p tls/192.168.3.71:4443/
# cd tls/192.168.3.71\:4443/
# cp /etc/docker/certs.d/192.168.3.71/192.168.3.71.crt .
# export DOCKER_CONTENT_TRUST=1
# export DOCKER_CONTENT_TRUST_SERVER=https://192.168.3.71:4443
服务端查看端口状态:(4443端口是否监听)
测试上传
注意:签名与tag中的v1绑定,上传时必须指定tag中版本,要不然会跳过签名。
刷新页面可以发现,新上传的镜像既进行了内容扫描又进行了内容签名:
-
之后上传时每次都需要输入根密钥和仓库密钥,当tag不同时仅需要输入仓库密钥。
打开项目内容信任功能,则不允许没有签名的镜像上传下载。
8.2 删除签名镜像
-
已签名的镜像是不能删除的,直接删除会报错:
如果需要删除则需要先删除签名:
##查看签名
docker trust inspect
##删除签名
docker trust revoke
删除签名后,可以正常删除镜像:
参考文献:
Harbor简单使用:https://blog.csdn.net/weixin_42006882/article/details/107070609
Harbor使用手册:https://ivanzz1001.github.io/records/post/docker/2018/04/11/docker-harbor-uage