目前较为流行的搭建私有镜像仓库的方式是通过部署开源项目harbor来实现,该开源项目中带有镜像仓库认证服务,但使用的是自带的数据库,也就是说如果要对接到一个已有的系统中,需要将用户数据以及角色同步到harbor的系统中,虽然不会存在什么数据安全的问题(生产环境中肯定是内网部署,数据安全还是比较有保障的),但是数据同步是个很麻烦的问题,很容易出现数据同步不一致的问题,因此最好的方式就是能够直接通过业务系统中的权限管控模块来实现镜像仓库权限的管理。
Docker registry v2 token 认证介绍
docker官方文档地址:https://docs.docker.com/registry/spec/auth/token/
Docker Registry V2 Auth Server 基于Docker Registry V2的token认证方式实现,可与java项目进行整合,通过实现接口,与已有的系统中的的用户权限模块进行对接,实现私有docker镜像仓库的认证,将整个系统中的权限管控功能统一起来。
使用方式:
- 生成密钥对
openssl req -newkey rsa:4096 -nodes -sha256 -keyout auth.key -x509 -days 365 -out auth.crt
Generating a 4096 bit RSA private key
- 实现AccountService、ProjectService接口
/实现AccountService接口
public class AccountServiceImpl implements AccountService {
}
//实现ProjectService接口
public class ProjectServiceImpl implements ProjectService {
}
添加配置
在项目资源目录添加认证服务器的配置数据
components:
auth:
service: Registry auth server
issuer: Registry Auth service
#token过期时间(minute)
tokenExpire: 180
publicKeyPath: keyfile/auth.crt
privateKeyPath: keyfile/auth.key
- 添加密钥文件
将生成的密钥文件放在项目resources目录,文件路径需与配置中的文件路径保持一致
- 配置镜像仓库的token认证服务器配置
auth:
token:
realm: ${auth_server_host}/api/registry/auth
service: Registry auth server
issuer: Registry Auth service
rootcertbundle: /etc/registry/auth.crt
源码已放在GitHub上,地址:https://github.com/schzrj/docker-registry-v2-auth