kubernetes1.21搭建harbor(代码片段)

saynaihe saynaihe     2022-12-29     473

关键词:

背景:

一直使用的腾讯云的个人仓库做镜像仓库。早些时候腾讯云有了tcr容器镜像服务:

瞄了一眼感觉略贵。个人也就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方式

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

helm必备

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

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

修改配置文件

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

type:

externalURL:

storageclass:


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

helm install安装

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



注:此图后补的

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


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

traefik ingress

试一下ingress的方式

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


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

出现的其他问题:

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


这样的原因估计是我的slb上面做了http自动跳转https。docker push的时候就出现了异常。网上看了很多解决的方法无从下手。基本上是说这样的?

最后偷懒用了一个简单的方法:
新建一个slb 。将主要的slb上面摘下个server放在新的slb上面。直接tcp代理。不做http强跳https。

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


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

还发现一个好玩的;
我最终是在我的自建集群搭建的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的配置。

体验一下审查服务



嗯呢要更新一下依赖了…

后记:

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

docker搭建harbor私有镜像库(代码片段)

创建harbor私有镜像库一、部署准备:harbor软件包 在部署节点上:1)解压harbor的软件包将harbor目录下所有文件发送到/opt/目录下 tarzxvf harbor-offline-installer-v1.4.0.tgz[[email protected]kubernetes]#cdharbor[[email protected 查看详情

docker------搭建本地私有仓库及horbor私有仓库(代码片段)

目录一.搭建本地私有仓库二.Docker--Harbor私有仓库部署与管理1.Harbor简介①什么是Harbor②Harbor的特性③Harbor的构成2.Harbor部署①部署Docker-Compose服务②部署Harbor服务③启动Harbor④查看Harbor启动镜像⑤创建一个新项目三.维护管理Harbor1... 查看详情

docker------搭建本地私有仓库及horbor私有仓库(代码片段)

目录一.搭建本地私有仓库二.Docker--Harbor私有仓库部署与管理1.Harbor简介①什么是Harbor②Harbor的特性③Harbor的构成2.Harbor部署①部署Docker-Compose服务②部署Harbor服务③启动Harbor④查看Harbor启动镜像⑤创建一个新项目三.维护管理Harbor1... 查看详情

docker—harbor私有仓库搭建(代码片段)

docker一、简介1.1概述1.2特性1.3构成二、部署服务2.1部署harbor服务准备工作2.2修改配置文件2.3启动harbor2.4查看启动镜像2.5创建新项目2.6在其他客户端上传镜像测试三、维护管理harbor3.1创建harbor用户3.2在client使用普通账户操作镜像3.3... 查看详情

docker—harbor私有仓库搭建(代码片段)

docker一、简介1.1概述1.2特性1.3构成二、部署服务2.1部署harbor服务准备工作2.2修改配置文件2.3启动harbor2.4查看启动镜像2.5创建新项目2.6在其他客户端上传镜像测试三、维护管理harbor3.1创建harbor用户3.2在client使用普通账户操作镜像3.3... 查看详情

docker搭建harbor仓库(代码片段)

1.介绍Harbor是由VMware公司中国团队为企业用户设计的Registryserver开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。作为一个企... 查看详情

docker搭建harbor私有仓库时报错怎么办?(代码片段)

一.报错背景docker搭建harbor私有仓库时报错;[root@docker1harbor]#sh/usr/local/harbor/install.sh启动harbor时候报错二.具体报错信息ERROR:fornginxCannotstartserviceproxy:b'driverfailedprogrammingexternalconnectivityone 查看详情

docker搭建harbor私有仓库时报错怎么办?(代码片段)

一.报错背景docker搭建harbor私有仓库时报错;[root@docker1harbor]#sh/usr/local/harbor/install.sh启动harbor时候报错二.具体报错信息ERROR:fornginxCannotstartserviceproxy:b'driverfailedprogrammingexternalconnectivityone 查看详情

搭建harbor仓库ldap认证(代码片段)

ldap:192.168.199.177c5game.com宿主机:192.168.199.224测试客户机:192.168.199.223安装docker、docker-compose访问查看最新版本https://github.com/goharbor/harbor/releases并下载harbor-offline-installer-vxxx.tgz[[email protect 查看详情

centosos搭建harbor私有docker仓库,及harbor使用(代码片段)

一、HarborHarbor是由VMware公司开源的企业级的DockerRegistry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。二、Harbor核心组件Proxy:他是一个nginx的前端代理,代理Harbo... 查看详情

centos7搭建harbor私有仓库(代码片段)

1说明前文Centos7搭建DockerRegistry介绍了DockerRegistry的搭建,但它没有UI页面,因此选择Harbor以下基于镜像CentOS-7-x86_64-Minimal-1804进行搭建均已root用户进行操作2安装docker和docker-compose参见Centos7安装DockerCE安装Docker引擎2.1安装docker-compose... 查看详情

harbor仓库搭建(代码片段)

一.前置条件1.需要安装docker并运行2.需要安装docker-compose  二.下载离线安装包1.tar-zxvf harbor.v1.5.1.tar.gz  2.vimharbor.cfg编辑配置文件1.hostname=A.B.C.D#写你自己的网址或IP,公网访问要写公网IP3../install.sh执行安装脚本三... 查看详情

docker容器:搭建harbor仓库(代码片段)

部署harbor仓库使用10版本的harbor,可以去官网下载还需要安装的是docker-composedocker-compose:解决如何管理多个容器,形成一个完整独立的服务。配置容器时是单独配置,但把容器放到一起,通过docker-compose来控制... 查看详情

linux运维容器篇docker私有仓库harbor生产搭建(代码片段)

文章目录一harbor仓库简介简介和registry对比核心组件二部署harbor仓库安装dockercompoasdocker-ceserver端安装harbor检查结果访问web界面添加项目创建用户server控制台端登陆上传镜像登录上传镜像其他客户端上传镜像解决一harbor仓库简介简... 查看详情

docker搭建本地私有仓库与harbor(代码片段)

目录前言一、搭建Docker私有仓库二、Harbor简介前言Docker三要素:镜像,容器,仓库。仓库分为共有仓库和私有仓库:公有仓库就是DokcerHub。外网,受网络影响大。私有仓库就是搭建在本地服务器中的,公司... 查看详情

docker私有仓库之---harbor仓库的搭建及使用(代码片段)

...源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的DockerRegistry服务。Harbor以Docker公司开源的Registry为基础,提供了图形管理UI、基于角色的访问控制(RoleBasedAccessControl)、AD/LDAP集成、以及审计日志(Auditloggi... 查看详情

利用harbor搭建企业级私有镜像仓库(文末赠书)(代码片段)

利用Harbor搭建企业级私有镜像仓库(文末赠书)收录于话题#Docker专辑9个「点击图片获取最近两年爆款好文」背景docker中要使用镜像,一般会从本地、dockerHup公共仓库和其它第三方公共仓库中下载镜像,一般出于安全和外网(墙)... 查看详情

docker进阶-搭建私有企业级镜像仓库harbor(代码片段)

为什么要搭建私有镜像仓库??对于一个刚刚接触Docker的人来说,官方的Dockerhub是用于管理公共镜像。既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像。我们可以非常方便的把我们自己镜像... 查看详情