之前有写过一篇文章: [harbor离线安装并配置HTTPS私钥认证的Docker仓库],里面有介绍过如何安装配置Harbor,如果不是因为本次故障的导致的问题都没想过升级它。因为功能满足了,就少变动了。
具体的安装方法参考上篇文章,这里仅记录一些略有不同的地方。
docker-ce:19.03.1
其实新版本中UI界面也好看多了,加入的功能也相比上一篇记录中的版本多了很多,但是对于一个企业内部的私有仓库,我觉得够用就好了。
记得要修改/etc/hosts文件加入对应的记录,不然无法解析到reg.docker.tb和sotemalltest.com两个域名。如果是使用内部DNS解析就更方便了。
安装完成后,修改配置。
[root@soft-mirros harbor]# egrep -v "^$|^*#" harbor.yml
hostname: reg.docker.tb
http:
port: 8080
https:
port: 443
certificate: /opt/path/to/ca/reg.docker.tb.crt
private_key: /opt/path/to/ca/reg.docker.tb.key
harbor_admin_password: Harbor12345
database:
password: root123
data_volume: /opt/data
clair:
updaters_interval: 12
jobservice:
max_job_workers: 10
chart:
absolute_url: disabled
log:
level: info
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 1.8.0
大部分都是默认的,这里加入了证书。可以看到一些参数的名字都变了。
启动服务
cd /opt/harbor
[root@soft-mirros harbor]# docker-compose up
查看运行后的容器列表
[root@soft-mirros harbor]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d460a919ca0e goharbor/nginx-photon:v1.8.2 "nginx -g 'daemon of…" 22 hours ago Up 22 hours (healthy) 0.0.0.0:443->443/tcp, 0.0.0.0:8080->80/tcp nginx
b4264a6f0758 goharbor/harbor-portal:v1.8.2 "nginx -g 'daemon of…" 22 hours ago Up 22 hours (healthy) 80/tcp harbor-portal
19626ebfadca goharbor/harbor-jobservice:v1.8.2 "/harbor/start.sh" 22 hours ago Up 22 hours harbor-jobservice
8bd6a3eae40d goharbor/harbor-core:v1.8.2 "/harbor/start.sh" 22 hours ago Up 22 hours (healthy) harbor-core
d99cf8c624c4 goharbor/harbor-registryctl:v1.8.2 "/harbor/start.sh" 22 hours ago Up 22 hours (healthy) registryctl
c052a0fd7d43 goharbor/redis-photon:v1.8.2 "docker-entrypoint.s…" 22 hours ago Up 22 hours 6379/tcp redis
02e342611910 goharbor/registry-photon:v2.7.1-patch-2819-v1.8.2 "/entrypoint.sh /etc…" 22 hours ago Up 22 hours (healthy) 5000/tcp registry
ceb3aeb6abc4 goharbor/harbor-db:v1.8.2 "/entrypoint.sh post…" 22 hours ago Up 22 hours (healthy) 5432/tcp harbor-db
5173af6ec914 goharbor/harbor-log:v1.8.2 "/bin/sh -c /usr/loc…" 22 hours ago Up 22 hours (healthy) 127.0.0.1:1514->10514/tcp harbor-log
足足有9个容器来提供服务。
特别说明
要开启Harbor的ldap认证功能就必须要在安装完,并启动服务后变更一下认证源。如果没有变更,就添加了用户就没有办法去修改配置变更了。
新版本是通过APi的方式来执行变更的。首次启动Harbor后执行变更认证方式:需要用户名和密码来认证权限。
[root@soft-mirros harbor]# curl -X PUT -u "admin:Harbor12345" -H "Content-Type: application/json" -ki https://reg.docker.tb/api/configurations -d'{"auth_mode":"ldap_auth"}'
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 30 Aug 2019 01:32:08 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 0
Connection: keep-alive
Set-Cookie: sid=2c0e67ff48e140d060d4619f1fec4824; Path=/; HttpOnly
返回状态为200即说明操作变更成功。
重启一下服务:
[root@soft-mirros harbor]# docker-compose down
[root@soft-mirros harbor]# docker-compose start
这里使用restart时出现了几个异常,导致几个容器启动不了。
点击系统管理---配置管理---认证模式,选择ldap,具体填写如下:
说明
1、这里填写Ldap的服务器,因为填写域名时报500,这里就写IP加端口了
2、就是写入ldap的管理员帐号和密码。
3、LDAP过滤器,这里就是实现不同分组登陆验证的主要配置。
4、组管理员DN这里跟上面的第2个过滤器里使用的组harbor。
ldap过滤器:
(&(objectclass=inetorgperson)(memberof=cn=harbor,ou=group,dc=sotemalltest,dc=com))
完成后点击保存,测试连接。
然后退出管理员登陆,重新使用ldap的用户来登陆。
因为上一次配置中属于harbor
分组的用户就只有jack,所以使用它登陆后可以看到如下界面。
那怎么验证该用户来自于ldap认证过来的呢?点击右上角的用户名---用户设置可以看到注释from LDAP.
即表明来自于ldap认证。
同时可以在Openldap平台上查看日志看到以下信息。
用户登时通过ldap搜索ou=People,dc=sotemalltest,dc=com
,然后再结合过滤器搜索指定的分组cn=harbor
,验证此组里是否存在用户jack,成功则返回 RESULT tag=97 。
使用其它用户登陆
swper用户不属于harbor分组,它配置在Jenkins分组里的,使用它登陆验证一下。
登陆失败,日志信息也有记录。
通过对比日志信息,看到时 RESULT tag=97 为验证成功,而tag=101表示失败。
因为ASCII码中:97表示字符a(access),而101表示e(error).
至此我们实现了harbor通过ldap认证登陆的功能。