4、eBPF制品库初始化:创建私有eBPF制品库(如Harbor或Docker Registry),推送第一个eBPF程序镜像
在eBPF的持续集成与持续部署(CI/CD)流水线中,制品库是连接“编译构建”与“运行时部署”的核心枢纽。本章将指导你完成私有eBPF制品库的初始化,并将第一个eBPF程序镜像推送至仓库,为后续的自动化流量观测奠定基础。
4.1 为什么需要私有eBPF制品库?
eBPF程序通常以字节码对象(.o文件)或容器镜像的形式分发。使用私有制品库可以带来以下核心优势:
- 版本控制与追溯:每次构建的eBPF程序都带有唯一标签(Tag),便于回滚与审计。
- 安全扫描与合规:在推送前对镜像进行漏洞扫描,确保eBPF程序不包含恶意代码。
- 加速部署:在Kubernetes集群中,节点可以直接从私有仓库拉取eBPF DaemonSet镜像,避免依赖外部网络。
- 多环境隔离:通过不同的项目(Project)或仓库(Repository)区分开发、测试、生产环境的eBPF程序。
推荐选择:对于云原生环境,Harbor 提供了更完善的多租户、复制和漏洞扫描能力;对于轻量级场景,Docker Registry 足以满足基本需求。
4.2 私有eBPF制品库架构概览
下图展示了eBPF制品库在CI/CD流水线中的位置及其内部组件关系:
4.3 初始化Harbor私有制品库
以下步骤以Harbor为例,展示如何快速部署并创建eBPF专用项目。如果你使用Docker Registry,可跳过4.3.1直接参考4.3.2的推送命令。
4.3.1 部署Harbor(单节点演示)
# 1. 下载Harbor离线安装包(以v2.8.0为例)
wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-offline-installer-v2.8.0.tgz
tar -xzf harbor-offline-installer-v2.8.0.tgz
cd harbor
# 2. 复制并修改配置文件
cp harbor.yml.tmpl harbor.yml
# 修改 hostname 为你的服务器IP或域名,例如:192.168.1.100
# 修改 harbor_admin_password 为强密码
# 3. 执行安装脚本
sudo ./install.sh
# 4. 验证部署
# 浏览器访问 http://192.168.1.100 ,使用 admin / 设置的密码登录
4.3.2 创建eBPF专用项目
- 登录Harbor Web界面,点击 “新建项目”。
- 填写项目名称:
ebpf-programs。 - 访问级别选择 “私有”(仅授权用户可推送/拉取)。
- 点击 “确定” 完成创建。
关键配置项:在Harbor中,建议开启“自动扫描镜像”功能,确保每次推送的eBPF镜像都经过漏洞检测。
4.4 构建并推送第一个eBPF程序镜像
假设你已经有一个编译好的eBPF程序(例如 tc_xdp.o),下面演示如何将其打包为容器镜像并推送至私有仓库。
4.4.1 编写Dockerfile
# 使用scratch作为基础镜像,仅包含eBPF字节码文件
FROM scratch
COPY tc_xdp.o /ebpf/tc_xdp.o
# 可选:添加元数据标签
LABEL ebpf.program="tc-xdp" \
ebpf.version="1.0.0" \
ebpf.author="devops@example.com"
4.4.2 构建与推送
# 1. 构建镜像(假设Harbor地址为 192.168.1.100)
docker build -t 192.168.1.100/ebpf-programs/tc-xdp:v1.0 .
# 2. 登录Harbor
docker login 192.168.1.100
# 输入用户名(admin)和密码
# 3. 推送镜像
docker push 192.168.1.100/ebpf-programs/tc-xdp:v1.0
# 4. 验证推送结果
# 在Harbor Web界面中,进入 ebpf-programs 项目,应能看到 tc-xdp 仓库及 v1.0 标签
4.5 制品库操作对比
| 操作 | Harbor命令/步骤 | Docker Registry命令/步骤 |
|---|---|---|
| 登录 | docker login <harbor-url> |
docker login <registry-url> |
| 创建项目 | Web界面新建项目 | 无需手动创建(推送时自动创建) |
| 推送镜像 | docker push <harbor-url>/ebpf-programs/<image>:<tag> |
docker push <registry-url>/<image>:<tag> |
| 镜像扫描 | 内置Trivy扫描器 | 需额外集成扫描工具 |
| 多租户 | 支持项目级权限控制 | 无原生多租户支持 |
4.6 验证推送结果
推送完成后,可以通过以下方式确认eBPF镜像已成功存储:
- Web界面:在Harbor的
ebpf-programs项目下,查看tc-xdp仓库的标签列表。 - 命令行:使用
curl调用Harbor API查询仓库信息:
curl -u "admin:your_password" -X GET "http://192.168.1.100/api/v2.0/projects/ebpf-programs/repositories/tc-xdp/artifacts"
常见问题:如果推送失败,请检查:
1. Docker客户端是否已登录到正确的Harbor地址。
2. Harbor项目是否设置为“私有”且当前用户有推送权限。
3. 镜像标签是否包含完整的Harbor项目路径(如
1. Docker客户端是否已登录到正确的Harbor地址。
2. Harbor项目是否设置为“私有”且当前用户有推送权限。
3. 镜像标签是否包含完整的Harbor项目路径(如
192.168.1.100/ebpf-programs/tc-xdp:v1.0)。