KubeSphere 与 Harbor HTTPS 集成:安全镜像管理实践指南

一、背景与需求分析

在容器化部署环境中,镜像仓库的安全性直接关系到整个应用交付链的可靠性。Harbor 作为开源的企业级镜像仓库解决方案,通过 HTTPS 协议传输可有效防止镜像在传输过程中被篡改或窃取。KubeSphere 作为全栈化的容器管理平台,与 Harbor 的深度集成能够实现:

  1. 镜像拉取的加密传输
  2. 细粒度的访问权限控制
  3. 镜像扫描与漏洞管理
  4. 审计日志的完整记录

二、前置条件准备

2.1 Harbor 端配置

  1. 证书生成

    1. # 生成私钥
    2. openssl genrsa -out harbor.key 2048
    3. # 生成证书签名请求
    4. openssl req -new -key harbor.key -out harbor.csr \
    5. -subj "/CN=harbor.example.com/O=DevOps Team"
    6. # 生成自签名证书(生产环境应使用CA签发)
    7. openssl x509 -req -days 365 -in harbor.csr -signkey harbor.key -out harbor.crt
  2. Harbor 配置

    • 修改 harbor.yml
      1. https:
      2. certificate: /path/to/harbor.crt
      3. private_key: /path/to/harbor.key
      4. harbor_admin_password: StrongPassword123!
    • 执行 ./install.sh 重新部署

2.2 KubeSphere 端准备

  1. 确保集群节点可访问 Harbor 的 443 端口
  2. 准备 ServiceAccount 用于镜像拉取(可选)

三、集成实施步骤

3.1 证书导入配置

  1. 将证书添加到集群信任链

    1. # 将证书复制到所有节点
    2. scp harbor.crt node1:/etc/docker/certs.d/harbor.example.com/
    3. scp harbor.crt node2:/etc/docker/certs.d/harbor.example.com/
    4. # 创建证书目录(如不存在)
    5. mkdir -p /etc/docker/certs.d/harbor.example.com
  2. KubeSphere 配置方式

    • 方法一:通过 UI 配置

      1. 进入「集群管理」→「配置中心」→「密钥」
      2. 创建类型为 Opaque 的密钥,内容为:
        1. apiVersion: v1
        2. kind: Secret
        3. metadata:
        4. name: harbor-cert
        5. type: Opaque
        6. data:
        7. .dockerconfigjson: <base64-encoded-config>
    • 方法二:通过 kubectl 创建:

      1. kubectl create secret generic harbor-cert \
      2. --from-file=harbor.crt=/path/to/harbor.crt \
      3. -n kube-system

3.2 创建镜像仓库凭证

  1. 在 KubeSphere 控制台:

    • 进入「项目设置」→「镜像仓库」
    • 选择「添加镜像仓库」
    • 填写参数:
      • 仓库地址:https://harbor.example.com
      • 认证模式:选择「用户名密码」
      • 用户名:admin(或具有读取权限的账号)
      • 密码:对应密码
      • 证书:选择之前创建的 harbor-cert
  2. 命令行方式

    1. kubectl create secret docker-registry regcred \
    2. --docker-server=harbor.example.com \
    3. --docker-username=admin \
    4. --docker-password=StrongPassword123! \
    5. --docker-email=admin@example.com \
    6. -n <namespace>

3.3 验证集成效果

  1. 测试镜像拉取

    1. # 创建测试Pod
    2. cat <<EOF | kubectl apply -f -
    3. apiVersion: v1
    4. kind: Pod
    5. metadata:
    6. name: test-pod
    7. spec:
    8. containers:
    9. - name: busybox
    10. image: harbor.example.com/library/busybox:latest
    11. imagePullSecrets:
    12. - name: regcred
    13. EOF
  2. 查看拉取日志

    1. kubectl describe pod test-pod | grep "Pulling image"

四、高级配置选项

4.1 项目级镜像仓库

  1. 在项目设置中创建专用凭证
  2. 通过 imagePullSecrets 字段指定:
    1. spec:
    2. template:
    3. spec:
    4. imagePullSecrets:
    5. - name: project-regcred

4.2 自动证书更新

  1. 使用 cert-manager 实现证书自动轮换:
    1. apiVersion: cert-manager.io/v1
    2. kind: Certificate
    3. metadata:
    4. name: harbor-cert
    5. spec:
    6. secretName: harbor-tls
    7. issuerRef:
    8. name: letsencrypt-prod
    9. dnsNames:
    10. - harbor.example.com

4.3 网络策略控制

  1. apiVersion: networking.k8s.io/v1
  2. kind: NetworkPolicy
  3. metadata:
  4. name: allow-harbor
  5. spec:
  6. podSelector: {}
  7. policyTypes:
  8. - Egress
  9. egress:
  10. - to:
  11. - ipBlock:
  12. cidr: <harbor-ip>/32
  13. ports:
  14. - protocol: TCP
  15. port: 443

五、故障排查指南

5.1 常见问题处理

  1. 证书错误

    • 现象:x509: certificate signed by unknown authority
    • 解决:检查证书是否完整导入所有节点
  2. 认证失败

    • 现象:Unauthorized
    • 检查:
      • 用户名密码是否正确
      • 用户是否有对应项目的读取权限
      • Harbor 是否开启了「阻止未授权访问」
  3. 连接超时

    • 检查:
      • 网络策略是否放行 443 端口
      • Harbor 服务是否正常运行
      • 负载均衡器配置是否正确

5.2 日志分析

  1. Kubelet 日志

    1. journalctl -u kubelet -f | grep "image pull"
  2. Harbor 访问日志

    1. tail -f /var/log/harbor/access.log

六、最佳实践建议

  1. 证书管理

    • 生产环境使用商业 CA 签发的证书
    • 设置证书自动轮换机制
    • 将证书存储在 Secret 而不是 ConfigMap 中
  2. 权限控制

    • 遵循最小权限原则
    • 为不同项目创建独立的服务账号
    • 定期审计用户权限
  3. 性能优化

    • 在同一区域部署 Harbor 和 KubeSphere
    • 配置 Harbor 的缓存代理
    • 使用对象存储作为后端存储
  4. 备份策略

    • 定期备份 Harbor 的数据库
    • 备份所有自定义证书
    • 测试备份恢复流程

通过以上步骤,您可以在 KubeSphere 环境中安全可靠地集成 Harbor 镜像仓库,为容器化应用提供坚实的镜像管理基础。实际部署时,建议先在测试环境验证所有配置,再逐步推广到生产环境。