centos7使用vmware/harbor搭建带证书的私有dockerhub
参考:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
Resource | Capacity | Description |
---|---|---|
CPU | minimal 2 CPU | 4 CPU is prefered |
Mem | minimal 4GB | 8GB is prefered |
Disk | minimal 40GB | 160GB is prefered |
安装前置条件 |
---|
1.python2.7以上 |
2.docker 1.10以上 |
3.docker-compose 1.6以上 |
4.Openssl |
当前测试环境:
使用的是vm的虚拟机创建的cenos7(ip:192.168.1.86)
python安装参考:
https://www.jianshu.com/p/ada7ca038d7fdocker-ce安装:
https://docs.docker.com/install/linux/docker-ce/centos/#os-requirements
1 | 卸载本机旧版本docker |
docker-compose安装
https://docs.docker.com/compose/install/#install-compose
1 | curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose |
下载harbor离线安装包
1 | wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.2.tgz |
使用虚拟机中centos7执行harbor安装脚本(install.sh)时遇到个坑,因为我使用的harbor的离线安装包,需要使用docker load harbor的docker 镜像文件(比较大),虚拟机中docker默认的Thin Pool有限制,倒入的时候会报如下错误
1 | devmapper: Thin Pool has 68 free data blocks which is less than minimum required 708 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior |
解决办法是:
1 | [root@k8s1 harbor]# yum remove docker -y #先卸载了docker |
虚拟机中新增一块虚拟20G IDE虚拟盘,然后挂在到系统中,更改docker lib库路径,再导入docker镜像就不会报错了。
1 | [root@k8s1 harbor]# mkdir /docker |
公司内部使用docker私有hub是需要登录和加密的,证书加密参照
https://github.com/vmware/harbor/blob/master/docs/configure_https.md
创建证书
1 | [root@k8s1 cert]#mkdir -p /system/cert&&cd /system/cert |
- 创建CA证书
1
2
3[root@k8s1 cert]# openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
-x509 -days 365 -out ca.crt #一路回车,注意出现CN时要输入本机ip或者域名 - 创建通讯crt与key
1
2
3[root@k8s1 cert]# openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout 192.168.1.86.key \
-out 192.168.1.86.csr #一路回车,注意出现CN时要输入本机ip或者域名 - 生成的证书注册主机
1
2
3[root@k8s1 cert] #openssl x509 -req -days 365 -in 192.168.1.86.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out 192.168.1.86.crt
[root@k8s1 cert] echo subjectAltName = IP:192.168.1.86 > extfile.cnf
[root@k8s1 cert] openssl x509 -req -days 365 -in 192.168.1.86.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out 192.168.1.86.crt证书生成完毕:我们所需要的证书主要有192.168.1.86.crt和192.168.1.86.key
harbor的配置与安装
解压完harbor离线安装包后编辑harbor.cfg文件,需要修改的参数如下:
1 | hostname=192.168.1.86 #改成本机ip或者域名 |
保存退出后然后运行安装脚本
1 | [root@k8s1 harbor]# ./install.sh #等待安装完成。 |
如果registry启动失败,则查看/var/log/harbor/registry.log日志
一般删除harbor/common/config/registry/config.yml中swiff相关信息即可。然后再重启registry容器。
当容器都运行正常,使用ie访问192.168.1.86登录admin密码Harbor12345此用户是超级管理员,可添加用户,权限给予管理员权限。
其他设备如要上传或者下载此私有docker hub镜像,需要向管理员索取192.168.1.86.crt证书并docker login 192.168.1.86方可上传下载。
客户端安装证书
linux系统导入证书:
- 1.mkdir /etc/docker/cert.d/192.168.1.86 #创建docker证书目录
- 2.cp 192.168.1.86.crt /etc/docker/cert.d/192.168.1.86/ca.crt #将证书改名ca.crt并放置在此路径下
- 3.systemctl restart docker #加入ca证书后重启docker生效
- 4.docker login 192.168.1.86 #输入用户名和密码后登录成功
Mac系统导入证书:
- 1.双机192.168.1.86.crt证书,系统默认钥匙串访问。
- 2.进入钥匙串访问,找到该证书,选择使用信任。
- 3.重启docker让证书生效
- 4.docker login 192.168.1.86 #输入用户名和密码后登录成功
如果登录时出现此类问题
1 | Error response from daemon: Get https://192.168.1.86/v2/: x509: certificate signed by unknown authority |
那是因为证书问题,主要查看服务端registry容器是否报错,或者客户端docker添加完证书后未重启导致。
Docker 登录成功后验证上传镜像:
- 1.将镜像改名192.168.1.86/library/* (library)
1
docker tag quay.io/coreos/etcd:v2.3.8 192.168.1.86/library/etcd:V1
- 2.docker push 192.168.1.86/library/etcd:V1