背景
之前自己搞了个玩具registry,没有权限控制,没有角色,没有统计。正好vmware开源了harbor,号称是企业级仓库,我自然是不会放过,要研究一下。
部署
官方方法
Install Harbor with the following commands. Note that the docker-compose process can take a while.
1
2
3
4
5
6
7
8
9 cd Deploy
$ ./prepare
Generated configuration file: ./config/ui/env
Generated configuration file: ./config/ui/app.conf
Generated configuration file: ./config/registry/config.yml
Generated configuration file: ./config/db/env
docker-compose up -d
特殊国情下的模式
不建议用,最好还是番茄自己build
因为Daoloud和CaiCloud的版本都太老,很多新特性都没有。
离线模式
由于公司坑爹的模式,很多镜像下载不了,只好在家pull下来,然后save成tar,再到公司load
具体看这链接
架构图
我画的架构图
代码结构
通过tree -d ./
生成,略去部分不重要代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41├── api
│ └── jobs
├── auth
│ ├── db
│ └── ldap
├── contrib
├── controllers
├── dao
├── Deploy
│ ├── config
│ │ ├── db
│ │ ├── jobservice
│ │ ├── nginx
│ │ │ └── cert
│ │ ├── registry
│ │ └── ui
│ ├── db
│ ├── kubernetes
│ │ └── dockerfiles
│ ├── log
│ └── templates
│ ├── db
│ ├── jobservice
│ ├── registry
│ └── ui
├── job
│ ├── config
│ ├── replication
│ └── utils
├── jobservice
├── models
├── service
│ ├── cache
│ ├── token
│ └── utils
├── static前端
├── tests
├── ui
├── utils共用组件
├── vendor三方库
└── views
对应架构图来看
- proxy就是nginx,
Deploy/config/nginx/nginx.conf
- UI就是
ui/main.go
- token就是
service/token/token.go
- registry的webhook就是
Deploy/templates/registry/config.yml
的notifications和auth- auth指向
beego.Router("/service/token", &token.Handler{})
,service/token/token.go
- notification指向
beego.Router("/service/notifications", &service.NotificationHandler{})
,用来同步备份到远端仓库。service/notification.go
- auth指向
auth/authenticator.go
接口,有本地db和LDAP两种实现,在init时会registrer,根据配置选择用哪个实现。
备份策略
这个特性很不错啊,registry有了新的更新,就notify到ui的notification,根据配置的策略,是否要备份到远端registry
LDAP
用的是open LDAP
代码在auth/ldap/ldap.go
LDAP_BASE_DN 这个还不会配置
RBAC
Role Based Access Controlservice/token/authutils.go的FilterAccess
,通过token里的scope获取action,再到数据库里查询是否有权限
本博客欢迎转发,但请保留原作者信息
github:codejuan
博客地址:http://blog.decbug.com/