Kubernetes1.21搭建harbor

9 篇文章 1 订阅
2 篇文章 1 订阅

背景:

一直使用的腾讯云的个人仓库做镜像仓库。早些时候腾讯云有了tcr容器镜像服务:
image.png
瞄了一眼感觉略贵。个人也就50个之内的image。就想用一下镜像安全,漏洞扫描。也没有那么强硬的需求。600多块一个月还是感觉略贵!还是老老实实搭建一下harbor吧!

kubernetes1.21搭建harbor

注:开始在tke上面尝试的是kubernetes1.20.6两个版本差距不大就忽略吧。最后是在我的腾讯云自建的kubernetes1.21集群上。参考了早些时候个人写的博客:https://duiniwukenaihe.github.io/2019/10/29/k8s-helm-install-hrbor/

1. 下载harbor-helm仓库

git clone方式

4301a4b7774a0237204a44c0e3fbcca.png

git clone https://github.com/goharbor/harbor-helm

helm必备

当然了这里已经安装了helm3,helm环境是必备的
041c26c6d632bbd5561c360a75c1cc5.png

wget https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz
tar zxvf helm-v3.6.3-linux-amd64.tar.g
cd linux-amd64
cp helm /usr/local/bin/

helm fetch

这里也可以直接helm添加仓库的方式,算是复习一下helm命令吧。我是直接用了git clone的方式

[root@k8s-master-01 harbor-helm]# helm repo add harbor https://helm.goharbor.io
"harbor" has been added to your repositories
[root@k8s-master-01 harbor-helm]# cd /data/
[root@k8s-master-01 data]# helm search repo harbor
NAME         	CHART VERSION	APP VERSION	DESCRIPTION                                       
harbor/harbor	1.7.2        	2.3.2      	An open source trusted cloud native registry th...
[root@k8s-master-01 data]# helm fetch harbor/harbor --version 1.7.2

image.png

修改配置文件

修改value.yaml配置文件:
集群使用traefik代理外部访问。expose type设置了clusterIP.设置了externalURL,storageclass。如下:

type:

image.png

externalURL:

image.png

storageclass:

image.png
注:由于cbs最小单位允许为10g切步长为10g.故除了registry外其他的存储都使用了10G.当然了使用其他存储可个人合理设置!

helm install安装

helm install harbor -f values.yaml . --namespace kube-ops
kubectl get pods -n kube-ops -w  

2bd310ee496179a0725a49a03725877.png
image.png
注:此图后补的

helm upgrade

如后面更改了values.yaml 更新应用可以使用一下命令升级应用:

helm upgrade harbor -f values.yaml . --namespace kube-ops

如删除harbor应用,则:

helm uninstall harbor -n kube-ops

traefik代理harbor对外暴露应用:

ingressroute:

cat ingress-harbor.yml

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-http
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`harbor.xxx.com`) && PathPrefix(`/`)
      kind: Rule
      services:
        - name: harbor-portal
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-api
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`harbor.xxx.com`) && PathPrefix(`/api`)
      kind: Rule
      services:
        - name: harbor-core
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-service
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`harbor.xxx.com`) && PathPrefix(`/service`)
      kind: Rule
      services:
        - name: harbor-core
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-v2
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`harbor.xxx.com`) && PathPrefix(`/v2`)
      kind: Rule
      services:
        - name: harbor-core
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-chartrepo
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`harbor.xxx.com`) && PathPrefix(`/chartrepo`)
      kind: Rule
      services:
        - name: harbor-core
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-c
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`harbor.xxx.com`) && PathPrefix(`/c`)
      kind: Rule
      services:
        - name: harbor-core
          port: 80
kubectl apply -f ingress-harbor.yaml

image.png
默认登陆密码Harbor12345。当然也可以在value.yaml中进行提前替换修改!
image.png
image.png

traefik ingress

试一下ingress的方式
image.png
image.png

helm upgrade harbor -f values.yaml . --namespace kube-ops

image.png
注意:这里绑定了 另外一个域名!
web访问也是正常的!
-----------------------------分隔符------------------------------------------------------------------------------

出现的其他问题:

web访问正常 docker login登陆也正常 但是docker push 出现unkonwn blob?

0b6974bf2cea0087d864a1e2c588d2f.png
这样的原因估计是我的slb上面做了http自动跳转https。docker push的时候就出现了异常。网上看了很多解决的方法无从下手。基本上是说这样的?
1bbcf3787fec914dd5858b33af7cba2.png
最后偷懒用了一个简单的方法:
新建一个slb 。将主要的slb上面摘下个server放在新的slb上面。直接tcp代理。不做http强跳https。
image.png

 kubectl create secret tls all-xxxx-com --key=2_xxxx.com.key --cert=1_xxxx.com_bundle.crt -n kube-ops

image.png
ingress.yaml

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-http
spec:
  entryPoints:
    - websecure
  tls:
    secretName: all-xxxx-com
  routes:
    - match: Host(`harbor.xxxx.com`) && PathPrefix(`/`)
      kind: Rule
      services:
        - name: harbor-portal
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-api
spec:
  entryPoints:
    - websecure
  tls:
    secretName: all-xxxx-com
  routes:
    - match: Host(`harbor.xxxx.com`) && PathPrefix(`/api/`)
      kind: Rule
      services:
        - name: harbor-core
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-service
spec:
  entryPoints:
    - websecure
  tls:
    secretName: all-xxxx-com
  routes:
    - match: Host(`harbor.xxxx.com`) && PathPrefix(`/service/`)
      kind: Rule
      services:
        - name: harbor-core
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-v2
spec:
  entryPoints:
    - websecure
  tls:
    secretName: all-xxxx-com
  routes:
    - match: Host(`harbor.xxxx.com`) && PathPrefix(`/v2`)
      kind: Rule
      services:
        - name: harbor-core
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-chartrepo
spec:
  entryPoints:
    - websecure
  tls:
    secretName: all-xxxx-com
  routes:
    - match: Host(`harbor.xxxx.com`) && PathPrefix(`/chartrepo/`)
      kind: Rule
      services:
        - name: harbor-core
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  namespace: kube-ops
  name: harbor-c
spec:
  entryPoints:
    - websecure
  tls:
    secretName: all-xxxx-com
  routes:
    - match: Host(`harbor.xxxx.com`) && PathPrefix(`/c/`)
      kind: Rule
      services:
        - name: harbor-core
          port: 80

kubectl apply -f ingress.yaml

image.png

image.png

还发现一个好玩的;
我最终是在我的自建集群搭建的harbor。然后呢存储是cbs!参见:Kuberentes集群添加腾讯云CBS为默认存储。但是我的work节点有ap-shanghai2还有ap-shanghai-3区的主机。虽然3区的节点我设置了不可调度。但是还有有快存储建在了三区然后这样的结果就是pod不能正常running调度。毕竟云硬盘是不能跨区挂载的。解决方式就是新建一个storageclass ap-shanghai-2,更改了harbor中的存储类!

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: cbs-shanghai-2
provisioner: com.tencent.cloud.csi.cbs
parameters:
  diskZone: ap-shanghai-2

当然了 最终我还是换成了nfs…因为我不想给redis database分配10g的硬盘啊 浪费资源。nfs的存储这里更要注意一下selfLink 了,可以参照Kubernetes 1.19.12升级到1.20.9(强调一下selfLink)中selfLink的配置。

体验一下审查服务

image.png
image.png
嗯呢要更新一下依赖了…

后记:

其实就是想体验一下harbor的审查服务.但是这页面感觉还是不太成熟。扫描完成能不能给我出一个漏洞分布图呢?高危漏洞比重?每个images的漏洞比重?同一个镜像不同tag的漏洞趋势?
image.png

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
搭建Harbor镜像私服仓库的步骤如下:首先,在命令窗口中检查Harbor是否已经成功安装和启动,当看到提示信息"Harbor has been installed and started successfully"时,表示服务已经启动成功。 接下来,需要进行私服镜像仓库的搭建。安装和配置Harbor,可以使用docker-registry来支持私服镜像仓库。在安装过程中,需要增加私服镜像仓库端口配置,并配置Harbor的admin用户密码。同时,还可以安装帮助文档和使用帮助,以便更好地了解和使用Harbor。 登录Harbor私服镜像仓库成功之后,可以新建项目名称。这个项目可以是公开的,也可以是私有的。如果选择私有项目,需要使用docker login命令登录成功后才能拉取和推送镜像。登录Harbor私服仓库的命令为:docker login harbor服务器ip 账号admin 密码Harbor12345。这样,就可以将本地的镜像推送到搭建Harbor仓库中了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [linux安装harbor搭建镜像私服](https://blog.csdn.net/grabungen/article/details/130331375)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [k8s全自动离线按照下载链接.txt](https://download.csdn.net/download/lllipeng/12262373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [搭建Harbor镜像私服](https://blog.csdn.net/Erica_java/article/details/127296509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对你无可奈何2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值