部署Harbor私有仓库

Harbor 架构组件

1、Proxy:反向代理工具

2、Registry:负责存储docker镜像,处理上传/下载命令。对用户进行访问控制,它指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token,registry会通过公钥对token进行解密验证。

3、Core service:Harbor的核心功能:

  • UI:图形界面

  • Webhook:及时获取registry上image状态变化情况,在registry上配置 webhook,把状态变化传递给UI模块。

  • Token服务:复杂根据用户权限给每个docker push/p/ull命令签发token。Docker客户端向registry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向registry进行请求。

4、Database:提供数据库服务,存储用户权限,审计日志,docker image分组信息等数据

5、Log collector:为了帮助监控harbor运行,复责收集其他组件的log,供日后进行分析

img

安装部署

前提条件

1、安装docker

2、安装K8s

部署horbor
安装helm
官方链接: https://github.com/helm/helm/releases
wget https://get.helm.sh/helm-v3.4.0-linux-amd64.tar.gz     #下载安装包
​
tar fx helm-v3.4.0-linux-amd64.tar.gz               #解压安装包
​
cp linux-amd64/helm /usr/local/bin                  #复制
​
helm version                                        #查看版本号
version.BuildInfo{Version:"v3.4.0", GitCommit:"7090a89efc8a18f3d8178bf47d2462450349a004", GitTreeState:"clean", GoVersion:"go1.14.10"}

安装harbor

1、创建namespace
 kubectl create namespace harbor
2、下载安装包
wget https://github.com/goharbor/harbor-helm/archive/v1.5.0.tar.gz
tar fx v1.5.0.tar.gz
cd harbor-helm-1.5.0/
3、安装存储类:我使用k8s集群的管理工具——kuboard工具安装(我使用的是NFS存储类)

步骤:安装NFS服务器——》在kuboard上安装存储类

参考搭建NFS Server | Kuboard

4、搭建HTTPS——.创建harbor秘钥
mkdir -p /home/master/harbor_crt    #可以自己创建目录
cd  /home/master/harbor_crt
​
## 获得证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt  -subj  "/C=CN/ST=Guangdong/L=Guangzhou/O=example/OU=example/CN=10.1.1.221"    #此处IP是你自己创建harbor仓库
​
## 生成证书签名请求
openssl req -newkey rsa:4096 -nodes -sha256 -keyout tls.key -out tls.csr  -subj  "/C=CN/ST=Guangdong/L=Guangzhou/O=example/OU=example/CN=10.1.1.221" #此处IP是你自己创建harbor仓库
​
​
cat > extfile.cnf <<EOF
subjectAltName = IP:10.1.1.221     #此处IP是你自己创建harbor仓库
EOF
​
​
## 生成证书
openssl x509 -req -days 3650 -in tls.csr -CA ca.crt -CAkey ca.key -CAcreateserial  -extfile extfile.cnf -out tls.crt
​
​
#创建秘钥——我在此处没有创建导致报错,nginx容器没有启动
cd  /home/master/harbor_crt
​
kubectl create secret generic harbor-tls --from-file=tls.crt --from-file=tls.key --from-file=ca.crt -n harbor
​
kubectl -n harbor get secret  harbor-tls
5、配置 Harbor 的 values.yaml 文件
cd harbor-helm-1.5.0/
vim values.yaml 
​
#expose.type="nodePort"         // 用NodePort访问、如果想用域名就改成Ingress
#expose.tls.enabled="false"     // 关闭证书——也就是建立HTTP形式harbor
##第一处修改第一行,开始找
expose:
  type: nodePort          #所选网络类型——第一处修改
  tls:
    enabled: true
    certSource: secret       #第二处修改
    auto:
      commonName: ""
    secret:
      secretName: "harbor-tls"                # 上一个步骤创建的密钥——第三处修改
      notarySecretName: "harbor-tls"
​
......
#修改URL——填写node节点ip:端口
externalURL: https://10.1.1.221:30003       #第四处修改
​
​
#第五处修改
#storageClass、subPath
persistence:
  enabled: true
  resourcePolicy: "keep"
  persistentVolumeClaim:
    registry:
      existingClaim: ""
      storageClass: "nfs-boge"          # 创建存储类名称——你自己创建的
      subPath:  registry                       # 路径——可以不填,也可以填写上边路径
      accessMode: ReadWriteMany
      size: 20Gi
      annotations: {}
    chartmuseum:
      existingClaim: ""
      storageClass: "nfs-boge"
      subPath: chartmuseum
      accessMode: ReadWriteMany
      size: 5Gi
      annotations: {}
    jobservice:
      jobLog:
        existingClaim: ""
        storageClass: "nfs-boge"
        subPath: jobservice
        accessMode: ReadWriteMany
        size: 5Gi
        annotations: {}
    database:
      existingClaim: ""
      storageClass: "nfs-boge"
      subPath: database
      accessMode: ReadWriteMany
      size: 5Gi
      annotations: {}
    redis:
      existingClaim: ""
      storageClass: "nfs-boge"
      subPath: redis
      accessMode: ReadWriteMany
      size: 5Gi
      annotations: {}
    trivy:
      existingClaim: ""
      storageClass: "nfs-boge"
      subPath: trivy
      accessMode: ReadWriteMany
      size: 5Gi
      annotations: {}
6、安装harbor
helm install harbor . -f values.yaml -n harbor
kubectl get pods -n harbor       #查看pod是否运行
kubectl get svc -n harbor        #查看service
kubectl get pv,pvc -n harbor | grep harbor #查看pv和pvc
7、访问
curl -k  https://IP+端口
#然后可以反向代理,使用域名访问
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐