封尘网

让学习成为一种习惯!

harbor通过ldap实现验证登陆

之前有写过一篇文章: [harbor离线安装并配置HTTPS私钥认证的Docker仓库],里面有介绍过如何安装配置Harbor,如果不是因为本次故障的导致的问题都没想过升级它。因为功能满足了,就少变动了。

官网:https://goharbor.io/

具体的安装方法参考上篇文章,这里仅记录一些略有不同的地方。

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时出现了几个异常,导致几个容器启动不了。

登陆后台:https://reg.docker.tb

点击系统管理---配置管理---认证模式,选择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认证登陆的功能。

提醒:本文最后更新于 79 天前,文中所描述的信息可能已发生改变,请谨慎使用。