目录:
(1).准备工作
(2).kubesphere部署harbor
(3).配置harbor到apisix-devops
1.配置harbor-portal
2.配置harbor-core
(4).push第一个镜像到harbor
(5).参考资料
(1).准备工作
由于并不是真正的生产环境,为了简单/省钱,所以本文的harbor使用非tls方式(http)。
需要线部署openebs并设置默认sc,因为harbor要用到local pv做持久化存储。
openebs-1:kubernetes使用openebs作为provisioner(卷机制)
(2).kubesphere部署harbor
在kubesphere的应用商店中选择Harbor:
要事先建立好项目(命名空间):harbor
修改配置:使用nodeport方式下的http协议。
commonName可以不用改,这个是开启tls:true才有用的,但是这里也改了,规矩。
harbor-core.qianlixinzou.com
注意看注释:
http://harbor-core.qianlixinzou.com:31600
31600是apisix的nodeport端口。
修改harbor-portal的登陆密码:Harbor12345
不用开启ingress,因为后边统一用apisix来做反向代理。
等待pod部署完成,查看:
kubectl get po -n harbor
查看svc:
持久化pv查看:
kubectl get pv | grep -i harbor
可以通过ip:nodeport访问:
http://172.26.237.196:30002/harbor
(3).配置harbor到apisix-devops
apisix部署参见:
kubesphere-3:kubesphere部署etcd与apisix
1.配置harbor-portal
配置域名解析:
apisix配置上游:
注意这里,只能使用harbor.harbor这个service,不能使用harbor-portal.harbor这个service,否则无法登陆harbor。harbor是总入口nginx,后边挂着harbor-portal和harbor-core。
配置路由:
通过域名访问harbor-portal:
http://harbor-portal.qianlixinzou.com:31600/harbor
初始密码:
用户名:admin
密码:Harbor12345
2.配置harbor-core
docker push/pull时走这个service。
配置域名解析:
apisix配置上游:
配置路由:
(4).push第一个镜像到harbor
配置docker的私有仓库:
vi /etc/docker/daemon.json
配置harbor-core.qianlixinzou.com,由apisix路由到harbor.harbor,然后再根据url打到harbor-core.harbor。
重启docker:
systemctl restart docker
集群恢复后推送image:
docker push harbor-core.qianlixinzou.com:31600/library/jenkins-jnlp-slave-golang:1.18
推送失败。
需要这样处理,修改harbor-registry这个configmap:
kubectl edit -n harbor cm harbor-registry
将relativeurls改为true,默认是false。如果是在harbor前边加反向代理必须修改这个值。
这个问题真的很坑比。
再次推送镜像,成功:
在harbor-portal上验证:OK。
在本地删除这个镜像后重新pull也OK。
先删除:
docker image rm -f 0d65663dc9c9
再pull:
(5).参考资料
1.在 KubeSphere 中部署 Harbor
https://kubesphere.io/zh/docs/application-store/built-in-apps/harbor-app/
2.https://www.cnblogs.com/keithtt/p/7596290.html
3.https://kubesphere.com.cn/forum/d/307-docker-push-harbor-https/4