目前較爲流行的搭建私有鏡像倉庫的方式是通過部署開源項目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