自建容器镜像仓库与Kubernetes集群部署全流程指南

一、私有容器镜像仓库的架构设计

在容器化部署场景中,私有镜像仓库是保障镜像安全、提升分发效率的核心组件。相较于依赖第三方托管仓库,自建方案具有以下优势:

  1. 数据主权控制:完全掌控镜像存储与访问权限
  2. 网络性能优化:内网环境下的高速镜像拉取
  3. 合规性要求:满足金融、政务等行业的安全审计标准
  4. 成本优化:避免公共仓库的流量费用与存储限制

典型架构采用分层设计:

  • 存储层:使用对象存储或分布式文件系统
  • 计算层:基于Harbor核心服务处理镜像操作
  • 网络层:配置反向代理与负载均衡
  • 安全层:集成LDAP认证与漏洞扫描插件

二、Harbor仓库部署实施

2.1 环境准备与组件安装

建议使用Linux服务器(CentOS/Ubuntu)作为部署节点,硬件配置需满足:

  • CPU:4核及以上
  • 内存:8GB及以上
  • 存储:100GB可用空间(根据镜像规模调整)

通过包管理器安装依赖组件:

  1. # CentOS示例
  2. yum install -y docker-compose docker wget
  3. systemctl enable --now docker
  4. # Ubuntu示例
  5. apt-get install -y docker-compose docker.io wget
  6. systemctl enable --now docker

2.2 安装包获取与解压

从开源社区获取最新稳定版本(示例为v2.14.1):

  1. wget https://github.com/goharbor/harbor/releases/download/v2.14.1/harbor-online-installer-v2.14.1.tgz
  2. tar -xvzf harbor-online-installer-v2.14.1.tgz
  3. cd harbor

2.3 配置文件定制

核心配置文件harbor.yml需重点修改以下参数:

  1. hostname: registry.example.com # 需与DNS解析一致
  2. http:
  3. port: 80
  4. https:
  5. port: 443
  6. certificate: /etc/certs/domain.crt
  7. private_key: /etc/certs/domain.key
  8. # 存储配置(可选对象存储)
  9. storage_service:
  10. oss:
  11. accesskey: your-access-key
  12. secretkey: your-secret-key
  13. region: your-region
  14. bucket: harbor-bucket

2.4 证书配置与DNS解析

生成自签名证书(生产环境建议使用CA证书):

  1. openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key \
  2. -x509 -days 3650 -out domain.crt -subj "/CN=registry.example.com"

配置DNS解析记录(示例为A记录):

  1. registry.example.com IN A 192.168.4.9

2.5 部署与验证

执行预配置与安装命令:

  1. ./prepare
  2. ./install.sh

验证服务状态:

  1. docker-compose ps
  2. # 正常输出应显示所有容器状态为"Up"

三、Docker客户端集成配置

3.1 节点配置修改

编辑/etc/docker/daemon.json文件:

  1. {
  2. "insecure-registries": ["registry.example.com"],
  3. "registry-mirrors": ["https://mirror.example.com"]
  4. }

重启Docker服务使配置生效:

  1. systemctl restart docker

3.2 登录测试

使用默认账号(admin/Harbor12345)进行登录验证:

  1. docker login registry.example.com
  2. # 输入用户名密码后应返回"Login Succeeded"

四、Kubernetes集群镜像迁移

4.1 镜像推送流程

  1. 本地标记镜像:

    1. docker tag nginx:latest registry.example.com/library/nginx:v1
  2. 推送至私有仓库:

    1. docker push registry.example.com/library/nginx:v1

4.2 K8s部署配置

创建Secret存储认证信息:

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. name: regcred
  5. type: kubernetes.io/dockerconfigjson
  6. data:
  7. .dockerconfigjson: <base64-encoded-config>

在Deployment中引用私有镜像:

  1. spec:
  2. containers:
  3. - name: nginx
  4. image: registry.example.com/library/nginx:v1
  5. imagePullSecrets:
  6. - name: regcred

4.3 监控与维护

建议集成以下监控指标:

  • 仓库存储使用率
  • 镜像拉取频率
  • 认证失败次数
  • 磁盘I/O性能

可通过Prometheus+Grafana方案实现可视化监控,配置抓取Harbor的metrics端点。

五、高级功能扩展

5.1 漏洞扫描集成

启用Trivy扫描器需修改Harbor配置:

  1. trivy:
  2. ignoreUnfixed: false
  3. severity: HIGH,CRITICAL
  4. skipUpdate: false

5.2 复制策略配置

实现多仓库同步的配置示例:

  1. - name: "sync-to-backup"
  2. src_registry:
  3. url: "https://registry.example.com"
  4. dest_registry:
  5. url: "https://backup-registry.example.com"
  6. dest_namespace: "library"
  7. trigger:
  8. type: "Manual"

5.3 机器人账号管理

创建具有特定权限的机器人账号:

  1. # 通过Harbor API创建
  2. curl -X POST -u "admin:Harbor12345" \
  3. -H "Content-Type: application/json" \
  4. -d '{"name":"ci-robot","password":"SecurePass123","level":1}' \
  5. https://registry.example.com/api/v2.0/users

六、常见问题处理

  1. 证书错误:确保客户端信任链包含仓库证书,可通过docker pull --insecure-registry临时绕过验证
  2. 网络问题:检查防火墙规则是否放行443/80端口
  3. 存储不足:配置存储配额或扩展存储容量
  4. 性能瓶颈:优化数据库配置,考虑使用外部Redis缓存

通过完整实施上述方案,开发者可构建企业级容器镜像管理体系,实现从镜像构建到Kubernetes部署的全流程自动化。建议定期进行备份演练与安全审计,确保系统稳定运行。