【云原生】Harbor

【云原生】Harbor

0、Harbor介绍

Harbor是啥:

  • 私有仓库:可以保存charts、images、...

  • Harbor还可以充当docker hub的中转站,代理docker hub

  • 功能强大:有webhook等功能...

核心组件:

  • Nginx(Proxy):用于代理Harbor的registry,UI, token等服务
  • db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
  • UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权
  • jobsevice:负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log
  • Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
  • Registry:原生的docker镜像仓库,负责存储镜像文件。
  • Log:为了帮助监控Harbor运行,负责收集其他组件的log,记录到syslog中

1、基本环境

自定义域名(自签的证书),docker不能信任该证书;我们要让各个docker节点都信任这个证书

由于harbor使用的是https。所以需要docker信任这个https;

sh 复制代码
# 把以前总ingress的证书的文件 复制到 各个需要使用harbor的装了docker的节点的  /etc/docker/certs.d/harbor.itdachang.com/tls.crt

mkdir -p /etc/docker/certs.d/harbor.itdachang.com/

for NODE in k8s-ha-master1 k8s-ha-master2 k8s-ha-master3 k8s-ha-node1 k8s-ha-node2 k8s-ha-node3; do
    scp /root/crt/itdachang/tls.crt root@$NODE:/etc/docker/certs.d/harbor.itdachang.com/
done

给所有docker机器配置/etc/hosts:

sh 复制代码
#随便一个安装了ingress的节点的ip harbor.itdachang.com
192.168.10.147 harbor.itdachang.com

云上自定义域名如下操作:

1、配置每个主机的 /etc/hosts文件。可指定域名地址为 公网ip或者ingress节点所在ip

2、在 /etc/docker/certs.d/ 下面准备域名文件夹(包含非默认的端口号),并把域名的 cert/crt文件复制进去。并且修改文件名叫 xxx.crt,不能是cert文件

3、建议配置 ingress节点所在ip 。这样我们使用域名来到了ingress节点。ingress节点的nginx监听到了此域名,则转发给指定服务

2、部署harbor

sh 复制代码
# 下载
helm repo add harbor https://helm.goharbor.io
helm pull harbor/harbor


我要harbor-1.6.2.tgz

helm pull harbor/harbor --version 1.6.2

tar -xvf harbor-1.6.2.tgz

cd harbor && ls
sh 复制代码
# kubectl create ns devops
kubectl create namespace devops
#tls.key、tls.crt用之前的ingress的总证书即可
kubectl create secret tls itdachang.com --cert=tls.crt   --key=tls.key  -n devops

harbor内部组件用harbor默认带的证书(在harbor/cert目录下)。ingress需要用自己证书

yaml 复制代码
# 修改配置  vi  override.yaml
expose:  #web浏览器访问用的证书
  type: ingress
  tls:
    certSource: "secret"
    secret:
      secretName: "itdachang.com"
      notarySecretName: "itdachang.com"
  ingress:
    hosts:
      core: harbor.itdachang.com
      notary: notary-harbor.itdachang.com
externalURL: https://harbor.itdachang.com
internalTLS:  #harbor内部组件用的证书
  enabled: true
  certSource: "auto"
persistence:
  enabled: true
  resourcePolicy: "keep"
  persistentVolumeClaim:
    registry:  # 存镜像的
      storageClass: "rook-ceph-block"
      accessMode: ReadWriteOnce
      size: 5Gi
    chartmuseum: #存helm的chart
      storageClass: "rook-ceph-block"
      accessMode: ReadWriteOnce
      size: 5Gi
    jobservice: #
      storageClass: "rook-ceph-block"
      accessMode: ReadWriteOnce
      size: 1Gi
    database: #数据库  pgsql
      storageClass: "rook-ceph-block"
      accessMode: ReadWriteOnce
      size: 1Gi
    redis: #
      storageClass: "rook-ceph-block"
      accessMode: ReadWriteOnce
      size: 1Gi
    trivy: # 漏洞扫描
      storageClass: "rook-ceph-block"
      accessMode: ReadWriteOnce
      size: 5Gi
metrics:
  enabled: true
sh 复制代码
# 部署
helm install -f values.yaml  -f override.yaml  harbor ./ -n devops
sh 复制代码
watch kubectl get pod -n devops

3、部署完成

参照使用:https://goharbor.io/docs/2.2.0/working-with-projects/

https://goharbor.io/docs/2.2.0/working-with-projects/create-projects/

默认访问账号密码:admin Harbor12345

随便添加,删除一个项目,就是部署好了

4、docker使用

访问 https://harbor.itdachang.com/harbor/projects 新建一个mall项目

sh 复制代码
docker login harbor.itdachang.com 【admin Harbor12345】

docker logout harbor.itdachang.com
sh 复制代码
#我本地有一个alpine:latest镜像
docker tag alpine:latest harbor.itdachang.com/mall/alpine:v1.0
docker push  harbor.itdachang.com/mall/alpine:v1.0

查看私库中已推送的镜像:

从私有仓库中拉取该镜像:【比如从随便一台机器上拉取】:

sh 复制代码
#公有项目下的仓库直接拉;私有项目下的仓库需登录
docker pull  harbor.itdachang.com/mall/alpine:v1.0

给别人admin账号,风险太高,因此可以创建一个机器人账号让别人去使用【创建的时候指定好权限即可】:

账号: robot$hello+hellopull

密码【创建的时候只显示一次】: foTlux0RTBGzPlvNaxmAkEj4E6quYb10

可以用k8s的secret进行管理该机器人账号;或者手动用该账号密码登录

5、镜像代理

代理仓库,代理docker hub中央仓库

拉取docker官方镜像。并缓存起来。

sh 复制代码
#新建一个hello项目

#代理官方    harbor.itdachang.com/自己的项目名 + /library + /镜像名:版本
docker pull harbor.itdachang.com/hello/library/alpine
#代理第三方  harbor.itdachang.com/自己的项目名 + /第三方全名 【nginx/nginx-ingress就是该镜像在docker hub中的全名】
docker pull harbor.itdachang.com/hello/nginx/nginx-ingress
相关推荐
阿里云云原生6 小时前
HiRoute 新版本发布:结合自己的真实工作选择最佳模型
云原生
对象存储与RustFS9 小时前
Velero 接 RustFS 实操:K8s 集群备份落到自建对象存储
后端·docker·云原生
.冰块.12 小时前
流量大了自动加 Pod!K8s HPA 扩缩容与 ResourceQuota/LimitRange 资源管控实战
linux·云原生·容器·kubernetes·hpa·quota·limitrange
Z21-X14 小时前
云原生运维实战笔记:企业网站综合上云部署与云运维服务全景解析
运维·笔记·学习·云原生
qq_4523962315 小时前
第三篇:《从 ZooKeeper 到 KRaft 的迁移实战:前置条件、三阶段流程与回滚策略》
分布式·zookeeper·云原生
分布式存储与RustFS15 小时前
Longhorn 的卷备份别堆本地盘:用 RustFS 给它当 S3 备份目标
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
DolitD1 天前
UE像素流与云渲染技术方案对比分析
3d·云原生·ue5·云计算·图形渲染
这个DBA有点耶1 天前
云数据库半夜卡顿,CPU才30%?深挖云盘IOPS突发限制与内核挂起机制
数据库·mysql·云原生
分布式存储与RustFS1 天前
JuiceFS 接 RustFS 当数据后端:把对象存储挂成本地文件系统
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
孔令飞2 天前
很多人想学AI Infra,今天推荐一个 AI Agent / AI Infra 学习路线
云原生·go·ai编程