Harbor 完全定制手册 – 制作一个更好用的registry
纯干货分享
http://jiangjiang.space 回忆书签,转载请注明出处,谢谢
1.1 Harbor
1.1.1 功能全面的registry:Harbor
vmware harbor 是VMware公司开源的一套docker registry方案。内置集成了很多企业应用的特性:
- RBAC 基于角色的权限控制
- 基于策略的镜像复制
- 漏扫
- LDAP/AD支持
- 镜像删除和垃圾清理
- Notary 镜像签名
- 用户界面
- 审计
- RESTful api
- 安装简单(基于compose)
1.1.2 Harbor 和 Clair , Notray
Clair
clair 是 coreos 开源的容器漏洞扫描工具,在容器逐渐普及的今天,容器镜像安全问题日益严重。clair 是目前少数的开源安全扫描工具,主要提供OS(centos,debian,ubuntu等)的软件包脆弱性扫描。
clair的可以单机部署也可以部署到k8s上,可以与现有的registry集成。架构如下:
harbor 很好的整合了 clair ,通过简单的UI就可以对上传的镜像扫描,还可以通过每天的定时扫描对所有镜像进行统一扫描。
关于 Clair 请浏览: https://github.com/coreos/clair
Notray
Notary
是一套docker镜像的签名工具, 用来保证镜像在pull,push和传输工程中的一致性和完整性。
避免中间人攻击,避免非法的镜像更新和运行。
ps: Notray 可能是 no Troy 的变体,我自己YY的
其工作流程如下:
Notray工作流程
Harbor也集成了Notray, 但是目前集成的并不全面, 在删除已经签名的镜像时仍然需要手工执行notray命令行,期待更进一步的简化流程。
关于Notray请浏览 https://github.com/docker/notary
1.2 Harbor安装
以下步骤是harbor离线安装,HTTPS协议
1.2.1 下载包
从如下地址
https://github.com/vmware/harbor/releases
下载离线包
harbor-offline-installer-v1.2.2.tgz
解包
tar -xvf harbor-offline-installer-v1.2.2.tgz
安装docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo cp /usr/local/bin/docker-compose /bin && chmod u+x docker-compose
1.2.2 编辑harbor.cfg
参数:
hostname = 域名 # 设置正式启用时的域名
ui_url_protocol = https # http 或 https,如果启用https则hostname必须是域名
ssl_cert = /svr/xxx.pem # 证书的位置
ssl_cert_key = /svr/xxx.key # 证书位置
secretkey_path - # 按需要设置路径
auth_mode # db_auth 是自己维护一个数据库认证,可以开启用户自注册功能
# ldap_auth 设置是启用openldap或者ad域
self_registration = on # 是否运行用户自己注册, 如果用ldap就设置为no
project_creation_restriction = adminonly # adminonly只允许admin创建项目
# everyone 为任何人都能创建
verify_remote_cert = off # 启用同步的时候,是否检查远端的https证书, 如果是自己签发的证书这里就选择off
其他的配置包括ldap具体参数等需要根据本地具体的设置来配置, 这里给个例子不一定适用。
ldap_url = ldaps://adldapsever
#ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
ldap_searchdn = CN=员工,DC=emp,DC=xxxcop,DC=com
#the password of the ldap_searchdn
ldap_search_pwd = paasss
#The base DN from which to look up a user in LDAP/AD
#ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_basedn =
# The attribute used in a search to match a user, it could be uid, cn, email, sAMAccountName or other attributes depending on your LDAP/AD
ldap_uid = sAMAccountName
#the scope to search for users, 1-LDAP_SCOPE_BASE, 2-LDAP_SCOPE_ONELEVEL, 3-LDAP_SCOPE_SUBTREE
ldap_scope = 3
#Timeout (in seconds) when connecting to an LDAP Server. The default value (and most reasonable) is 5 seconds.
ldap_timeout = 5
1.2.3 编辑compose文件 (可选)
以下步骤全部可选,请酌情选择。
1.2.3.1 修改数据目录
compose文件默认将数据安装到/data,如果需要手动修改如下:
sed -i 's/- \/data/- \/somedir\/harbor-data/g' docker-compose.yml
sed -i 's/- \/data/- \/somedir\/harbor-data/g' docker-compose.clair.yml
sed -i 's/- \/data/- \/somedir\/harbor-data/g' docker-compose.notary.yml
1.2.3.2 设置网络ip段(可选,按照实际情况)
如需要限定网段,或者你的组织有明确的docker网络规范,请修改如下部分
# docker-compose.yml
networks:
harbor:
external: false
ipam:
config:
- subnet: xxx.xxx.xxx.xxx/27
# docker-compsoe.clair.yml
networks:
harbor-clair:
external: false
ipam:
config:
- subnet: xxx.xxx.xxx.xxx/27
docker-compose.notary.yml:
networks:
harbor-notary:
external: false
ipam:
config:
- subnet: xxx.xxx.xxx.xxx/27
notary-mdb:
external: false
ipam:
config:
- subnet: xxx.xxx.xxx.xxx/27
notary-sig:
external: false
ipam:
config:
- subnet: xxx.xxx.xxx.xxx/27
1.2.3.3 修改harbor文本显示(本地定制化)
修改 docker-compose.yml
找到ui部分
ui:
image: vmware/harbor-ui:v1.2.2
container_name: harbor-ui
env_file:
- ./common/config/ui/env
restart: always
volumes:
- /harbor-data/custom/ui-lang:/harbor/static/i18n/lang
ui-lang 文件制作:
mkdir -p /harbor-data/custom/ui-lang && cd /harbor-data/custom/ui-lang
wget https://github.com/vmware/harbor/blob/master/src/ui_ng/src/i18n/lang/zh-cn-lang.json
编辑这个文件,按照你需要的文本修改。
1.2.3.4 修改标题颜色(区分不同环境)
修改 docker-compose.yml
找到ui部分
ui:
image: vmware/harbor-ui:v1.2.2
container_name: harbor-ui
env_file:
- ./common/config/ui/env
restart: always
volumes:
- /harbor-data/xdf/ui/clarity-ui.min.css:/harbor/static/clarity-ui.min.css:z
将原来容器中的/harbor/static/clarity-ui.min.css文件下载出来,修改如下样式:
找到CSS类: header.header-5
header.header-5,.header.header-5{background-color:#CE0606}
本人美感不足,因此选色诡异,请自行找UI设计配色。
1.2.3.5 修改默认网络端口
按需修改端口,格式是 HOST:CONTAINER , 前面是主机的端口,后面是容器的端口。
只需要改HOST端口即可
docker-compose.yml
proxy:
# 其他略
ports:
- 80:80
- 443:443
- 4443:4443
1.2.4 编辑配置模板 (可选)
1.2.4.1 设置registry为ceph存储
解压harbor包后找到common目录下的templates,这里是全部的配置文件模板,直接修改配置文件是无效的,只要一允许prepare就会覆盖。
cd common/templates/registry
vi config.yml
## 找到下面行,注释filesystem 加入 swift
storage:
cache:
layerinfo: inmemory
#filesystem:
# rootdirectory: /storage
swift:
username: xxx
password: xxx
authurl: http://xxxxxx/auth/v1.0
tenant: xxxxx
container: docker-image-registry-test-1
具体参数请参见我的另一篇文档:
harbor/registry设置Ceph对象存储
1.2.5 执行安装脚本
$ sudo ./install.sh –with-notary –with-clair
http://jiangjiang.space 回忆书签,转载请注明出处,谢谢
1.2.6 设置HTTPS
1.2.6.1 正式签发的证书
直接放到harbor.cfg 对应的位置
ssl_cert = /svr/xxx.pem # 证书的位置
ssl_cert_key = /svr/xxx.key # 证书位置
1.2.6.2 自签发的证书
自签发证书
## 生成证书
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
-x509 -days 365 -out /svr/ca.crt
## 修改 harbor.cfg
ssl_cert = /svr/ca.crt # 刚刚创建的证书
ssl_cert_key = /svr/ca.key # 刚刚创建的key
注意在CN 那里要填写一个标准域名比如 reg.aaa.com , 如果是自己测试,可以自己搭dnsmasq 或者直接在访问的机器hosts文件上劫持即可。
如果是正式环境,要写实际发布时候的域名,不能乱写,也不可以写ip。
详细步骤可以参考:
https://github.com/vmware/harbor/blob/master/docs/configure_https.md
1.2.7 重新配置
注意以下操作会删除掉之前所有的容器。
如果不想干掉容器可以手动修改配置,比如registry的存储路径等其实可以不执行down这步,直接到容器里面修改配置文件即可。
export HARBOR_HOME=/home/harbor
cd $HARBOR_HOME
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml down -v ## 这里会干掉所有已有容器,包括已经下载了漏洞库的clair
vim harbor.cfg
sudo ./prepare --with-notary --with-clair
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml up -d
1.2.7 启动停止
在之前的版本如果不按照compose文件顺序起停harbor会出问题,现在貌似没有这样的问题了,不过最好还是按照compose顺序启停,做两个脚本如下:
harbor-stop.sh
export HARBOR_HOME=/home/harbor
cd $HARBOR_HOME
/bin/docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml stop
harbor-start.sh
export HARBOR_HOME=/home/harbor
cd $HARBOR_HOME
/bin/docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml stop
1.2.8 附录
1.2.8.1 clair 不同步漏洞特征问题
请检查容器的dns设置,如果需要可以将主机的/etc/resolve 文件挂到容器内
另外默认clair配置为12小时同步一次,因此出现同步失败后并不会马上启动下一次同步。
http://jiangjiang.space 回忆书签,转载请注明出处,谢谢