基于cesanta/docker_auth认证的docker registry的搭建

说明

registry v1 没有提供认证,鉴权的功能,需要自己通过类似nginx的反向代理来做简单的认证鉴权
registry v2 提供了认证、鉴权的接口,但是需要自己实现认证鉴权的功能,或者是对接第三方的认证鉴权
鉴于此,对接第三方的认证鉴权是比较合适的选择,而业界使用比较多的registry认证鉴权是cesanta/docker_auth
现在基于docker_auth来搭建docker registry

  • 二进制形式安装
  1. 下载编译registry
    git clone https://github.com/docker/distribution.git
    cd  distribution/cmd/registry
    go build
  1. 编辑配置文件
cp sample.yml conf.yml

配置文件如下

version: 0.1
log:
  fields:
    service: registry
  level: debug
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
  tls:
    certificate: /path/to/registry/registry.crt
    key: /path/to/registry/registry.key
auth:
  token:
    realm: "https://docker_auth.ip:5001/auth"
    service: "Docker registry"
    issuer: "Acme auth server"
    rootcertbundle: /path/to/docker_auth/server-cert.pem
  • 注意:证书要提前规划化好
  • http 模块的证书,是需要放到docker deamon 配置的信任证书的地方,一般是/etc/docker/cert.d/registry_xx_dome/registry.crt 这样在执行docker login等命令是,就可以建立tls连接了
  • auth token 处的证书,是为了registryauth建立tls连接用的
  • 由于docker deamonregistry交互式,registry会把auth地址返回回来,让docker deamon去申请授权,所以docker deamon 会直接与auth进行交互,而建立tls连接时,需要认证签名auth证书的证书,
    此时需要把,centos环境下,需要把注意是,该证书的签发证书放到/etc/pki/ca-trust/source/anchors/
    然后执行
update-ca-trust
systemctl restart docker
  • heath 模块配置去掉,负责,docker deamonregistry交互,会出发registry进行heath check导致失败
  • log 日志级别设置成debug会打印比较详尽的日志
  1. 启动registry
nohup ./registry serve config.yml &
  1. 下载编译docker_auth
git clone https://github.com/cesanta/docker_auth.git
cd auth_server
govendor sync
#添加两个常量到main.go中
go build

添加的两个常量是

const (
  Version = "xx"
  BuildId = "xx"
)
  1. docker_auth 配置

注意证书配对

  1. 启动 docker_auth
nohup ./auth_server ../examples/simple.yml &

7.测试略

推荐阅读更多精彩内容