在K8S集群上部署Harbor私有仓库
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仓库。wget https://get.helm
·
部署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,供日后进行分析
安装部署
前提条件
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上安装存储类
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+端口 #然后可以反向代理,使用域名访问
更多推荐
已为社区贡献3条内容
所有评论(0)