03.使用 KubeSphere 安装Harbor并为Docker进行相关配置

简介

Harbor是构建企业级私有Docker镜像的仓库的开源解决方案,是 Docker Registry的更高级封装,除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,还整合了K8s的插件(Add-ons)仓 库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum 可以提供存储chart数据的仓库【注:helm就相当于k8s的yum】
简单来说,作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率,方便了企业用户对image的管理和服务部署等。
本文章将详细介绍如何使用 KubeSphere 安装Harbor并为Docker进行相关配置。

往期文章参考:
01.使用 KubeKey 在Linux上预配置生产就绪的 Kubernetes 和 KubeSphere 集群
02.Kubernetes 和 KubeSphere 集群安装配置持久化存储(nfs)并通过StatefulSet动态为pod生成pv挂载
版本如下

名称版本
CentOS7.6+
Kubernetes1.23.8
KubeSphere3.3.1
Harbor2.5.3
主机分配
主机名称IP角色容器运行时容器运行时版本
master01192.168.0.3control plane, etcd, workerdocker19.3.8+
node01192.168.0.5workerdocker19.3.8+
node02192.168.0.7workerdocker19.3.8+
node03192.168.0.8workerdocker19.3.8+

1. KubeSphere安装Harbor

1.1 Harbor概述

1.1.1 Harbor特性

基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限
基于镜像的复制策略:镜像可以在多个 Harbor 实例之间进行复制(同步)
支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理
审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理
支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易
整合K8s插件仓库:提供存储chart数据的仓库(Helm Charts)

1.1.2 Harbor构成

Proxy: Nginx 前端代理,负责分发前端页面的访问和镜像上传和下载流量
UI:web 管理界面,包括前端页面和后端API,以及存储数据的数据库
Registry:镜像仓库,负责存储镜像文件,当镜像上传完毕后通过 hook 通知 UI 创建 Repository,Registry token 认证也是通过 UI 组件完成
AdminServer:系统的配置管理中心,附带检查存储用量。UI 和 JobService 启动时需要加载 AdminServer 的配置
JobService:与 Registry 通信,负责镜像复制工作,从一个 Registry Pull 镜像,Push 到另一个 Registry,并记录 job_log
Log:日志汇总组件,通过 docker 的 log-driver 把日志汇总到一起

1.2 Harbor安装

下面将介绍如何使用 KubeSphere可视化安装 Harbor,也可以使用docker-compose或者helm等其他方式安装。

docker-compose安装Harbor可参考使用Docker Compose 安装 Harbor

没有安装KubeSphere可在k8s上执行以下命令安装KubeSphere:

# 安装命令:
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.1/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.1/cluster-configuration.yaml
# 检查安装日志: 
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f 
# 查看所有 Pod 在 KubeSphere 相关的命名空间是否正常运行:
kubectl get svc/ks-console -n  kubesphere-system  

[官方参考文档]:在 Kubernetes 上安装 KubeSphere

1.2.1 启用KubeSphere 应用商店

  1. 使用 admin 用户登录控制台,点击左上角平台管理,选择集群管理
  2. 点击定制资源定义,在搜索栏中输入 clusterconfiguration,点击结果查看其详细页面。
  3. 自定义资源中,点击 ks-installer 右侧的操作图标,选择编辑 YAML
  4. 在该 YAML 文件中,搜索 openpitrix,将 enabledfalse 改为 true。完成后,点击右下角确定,保存配置。
openpitrix:
  store:
    enabled: true # 将“false”更改为“true”。
  1. 在 kubectl 中执行以下命令检查安装过程:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

详细图文参考 [02.Kubernetes 和 KubeSphere 集群安装配置持久化存储(nfs)并通过StatefulSet动态为pod生成pv挂载]中的第三节 KubeSphere存储持久化和其他组件安装

1.2.2 创建企业空间和项目

  1. 使用 admin 用户登录控制台,点击左上角平台管理,选择访问控制

在这里插入图片描述
在这里插入图片描述

  1. 点击企业空间,继续点击左侧 创建按钮,填写自己所需的企业空间信息后,并点击创建按钮。

在这里插入图片描述
在这里插入图片描述

  1. 点击列表中刚才创建的企业空间,然后点击 项目 ,继续点击创建按钮,填写要创建的项目信息,并确定

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  1. 点击列表中刚才创建的 项目。进入后,选择 应用负载 中的 应用 ,点击创建。 选择从应用商店,进入后搜索harbor即可。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.2.3 修改Harbor应用设置并安装

  1. 点击 Harbor ,进入后点击安装,选择下一步

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 如果不想使用ingress网关访问Harbor,则需要进行以下设置,然后点击安装
expose:
  type: nodePort # 将 type 更改成 nodePort。
  tls:
    enabled: false # 关闭 tls。
    certSource: auto
    auto:
      commonName: "192.168.0.5" # 将 commonName 更改成您自己的值。
    secret:
      secretName: ""
      notarySecretName: ""
  nodePort:
    # NodePort 服务的名称。
    name: harbor
    ports:
      http:
        # 使用 HTTP 服务时,Harbor 监听的服务端口。
        port: 80
        # 使用 HTTP 服务时,Harbor 监听的节点端口。
        nodePort: 30002
      https:
        # 使用 HTTPS 服务时,Harbor 监听的服务端口。
        port: 443
        # 使用 HTTPS 服务时,Harbor 监听的服务端口。
        nodePort: 30003
      # 仅在 notary.enabled 设置为 true 时需要此配置。
      notary:
        # Notary 监听的服务端口。
        port: 4443
        # The node port Notary listens on
        nodePort: 30004
externalURL: http://192.168.0.5:30002 # 使用您自己的 IP 地址。

# The internal TLS used for harbor components secure communicating. In order to enable https
# in each components tls cert files need to provided in advance.

在这里插入图片描述

  1. 再次回到刚才新建的企业空间,查看项目下的应用负载,当Harbor的状态为running时就安装成功了。

在这里插入图片描述

2. Docker配置使用Harbor私有仓库

2.1 Docker配置

以下操作需要在集群每个节点执行

2.1.1 添加私有仓库地址

# 修改docker配置文件添加harbor地址
# vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.0.5:30002"]
}
# 集群每台主机需要重新启动docker加载配置
systemctl daemon-reload
systemctl restart docker
# 集群每台主机登录下仓库
[root@master01 docker]# docker login 192.168.0.5:30002
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2.2 使用Harbor仓库

初始账号密码
Account: admin
Password: Harbor12345

2.2.1 创建仓库项目

# 给自己要上传的镜像打上仓库项目地址tag,再使用push命令上传
[root@master01 ~]# docker tag basecloud-web 192.168.0.5:30002/test01/basecloud-web:1.0.0
[root@master01 ~]# docker push  192.168.0.5:30002/test01/basecloud-web:1.0.0            
The push refers to repository [192.168.0.5:30002/test01/basecloud-web]
6e75cef470bf: Pushed 
89961e3ae11e: Pushed 
52afd6b950f3: Pushed 
9aace8084497: Pushed 
101af4ba983b: Pushed 
d8466e142d87: Pushed 
83ba6d8ffb8c: Pushed 
e161c82b34d2: Pushed 
4dc5cd799a08: Pushed 
650abce4b096: Pushed 
1.0.0: digest: sha256:a33b854837dd1aaac8c2225273cf1fb418372a4e30b9aeb9d57942ee3da6efa2 size: 2406
[root@master01 ~]# 回到项目界面,点击进入,可以看到仓库已有刚才上传的镜像了
[root@master01 ~]# 拉取刚才上传的镜像示例  docker pull  192.168.0.5:30002/test01/basecloud-web:1.0.0  

在这里插入图片描述

往期文章参考:
01.使用 KubeKey 在Linux上预配置生产就绪的 Kubernetes 和 KubeSphere 集群
02.Kubernetes 和 KubeSphere 集群安装配置持久化存储(nfs)并通过StatefulSet动态为pod生成pv挂载

### 在 KubeSphere配置 Harbor 支持 HTTP 协议 要在 KubeSphere配置 Harbor 以支持 HTTP 协议,需按照以下方法操作: #### 修改 `harbor.yml` 文件 在部署 Harbor 前,需要编辑 `harbor.yml` 文件并设置通信协议为 HTTP。默认情况下,Harbor 可能会尝试使用 HTTPS 进行通信,如果未正确配置 SSL 证书,则会出现错误提示【ERROR:root:Error: The protocol is https but attribute ssl_cert is not set】[^2]。 因此,在 `harbor.yml` 文件中找到 `protocol` 字段,并将其更改为 `http`。以下是示例配置: ```yaml # harbor.yml ... hostname: your-harbor-hostname http: port: 80 https: port: 443 certificate: /path/to/cert.pem private_key: /path/to/key.pem ... ``` 在此处仅保留 `http` 部分的配置,删除或注释掉 `https` 部分的相关字段。 --- #### 设置外部访问 URL (`externalURL`) 为了确保能够正常访问 Harbor 实例,请务必指定 `externalURL` 参数。此参数对于解决潜在的访问问题非常重要[^1]。可以在 `values.yaml` 或 Helm Chart 的自定义配置文件中添加如下内容: ```yaml global: externalURL: http://your-harbor-domain.com ``` 这里的域名应指向实际部署 Harbor 的节点地址,并通过 HTTP 访问。 --- #### 调整 Kubernetes Service 类型 由于 Harbor 默认监听的是内部端口 (如 5000),为了让外部可以通过 HTTP 协议访问,建议将对应的服务暴露为 NodePort 类型。具体做法是在 Helm 安装过程中或者后续更新服务时调整 YAML 文件中的 `service.type` 和 `nodePort` 属性。例如: ```yaml service: type: NodePort nodePorts: core: 30900 registry: 30700 ``` 上述配置分别指定了 Core 组件和 Registry 组件使用的 NodePort 端口号。这些端口可以自由选择,但要确保不与其他服务冲突。 --- #### 更新 Docker Compose 配置(可选) 如果手动安装Harbor 并涉及 `docker-compose.yml` 文件,则还需要确认其中的端口映射是否正确。例如,验证是否存在类似下面的内容: ```yaml ports: - "5000:5000" ``` 这一步通常适用于单机环境下的 Harbor 部署场景[^3]。 --- #### 测试连接 完成以上更改后重新启动 Harbor 服务,并测试能否通过浏览器或其他工具成功访问 HTTP 地址。例如: ``` curl http://<NodeIP>:<NodePort> ``` 此外,当集成了 KubeSphere 后,还需检查 DevOps 工程是否已正确定义镜像拉取路径以及认证方式[^4]。 --- ### 总结 综上所述,配置 KubeSphere 中的 Harbor 使用 HTTP 主要是通过修改 `harbor.yml` 文件设定协议、指定 `externalURL` 参数、调整 Kubernetes Service 暴露模式来实现。最终目标是让客户端可以直接经由 HTTP 请求与 Harbor API 或注册表交互。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值