【云原生】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
相关推荐
lpruoyu2 小时前
【云原生】可观测性系统—Istio
云原生·istio
lpruoyu2 小时前
【云原生】Kubernetes平台存储系统搭建_CRI、CNI、CSI
ceph·云原生·容器·kubernetes
Gold Steps.3 小时前
GitOps之Jenkins 构建镜像自动更新 Helm 并触发 ArgoCD 自动同步
运维·ci/cd·云原生
大傻^3 小时前
Spring AI 2.0 生产部署指南:从 1.x 迁移、性能调优与云原生实践
人工智能·spring·云原生·springai
lpruoyu3 小时前
【云原生】可观测性系统—Prometheus—EFK
云原生·prometheus
Elastic 中国社区官方博客4 小时前
AI agent 记忆:使用 Elasticsearch 托管记忆创建智能代理
大数据·人工智能·elasticsearch·搜索引擎·ai·云原生·全文检索
龙飞0512 小时前
Kubernetes 疑难杂症:Pod 始终处于 Terminating 状态的真实原因与安全修复方案
安全·云原生·容器·kubernetes
4t4run18 小时前
3、k8s安装
云原生·容器·kubernetes
星辰_mya19 小时前
ZooKeeper 分布式锁:强一致性下的“排队”哲学
分布式·zookeeper·云原生·面试·分布式锁