阿汤博客-承接中小企业服务器维护和网站维护,有意者可以联系博主!

搭建具有认证、TLS的docker registry私有仓库

运维文档 394℃ 0评论

一、下载官方registry镜像并启动测试

#docker pull registry

#mkdir /opt/data/registry -pv

# docker run -d  -p 5000:5000 -v /opt/data/registry/:/var/lib/registry –name local-hub registry

如果不需要ssl安全认证,可以在/etc/docker/daemon.json 添加如下信息,默认是要启用ssl认证,不添加无法使用,IP地址替换为自己registry主机的IP地址。

{

"registry-mirror": [

 "https://uf3mgws6.mirror.aliyuncs.com"

   ],

      "insecure-registries": [

  "192.168.15.102:5000"

   ]

}

添加好以后,提交镜像测试

#docker tag java/tomcat:1.8.0_192 192.168.15.102:5000/java/tomcat:1.8.0_192

#docker push 192.168.15.102:5000/java/tomcat:1.8.0_192

#curl 192.168.15.102:5000/v2/_catalog  #访问测试是否是否成功


二、配置私有CA认证机构

#cd /etc/pki/CA

#(umask 077; openssl genrsa -out private/cakey.pem)  #生成一对密钥

#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3667 #生成自签证书,然后填写相关信息

搭建具有认证、TLS的docker registry私有仓库

创建相应文件,如果/etc/pki/CA已经有这些文件夹可以不用创建

#mkdir certs crl newcerts

#touch index.txt

#echo 00 > serial  #设置序列号


三、创建认证证书

#mkdir /root/hub

#cd /root/hub

#(umask 077; openssl genrsa 1024 >hub.key)  #创建一对1024位长度的密钥

#openssl req -new -key hub.key -out hub.csr   #生成证书颁发请求(然后将请求传送给CA服务器,如果认证服务器也是同一台服务器就不用拷贝),此处填写的信息要和前面CA生成自签证书时候填写的信息要一致

搭建具有认证、TLS的docker registry私有仓库

# openssl ca -in ./hub.csr -out ./hub.crt -days 3650   #签署此证书10年的有效期

搭建具有认证、TLS的docker registry私有仓库

错误1:

wrong number of fields on line 1 (looking for field 6, got 1, '' left)

原因:是你的index.txt文件不为空,改为空文件即可。

错误2:

error while loading serial number

3078239980:error:0D066096:asn1 encoding routines:a2i_ASN1_INTEGER:short line:f_int.c:215:

原因:是因为serial文件中没有赋初值,即没有执行echo 00 > serial


四、配置私有仓库

#mkdir {ssl,auth}

#mv hub.crt  hub.key ./ssl

#rm -rf hub.crs

#docker run –rm –entrypoint htpasswd registry -Bbn admin admin123 > auth/nginx.htpasswd  #生成 http 认证文件,账号密码替换成自己的

配置config.yml文件,注意对齐

#cat config.yml

version: 0.1

log:

 accesslog:

   disabled: true

 level: debug

 formatter: text

 fields:

   service: registry

   environment: staging

storage:

 delete:

   enabled: true

 cache:

   blobdescriptor: inmemory

 filesystem:

   rootdirectory: /var/lib/registry

auth:

 htpasswd:

   realm: basic-realm

   path: /etc/docker/registry/auth/nginx.htpasswd

http:

 addr: :443

 host: https://hub.amd5.cn

 headers:

   X-Content-Type-Options: [nosniff]

 http2:

   disabled: false

 tls:

   certificate: /etc/docker/registry/ssl/hub.crt

   key: /etc/docker/registry/ssl/hub.key

health:

 storagedriver:

   enabled: true

   interval: 10s

threshold: 3


五、安装docker-compose

1、在 Linux 64 位系统上直接下载对应的二进制包

#curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#chmod +x /usr/local/bin/docker-compose


2、bash补全命令

#curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose


3、编辑docker-compose.yml文件

#cat docker-compose.yml

version: '3'

services:

 registry:

   image: registry

   ports:

     – "443:443"

   volumes:

     – ./:/etc/docker/registry

     – registry-data:/var/lib/registry

volumes:

 registry-data:


4、配置host文件

# cat << EOF >> /etc/hosts

> 192.168.15.102   hub.amd5.cn

> EOF


5、配置让docker识别证书,否则docker login会报错Error response from daemon: Get https://hub.amd5.cn/v1/users/: x509: certificate signed by unknown authority

#cat /etc/pki/CA/cacert.pem >>/etc/pki/tls/certs/ca-bundle.crt   #让操作系统信任我们的自签名证书,如果需要在其他服务器登录上传下载镜像,也需要把此文件内容添加到对应服务器的ca-bundle.crt 里面

#mkdir /etc/docker/certs.d

#cp /etc/pki/CA/cacert.pem /etc/docker/certs.d/ca.crt  

#systemctl restart docker

#docker-compose up -d  #启动测试

搭建具有认证、TLS的docker registry私有仓库


六、上传下载测试

1、上传镜像测试

镜像封装参考docker封装java/tomcat最小镜像

#docker tag java/tomcat:1.8.0_192 hub.amd5.cn/java/tomcat:1.8.0_192  #在另外一台服务器tag以后测试上传

#docker push hub.amd5.cn/java/tomcat:1.8.0_192

搭建具有认证、TLS的docker registry私有仓库


2、查看证书

搭建具有认证、TLS的docker registry私有仓库


3、添加仓库地址

#cat /etc/docker/daemon.json

{

  "registry-mirrors":[

    "https://uf3mgws6.mirror.aliyuncs.com"

 ],

  "insecure-registries":[

    "https://hub.amd5.cn"

  ]

}


4、配置kubernetes拉取私有仓库镜像

#kubectl create secret docker-registry registrysecret –docker-server=hub.amd5.cn  –docker-username=admin –docker-password=admin123  #创建secret

#kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "registrysecret"}]}'  #将该密钥设置到k8s的默认账号中

#kubectl run java –image=hub.amd5.cn/java/tomcat:1.8.0_192 –relicas=2  #拉取镜像测试

搭建具有认证、TLS的docker registry私有仓库

转载请注明:阿汤博客 » 搭建具有认证、TLS的docker registry私有仓库

喜欢 (0)or分享 (0)