Kubernetes无缝集成Harbor,实现CI/CD流水线

Harbor 作为企业级的容器镜像仓库,在 Kubernetes 生态中扮演着核心的镜像管理角色。下面这个表格能帮你快速抓住其核心价值和在案例中的体现:

特性维度 核心价值 在线书店案例体现
统一镜像源 为集群所有节点提供稳定、快速的私有镜像拉取源,避免依赖公网。 所有服务镜像(如book-service, user-service)均从内部Harbor拉取。
基于项目的访问控制 (RBAC) 实现镜像的权限隔离,不同团队管理各自项目。 为前端、后端团队创建独立项目,成员只能访问被授权的项目。
安全扫描 集成漏洞扫描工具,提升供应链安全。 推送镜像时自动扫描,阻止含高危漏洞的镜像部署。
高可用与持久化 确保镜像仓库稳定运行,数据不丢失。 采用外部对象存储和数据库,即使Pod重建数据也完好。

下面,我们以一个名为"BookStore"的在线书店微服务项目为例,详细介绍如何从零搭建Harbor,并将其无缝集成到Kubernetes集群中,实现CI/CD流水线。

🔧 安装与配置 Harbor

1. 选择部署模式与前提准备

首先,根据你的环境选择最合适的部署方式:

部署方式 适用场景 关键步骤/命令
Helm Chart (K8s内) 生产环境,希望与K8s统一管理。 helm repo add harbor https://helm.goharbor.io
Docker Compose 开发、测试环境,快速独立部署。 下载离线包,编辑harbor.yml,运行./install.sh

前提准备:确保你的服务器已安装符合版本的 Docker 和 Docker Compose 。

2. 关键配置详解

在启动安装前,需要仔细配置 harbor.yml(Docker Compose方式)或自定义的 values.yaml(Helm方式)。以下是几个关键配置点:

  • 外部访问与证书 :生产环境必须启用HTTPS
  • 持久化存储:必须为 Harbor 配置持久化存储,以防止数据丢失 。
  • 管理员密码务必修改 默认的管理员密码(harborAdminPassword)。

配置完成后,执行安装脚本(Docker Compose方式)或 Helm 命令即可启动所有服务。通过 docker-compose pskubectl get pods -n harbor确认所有组件状态为 RunningReady

📥 集成 Harbor 与 Kubernetes

要让 Kubernetes 集群能够从私有的 Harbor 仓库拉取镜像,需要进行如下配置,其核心流程是通过创建一个包含 Harbor 认证信息的 Secret 来实现的:

css 复制代码
flowchart TD
    A[在K8s集群中创建Secret] --> B{配置Pod使用Secret}
    B --> C[方式一: Pod/Deployment中直接引用]
    B --> D[方式二: 添加到ServiceAccount<br>实现命名空间级自动引用]
    C --> E[Kubelet使用Secret拉取镜像]
    D --> E

具体操作步骤如下:

  1. 创建镜像拉取密钥(ImagePullSecret)

    在打算部署应用的命名空间下,创建一个 docker-registry类型的 Secret 。

    ini 复制代码
    kubectl create secret docker-registry harbor-regcred \
      --docker-server=harbor.yourcompany.com \
      --docker-username=admin \
      --docker-password=yourpassword \
      --namespace=your-namespace
  2. 在应用部署中引用该 Secret

    在你的 Deployment YAML 中,通过 imagePullSecrets字段指明使用刚才创建的 Secret 。

    yaml 复制代码
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: book-service
    spec:
      template:
        spec:
          containers:
          - name: book-service
            image: harbor.yourcompany.com/bookstore/book-service:v1.0.0 # 必须是完整地址
          imagePullSecrets: # 引用密钥
          - name: harbor-regcred

    请注意,image字段必须是 完整的镜像地址,包含仓库地址、项目路径和标签 。

🚀 项目实战:在线书店的镜像管理

假设你正在部署上述"在线书店"应用,它包含 book-service(图书服务)和 user-service(用户服务)。

  1. 在 Harbor 中创建项目

    登录 Harbor Web UI,为"在线书店"创建两个项目:bookstore/backendbookstore/frontend,并分别为后端和前端开发团队配置推送和拉取权限。

  2. 推送镜像到 Harbor

    在 CI/CD 流水线或开发者本地,构建好镜像后,将其推送到 Harbor 对应的项目中 。

    bash 复制代码
    # 1. 为本地镜像打上符合Harbor规范的标签
    docker tag book-service:latest harbor.yourcompany.com/bookstore/backend/book-service:v1.0.0
    # 2. 登录Harbor(需要先在客户端配置信任证书或insecure-registry)
    docker login harbor.yourcompany.com
    # 3. 推送镜像
    docker push harbor.yourcompany.com/bookstore/backend/book-service:v1.0.0
  3. 在 Kubernetes 中部署

    编写 Deployment YAML 文件,image字段指定为 Harbor 中的镜像地址,并正确引用 imagePullSecrets,然后应用配置 。

    复制代码
    kubectl apply -f book-service-deployment.yaml -n bookstore

🛡️ 企业级增强功能与高可用

  • 启用漏洞扫描:在 Harbor 中启用 Trivy 等扫描器,并配置策略,阻止携带高危漏洞的镜像被拉取 。
  • 高可用与性能优化:对于生产环境,应考虑 Harbor 组件本身的高可用 。

🧩 常见问题排查 (Troubleshooting)

  • Pod 状态为 ImagePullBackOffErrImagePull

    • 检查镜像地址和标签 :使用 docker pull <镜像完整地址>在节点上手动测试。
    • 检查 Secret:确认 Secret 所在命名空间与 Pod 一致,且用户名密码正确。
    • 检查证书:确保 Kubernetes 节点信任 Harbor 的 HTTPS 证书 。
  • Harbor 服务无法访问

    • 检查 Ingress Controller 或 NodePort 服务是否正常 。
  • 推送镜像失败

    • 检查客户端 Docker 守护进程的 insecure-registries配置(仅限 HTTP 或自签名证书测试环境)或是否信任了 Harbor 的 CA 证书 。
相关推荐
会编程的吕洞宾2 小时前
Java中的“万物皆对象”:一场编程界的哲学革命
java·后端
会编程的吕洞宾2 小时前
Java封装:修仙界的"护体罡气"
java·后端
Real_man2 小时前
Python SQLAlchemy 全生命周期指南:从模型、迁移到优雅会话管理
后端
JELEE.3 小时前
Django中的clean()方法和full_clean()方法
后端·python·django
aiopencode3 小时前
iOS 上架工具全解析,从 Xcode 到 开心上架(Appuploader)跨平台命令行免 Mac 上传指南
后端
爱分享的鱼鱼3 小时前
Java基础(六:线程、线程同步,线程池)
java·后端
申阳3 小时前
Day 8:06. 基于Nuxt开发博客项目-我的服务模块开发
前端·后端·程序员
quant_19863 小时前
全面解析美股行情API
经验分享·后端·python·websocket·程序人生·区块链
databook4 小时前
数据分析师的基本功总结
后端·数据分析·求职