经过实践发现k8的理论微服务其实跟镜像仓库这种东西并不是很相符,但是因为使用docker-compose方式是最简单易用的. (虽然离开了k8失去了HA,分布式以及很多好的特性). 所以这里还是单独用传统方式搭建一次Harbor1.3版本. (k8方式这版本坑巨多)..
0x00. 准备工作
关于harbor的介绍在k8说过,这里不重复. 以后如果有更深的认识再转移,参考官方最新文档… 希望这次不会有k8那么多坑了. 需要准备以下:
特别强调,请提前关闭一下systemctl stop firewalld (最好disable了),确保没有安装其他修改网络的软件. 这会决定你安装harbor的速度是10分钟还是1000分钟..
docker1.12/17.x (yum默认是1.12)
建模板的时候一定要记得关掉混蛋的firewalld/iptables,以及selinux.swap.. 特别是防火墙!! 装好之后再取消可能影响docker功能.
离线镜像版本offline-1.3. (官方release下载 .约900MB) ,然后解压, (可选:提前加载,)
1
2
3
4$ tar xvf harbor-offline-installer-v1.3.0.GZ #建议离线分发解压后的包.
$ chmod +x harbor/prepare #给prepare脚本执行权限
#提前加载
$ docker load -i harbor.v1.3.0.tar.gzdocker-compose最新版(待验证)
1
2
3
4
5
6
7
8
9$ wget https://github.com/docker/compose/releases/download/1.18.0/docker-compose-Linux-x86_64 #官方推荐是用curl,不建议
$ mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
$ chmod a+x /usr/local/bin/docker-compose #也有写+x的.
#这样就完成了,测试
$ docker-compose version #下面是正常输出
docker-compose version 1.18.0, build 8dd22a9
docker-py version: 2.6.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t 3 May 2016curl -L是官方推荐方法,但是实测下载速度巨慢.如果这样获取安装不行/报错…那还是先rm -f /usr/local/bin/docker-compose,然后老实下载好然后转移到虚拟机吧.(网络环境差真的很头痛)
关于docker-compose
因为之前没有单独提过docker官方提供的docker-compose. 这里还是需要简单介绍一下的(之后有空来填)
0x01. HTTPS化
因为默认yum的docker已经默认https化了,加之正式环境其实整个k8也需要https化.所以补充上开启harbor的HTTPS过程. 参考官方文档. 这里内网使用直接说自签证书.
A.获得证书
1.生成CA证书
1 | openssl req \ |
输入上述命令,然后会提示你输一堆目前看无关紧要东西..可以都直接回车跳过. 完成后当前文件夹生成ca.crt和ca.key 两个文件.
2.生成证书签名
最好https化的当然是一个域名,除了方面记忆也方便以后更换harbor ip的时候复用. 如果有内网域名的时候命令如下:
1 | # 如果你有xxx.com作为域名,跳过下面一个生成ip的 |
3.生成主机证书
1 | #主机是ip为例,两步 (有域名不需要第一步) |
B.配置安装
1.配置harbor.cfg文件
获取了jin.crt 和 jin.key 文件之后. 可以先把它们放到类似 /root/cert 文件夹下. (提前建好)
1 | mkdir -p /data/cert |
然后编辑harbor.cfg ,更新其中的 hostname,protocol,ssl_cert相关参数如下.
1 | #这里如果是域名直接写. ip的话可能加端口,因为80可能会有冲突.没冲突可以不改 |
0x02.上手
1.本机测试
前面工作做完就很快了,执行 sh install.sh .就开始安装过程了.整个步骤非常简单,而且基本没坑. 主要耗时就在加载镜像这一步. (提前加载就挺快)
完成之后就可以访问了,如图 (默认账号密码登录自查)
进来后项目这创建一个test 做测试,下面是没做https时docker命令登录需要修改的.(上面https化就可以跳过了)
1 | $ vi /usr/lib/systemd/system/docker.service |
然后因为是docker-compose形式构建的,缺少一个主从会很危险,建议启用harbor自带的主从机制.所以在推送镜像测试之前先开另一个虚拟机作为harbor的从仓库. 然后在主仓库需要备份的项目选创建复制规则.
1 | #以上成功后尝试给某个镜像tag,然后上传.例如harbor自带的photon |
不过这里有个问题,为什么原本127MB的镜像推送之后仓库中显示是40多MB. (推测可能底层复用了? 确认是)
然后要对project进行修改有个非常坑的地方……也没找到官方说明,就是项目旁边有个空白处才能配置.开始纳闷了好久…. 更新: 发现chrome是正常的. 有...提示 ,看来firefox这是药丸呀…. 好多设置都没支持,chrome一家独大感觉也不好.
补充一下harbor-compose的核心过程: (删除的时候是逆序的.)
- 创建
harbor122_harbor的虚拟网桥 - 创建容器
- 启动容器
实践暂时就到这, 后续补充harbor的进阶使用.
2.验证以及其他机器访问
上面做完,就可以尝试访问你之前的ip了 .如果你有防火墙或者类似web防护机制,会提示你如下:
然后可以看到证书是你刚建立的. 如果浏览器还是认为它不安全你得添加信任. 进来之后发现提示502 bad gateway … 有点尴尬. 然后不要慌,等一下. 或者重启一下刚才容器. 就能看到https://ip 的页面了.
还有一个主要问题就是其他k8的节点访问. 之前我们因为没用https.都是用非常难受的办法在每台机器docker启动参数添加-insecure-registry . 安装好后首先要确保这个参数不存在了.
其次. 必须复制上面第一步生成的ca.crt 证书到 etc/docker/certs.d/hostip . 目录不存在就手动创建.如果修改了默认端口,还需要参考文档改一下. (hostip是主机ip地址,用域名就是域名取代)
1 | #在Harbor-master的主机上做批量分发ca.crt,这里还需要依赖脚本,因为不同主机信任/密码都是问题. |
最后补充一下,如果之前开启了harbor主从复制. 需要修改之前的从主机url为https协议. 并且harbor这里很智能,你之前http同步失败有详细记录. 你修改https成功后,Harbor会自动同步之前同步失败的镜像.
ps:harbor有问题可以参考如下重置命令.很有效:
1 | $ docker-compose down |
如果更换了机器重装harbor.但是ip没有变,那么想把之前同步的重新同步一次,只需要把复制规则暂停再开启就行.
其他麻烦一点的问题参考整合文章K8S问题排查(一)




