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 ps或 kubectl get pods -n harbor确认所有组件状态为 Running或 Ready。

📥 集成 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/backend和 bookstore/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 状态为 ImagePullBackOff或 ErrImagePull:

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

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

    • 检查客户端 Docker 守护进程的 insecure-registries配置(仅限 HTTP 或自签名证书测试环境)或是否信任了 Harbor 的 CA 证书 。
相关推荐
学长毕设15 分钟前
基于springboot的农资管理系统-附源码
java·spring boot·后端
拖孩1 小时前
一个人 + AI 做的小程序,今天,正式回本了
前端·后端·微信小程序
进击的丸子1 小时前
代理网络环境下 Linux Pro 在线激活实操指南
javascript·后端·安全
念何架构之路2 小时前
Go reflect包值操作 Value 的读写、可设置性与 interface 布局
开发语言·后端·golang
小林ixn2 小时前
用 FastAPI + SQLAlchemy 从零手搓一个博客系统:一套能落地、能讲清楚的 RESTful 后端
后端·python·fastapi
不识君2 小时前
esl-client 2.0.0 发布:Java 项目接入 FreeSWITCH,从引入到使用
spring boot·后端·开源
牧瀬クリスだ3 小时前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
Rain的Java大神之路3 小时前
北漂 13 年,我把 Java 家底钉成了这张知识图谱(全站免费)
java·后端·程序员
Amos_Web3 小时前
通过 Rspack 源码学 Rust(一):`mod`、`pub` 与 `use crate`/`use super`
后端
张彦峰ZYF3 小时前
拆得开不等于该拆开:微服务与模块化单体的边界判据、规模阈值、团队适配与一致性代价
后端·微服务·边界是否稳定·扩展天花板是否到顶·有无小组能独立值班·独立部署的自由会否被用上·这一刀是否切断不可降级的不变量