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 证书 。
相关推荐
v***913041 分钟前
Spring boot创建时常用的依赖
java·spring boot·后端
Cosolar3 小时前
银河麒麟 / aarch64 系统:Docker + Docker Compose 完整安装教程
后端·程序员·架构
星释3 小时前
Rust 练习册 100:音乐音阶生成器
开发语言·后端·rust
kaliarch3 小时前
2025年IaC生态全景与实践指南:从工具选型到多云治理
后端·云计算·自动化运维
Coder-coco4 小时前
个人健康管理|基于springboot+vue+个人健康管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·mysql·论文
b***65324 小时前
springboot整合mybatis-plus(保姆教学) 及搭建项目
spring boot·后端·mybatis
5***E6854 小时前
Spring Boot与MyBatis
spring boot·后端·mybatis
x***01064 小时前
SpringSecurity+jwt实现权限认证功能
android·前端·后端
5***26224 小时前
Spring Boot问题总结
java·spring boot·后端
风生u4 小时前
go进阶语法
开发语言·后端·golang