目录
一、Harbor介绍
二、Harbor部署
一、Harbor介绍
- 基于策略的镜像复制:可以在不同的镜像仓库中对镜像进行复制传送,比如我们可以在官方镜像仓库中定义一个策略,让他实时地同步到我们自己的私有镜像仓库中。
- 镜像的漏洞扫描:在我们真正的生产运维环境中,当一台机器需要上架,需要安装linux或windows系统,以及可能安装了我们的应用,如果需要对外发布的话,我们需要接入到漏洞扫描机器,出具一个漏扫的报告,只有当漏扫通过,这样的机器才允许上架,接入整个数据中心。那么对于镜像也一样,需要通过漏扫才能正常去使用。
- AD/LDAP集成:在 Kubernetes 环境中实现 Active Directory (AD) 和 Lightweight Directory Access Protocol (LDAP) 集成,通常是为了实现身份验证和授权服务,例如通过使用 Active Directory 作为用户的中央身份存储库。这可以通过几种不同的方法实现,包括使用 Kubernetes 的 RBAC(Role-Based Access Control)与外部身份提供商(如 AD 或 LDAP)集成。
- 镜像的删除和空间清理:我们可以把一些没有标签或者悬空的镜像,进行清理。
- 审计日志:哪些用户登陆到镜像仓库平台,做了哪些事情,我们都需要一个完整的日志记录,事后可以分析。
- Harbor提供了Restful API,我们可以通过接口调用执行一些自动化的事情。
- Harbor的部署也相对简单,比如使用docker compose,在k8s里面可以基于Helm。
Harbor仓库组件介绍
- Notary:安全验证的服务。
- Registry V2:镜像仓库服务。负责储存 Docker 镜像,并处理 Docker push/pull 命令。
- nginx : 是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。
- Registry:
- UI(harbor-ui): 提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。
- Database(harbor-db):为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。
- Job services: 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。
- Log collector(harbor-log): 负责收集其他组件的日志到一个地方。
二、Harbor部署
1、创建namespace
我们针对harbor的组件以及pod都会放在namespace为harbor的空间之下。
[root@k8s-master helm]# cat namespace-harbor.yaml
apiVersion: v1
kind: Namespace
metadata:
name: harbor
[root@k8s-master helm]# kubectl apply -f namespace-harbor.yaml
2、选择节点进行 harbor 安装「可选」
编辑harbor命名空间配置参数, scheduler.alpha.kubernetes.io/node-selector: harbor=env表示选择一个具备harbor=env标签的节点上进行部署pod。
比如想让我们的harbor仓库只运行在有打k=v标签的node节点上的话,那么你可以进行这部分的设置。好处是,可以对这些运行harbor仓库的pod进行节点部署上的约束,避免在太多节点上分散。
[root@k8s-master helm]# kubectl edit ns harbor -o yaml
apiVersion: v1
kind: Namespace
metadata:
annotations:
scheduler.alpha.kubernetes.io/node-selector: harbor=env
name: harbor
# 选择 node 进行标签设定
[root@k8s-master helm]# kubectl label node k8s-node3 harbor=env
3、添加
helm repo
添加harbor仓库的源。
[root@k8s-master helm]# helm repo add harbor https://helm.goharbor.io
[root@k8s-master helm]# helm search repo
NAME CHART VERSION APP VERSION DESCRIPTION
harbor/harbor 1.11.0 2.7.0 An open source trusted cloud
native registry th...
[root@k8s-master helm]# helm pull harbor/harbor
[root@k8s-master helm]# tar zxf harbor-1.11.0.tgz
[root@k8s-master opt]# cd harbor/
[root@k8s-master harbor]# ls
cert Chart.yaml conf LICENSE README.md templates values.yaml
通过helm把对应安装harbor仓库的chart下载到本地。可以通过--version指定版本。
打开values.yaml文件,修改里面的:
- 将所有的storageClass的值该为之前我们部署nfs的时候对象名称:nfs-client。如果没有部署nfs客户端对象的话,需要部署下这个。
- 将漏扫中的skipUpdate值改为true,跳过更新。
域名没改的话默认为:core.harbor.domain。将域名和ip添加到/etc/hosts里面。
打开浏览器,输入域名:
用户名:admin,密码:Harbor12345