Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kubernetes1.21搭建harbor

Kubernetes1.21搭建harbor

原创
作者头像
对你无可奈何
修改于 2021-09-03 03:01:14
修改于 2021-09-03 03:01:14
1.3K02
代码可运行
举报
文章被收录于专栏:运维专栏运维专栏
运行总次数:2
代码可运行

背景:

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

image.png
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
4301a4b7774a0237204a44c0e3fbcca.png
代码语言:txt
AI代码解释
复制
git clone https://github.com/goharbor/harbor-helm

helm必备

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

041c26c6d632bbd5561c360a75c1cc5.png
041c26c6d632bbd5561c360a75c1cc5.png
代码语言:txt
AI代码解释
复制
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的方式

代码语言:txt
AI代码解释
复制
[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
image.png

修改配置文件

修改value.yaml配置文件:

集群使用traefik代理外部访问。expose type设置了clusterIP.设置了externalURL,storageclass。如下:

type:

image.png
image.png

externalURL:

image.png
image.png

storageclass:

image.png
image.png

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

helm install安装

代码语言:txt
AI代码解释
复制
helm install harbor -f values.yaml . --namespace kube-ops
kubectl get pods -n kube-ops -w  
2bd310ee496179a0725a49a03725877.png
2bd310ee496179a0725a49a03725877.png
image.png
image.png

注:此图后补的

helm upgrade

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

代码语言:txt
AI代码解释
复制
helm upgrade harbor -f values.yaml . --namespace kube-ops

如删除harbor应用,则:

代码语言:txt
AI代码解释
复制
helm uninstall harbor -n kube-ops

traefik代理harbor对外暴露应用:

ingressroute:

cat ingress-harbor.yml

代码语言:txt
AI代码解释
复制
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
代码语言:txt
AI代码解释
复制
kubectl apply -f ingress-harbor.yaml
image.png
image.png

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

image.png
image.png
image.png
image.png

traefik ingress

试一下ingress的方式

image.png
image.png
image.png
image.png
代码语言:txt
AI代码解释
复制
helm upgrade harbor -f values.yaml . --namespace kube-ops
image.png
image.png

注意:这里绑定了 另外一个域名!

web访问也是正常的!

-----------------------------分隔符------------------------------------------------------------------------------

出现的其他问题:

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

0b6974bf2cea0087d864a1e2c588d2f.png
0b6974bf2cea0087d864a1e2c588d2f.png

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

1bbcf3787fec914dd5858b33af7cba2.png
1bbcf3787fec914dd5858b33af7cba2.png

最后偷懒用了一个简单的方法:

新建一个slb 。将主要的slb上面摘下个server放在新的slb上面。直接tcp代理。不做http强跳https。

image.png
image.png
代码语言:txt
AI代码解释
复制
 kubectl create secret tls all-xxxx-com --key=2_xxxx.com.key --cert=1_xxxx.com_bundle.crt -n kube-ops
image.png
image.png

ingress.yaml

代码语言:txt
AI代码解释
复制
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
代码语言:txt
AI代码解释
复制
kubectl apply -f ingress.yaml

image.png
image.png

image.png
image.png

还发现一个好玩的;

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

代码语言:txt
AI代码解释
复制
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
image.png
image.png

嗯呢要更新一下依赖了....

后记:

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

image.png
image.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Traefik 使用指北
Traefik 的网络入口点。定义接收数据包的端口,以及是侦听 TCP 还是 UDP。
gopher云原生
2021/10/18
1.9K0
TraefikIngressRoute配置
端口说明: 8080是dashboard 80是http入口 443是https入口
mikelLam
2022/10/31
6380
TraefikIngressRoute配置
Kubernetes (K8S)中Traefik中间件(Middleware)
Traefik Middlewares 是一个处于路由和后端服务之前的中间件,在外部流量进入 Traefik,且路由规则匹配成功后,将流量发送到对应的后端服务前,先将其发给中间件进行一系列处理(类似于过滤器链 Filter,进行一系列处理),例如,添加 Header 头信息、鉴权、流量转发、处理访问路径前缀、IP 白名单等等,经过一个或者多个中间件处理完成后,再发送给后端服务,这个就是中间件的作用。 Traefik内置了很多不同功能的Middleware,主要是针对HTTP和TCP,这里挑选几个比较常用的进行演示。
王先森sec
2023/10/17
1.1K0
Kubernetes (K8S)中Traefik中间件(Middleware)
基于ArgoCD的GitOps实践
GitOps 是 Weaveworks 提出的一种持续交付方式,它的核心思想是将应用系统的声明性基础架构 和应用程序存放在 Git 版本库中。将 Git 作为交付流水线的核心,每个开发人员都可以提交拉取请求 (Pull Request)并使用 Git 来加速和简化 Kubernetes 的应用程序部署和运维任务。通过使用像 Git 这样的简单工具,开发人员可以更高效地将注意力集中在创建新功能而不是运维相关任务上(例如,应用系统安装、配置、迁移等)。
100000798482
2023/03/19
1.4K0
基于ArgoCD的GitOps实践
TKE之Traefik最佳实践
k8s的接入层有很多种,常见的7层负载均衡有nginx-ingress、traefik、kong等,还有每个云厂商为了对接自己的负载均衡产品所开发的控制器,tke集群现在默认是clb类型ingress,也支持组件安装nginx-ingress到集群内使用,其他类型的网关,需要自己在集群内部署才行,今天我们讲讲traefik在tke上的部署安装和一些使用实践。
聂伟星
2022/03/18
2.5K0
附021.Traefik-ingress部署及使用
[root@master01 ingress]# helm repo add traefik https://containous.github.io/traefik-helm-chart
木二
2020/06/04
1.3K0
Kubernetes 1.20.5 helm 安装jenkins
前面https://www.yuque.com/duiniwukenaihe/ehb02i/dkwh3p的时候安装了cilium hubble的时候安装了helm3.
对你无可奈何
2021/03/31
3.2K0
Kubernetes (K8S)中Traefik路由(ingressRoute)
kubernetes 中使用 Traefik ingress 的 ingressRoute 代理 http、https、tcp、udp。
王先森sec
2023/10/17
3.1K0
Kubernetes (K8S)中Traefik路由(ingressRoute)
# 一篇文章让你搞懂如何在K8s 里使用 Traefik 2.0作为Ingress Controller(上)
了解K8s的同学应该都知道,如果想要把应用暴露到公网上供外部访问,那么不可避免的会接触到Ingress资源。本文以Traefik为例,让大家对Ingress和Traefik的使用有一定的了解。
100000798482
2020/02/13
1.2K0
# 一篇文章让你搞懂如何在K8s 里使用 Traefik 2.0作为Ingress Controller(上)
Traefik 企业实战:路由规则篇
首先,当部署完后启动 Traefik 时,定义了入口点(端口号和对应的端口名称),然后 Kubernetes 集群外部就可以通过访问 Traefik 服务器地址和配置的入口点对 Traefik 服务进行访问,在访问时一般会带上 “域名” + “入口点端口”,然后 Traefik 会根据域名和入口点端口在 Traefik 路由规则表中进行匹配,如果匹配成功,则将流量发送到 Kubernetes 内部应用中与外界进行交互。这里面的域名与入口点与对应后台服务关联的规则,即是 Traefik 路由规则。Traefik 创建路由规则有多种方式:
用户1107783
2023/09/11
5960
Traefik 企业实战:路由规则篇
Kubernetes生态Ingress组件Traefik v2.0浅析
上一篇文章简单介绍了下Kubernetes生态的几个组件,这篇文章重点讲解下其中的Traefik组件,Traefik组件类似与Nginx,可以为整个集群做服务暴露、域名控制等等的作用,目前Traefik主要分为两个版本,v1.x与v2.x,这两个版本之间差距较大,让人感觉在使用不同的软件。本篇文章是以v2.x版本为基础来演示的,相关脚本代码都在Github仓库https://github.com/lateautumn4lin/KubernetesResearch里面,大家使用的时候可以切换目录到ClusterEcology/initTraefik下面。
云爬虫技术研究笔记
2020/02/19
8660
Kubernetes的Ingress控制器比较(Traefik)
Traefik支持动态配置和静态配置,因此在实践的过程中,我们将Traefik运行的端口配置在静态配置文件中,Traefik因为功能的丰富性得到很多的人的青睐,尤其是它的弹性功能,从大量的技术博客上观察来看,现在很多人在使用并且很稳定,对于ingress-nginx来说,能动态配置的Traefik显然略胜一筹,这是一个非常大且好的升级。更多的功能点可以在官方文档(https://docs.traefik.io/)详细查阅:
公众号: 云原生生态圈
2021/11/15
2K0
Kubernetes的Ingress控制器比较(Traefik)
traefik系列之二 | 路由(ingressRoute)
基于 centos7.9,docker-ce-20.10.18,kubelet-1.22.3-0, traefik-2.9.10
Amadeus
2023/04/27
2.6K0
traefik系列之二 | 路由(ingressRoute)
TKE上部署treafik2
腾讯云上有默认的提供的ingress服务,如果你不想用提供的,想用最新的treafik来暴露服务通过域名访问也是可以的。下面我们来部署操作下。
聂伟星
2020/06/10
8960
使用traefik暴露常用kubernetes服务的方法
其中 k8s dashboard 的服务比较特殊,因为原来就是https,需要配置 insecureSkipVerify。
tanmx
2023/10/18
4460
使用traefik暴露常用kubernetes服务的方法
Jenkins在kubernetes上的落地实践
创建pv/pvc对象,这里我们要注意nfs提供给jenkins的存储目录的权限问题,否则服务因为权限无法写入数据:
公众号: 云原生生态圈
2020/06/15
8830
Jenkins在kubernetes上的落地实践
还不会Traefik?看这篇文章就够了!(文末送书)
暂且我们把Traefik当成和Nginx差不多的一类软件,待读完整篇文章,你就会对Traefik有不一样的认识。
没有故事的陈师傅
2021/11/12
4.7K0
还不会Traefik?看这篇文章就够了!(文末送书)
Traefik 企业实战:中间件(Middleware)篇
Traefik Middlewares 是一个处于路由和后端服务之前的中间件,在外部流量进入 Traefik,且路由规则匹配成功后,将流量发送到对应的后端服务前,先将其发给中间件进行一系列处理(类似于过滤器链 Filter,进行一系列处理),例如,添加 Header 头信息、鉴权、流量转发、处理访问路径前缀、IP 白名单等等,经过一个或者多个中间件处理完成后,再发送给后端服务,这个就是中间件的作用。Traefik内置了很多不同功能的Middleware,主要是针对HTTP和TCP,这里挑选几个比较常用的进行演示。
用户1107783
2023/09/11
9820
Traefik 企业实战:中间件(Middleware)篇
在 Kubernetes 集群上部署 VSCode
近来由于武汉冠状病毒疫情的扩散,很多公司不得不开始了远程办公的模式,远程办公最大的成本自然是沟通成本了,对于我们开发人员来说最重要的自然也是有一个顺手的 IDE 工具,现在在云端作业的工具也在逐渐增长,比如最近比较流行的设计应用 Figma,就完全是云端操作的方式,大有要取代 Sketch 的趋势,对于开发工具来说云端 IDE 也逐渐受到大家重视,特别是对于远程办公的团队,Cloud IDE 允许开发团队在一个统一的开发环境中实时协作的工具,这可以大大提高生产效率。而且只需要通过 web 浏览器就可以访问,还有一个优点就是可以利用集群的能力,这可以大大超过我们之前的个人 PC 的处理能力,我们也不用为本地 IDE 占用了电脑大量资源而苦恼了。
我是阳明
2020/06/15
1.9K0
在 Kubernetes 集群上部署 VSCode
Traefik2.3.x 使用大全(更新版)
Traefik 是一个开源的可以使服务发布变得轻松有趣的边缘路由器。它负责接收你系统的请求,然后使用合适的组件来对这些请求进行处理。
我是阳明
2021/01/04
5.4K0
Traefik2.3.x 使用大全(更新版)
相关推荐
Traefik 使用指北
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验