KubeSphere 集成 Harbor HTTPS 镜像仓库全攻略

一、背景与需求分析

随着容器化技术的普及,企业对于容器镜像的安全存储和管理需求日益增长。Harbor 作为开源的企业级镜像仓库,提供了权限控制、镜像签名等安全功能,而 KubeSphere 作为开源的容器管理平台,支持多集群、多租户的容器编排。通过 HTTPS 协议集成 Harbor,可以确保镜像传输过程中的数据安全,防止中间人攻击或数据泄露。本文将详细阐述如何在 KubeSphere 中配置 HTTPS 协议以集成 Harbor 镜像仓库。

二、前置条件准备

  1. Harbor 部署与 HTTPS 配置

    • 部署 Harbor:首先需要在服务器上部署 Harbor 镜像仓库,推荐使用 Docker Compose 或 Helm Chart 进行快速部署。
    • HTTPS 证书:为 Harbor 配置 HTTPS 需要有效的 SSL/TLS 证书。可以使用 Let’s Encrypt 免费证书或购买商业证书。将证书文件(如 harbor.crtharbor.key)放置在 Harbor 的配置目录(如 /etc/harbor/ssl)。
    • 修改配置:编辑 Harbor 的配置文件(如 harbor.yml),设置 hostname 为域名,https 相关参数为证书路径和端口(通常为 443)。
    • 重启服务:修改配置后,重启 Harbor 服务以应用 HTTPS 设置。
  2. KubeSphere 环境准备

    • 安装 KubeSphere:确保 KubeSphere 已正确安装在 Kubernetes 集群上,可以通过 kubectl get pods -n kubesphere-system 检查相关 Pod 状态。
    • 网络连通性:确保 KubeSphere 集群能够访问 Harbor 仓库的 HTTPS 端口(443)。

三、KubeSphere 中集成 Harbor 的步骤

1. 创建 Secret 存储证书

在 KubeSphere 中,为了安全地访问 HTTPS 协议的 Harbor 仓库,需要创建一个 Secret 来存储 Harbor 的 CA 证书(如果 Harbor 使用自签名证书)或客户端证书(如果 Harbor 要求双向认证)。

  1. # 假设 Harbor 的 CA 证书为 ca.crt,将其转换为 base64 编码
  2. CA_CERT_BASE64=$(cat /path/to/ca.crt | base64 -w 0)
  3. # 创建 Secret(YAML 示例)
  4. cat <<EOF | kubectl apply -f -
  5. apiVersion: v1
  6. kind: Secret
  7. metadata:
  8. name: harbor-cert-secret
  9. namespace: kubesphere-system # 或其他合适的命名空间
  10. type: Opaque
  11. data:
  12. ca.crt: $CA_CERT_BASE64
  13. EOF

2. 在 KubeSphere 中添加 Harbor 镜像仓库

  1. 登录 KubeSphere 控制台:使用管理员账号登录 KubeSphere Web 控制台。
  2. 进入镜像仓库管理:导航至“平台管理”→“集群管理”→“镜像仓库”。
  3. 添加镜像仓库
    • 点击“添加镜像仓库”按钮。
    • 填写仓库名称(如 harbor-https)。
    • 选择“HTTPS”作为协议类型。
    • 输入 Harbor 仓库的 URL(如 https://harbor.example.com)。
    • 在“认证信息”部分,选择之前创建的 Secret(harbor-cert-secret)作为 CA 证书来源(如果 Harbor 使用自签名证书)。
    • 如果 Harbor 需要用户名和密码认证,填写相应的用户名和密码。
    • 点击“确定”保存配置。

3. 验证集成

  1. 在项目中拉取镜像

    • 进入某个项目,导航至“应用负载”→“工作负载”。
    • 创建一个新的 Deployment 或修改现有的 Deployment,在容器镜像字段中输入 Harbor 仓库中的镜像路径(如 harbor.example.com/library/nginx:latest)。
    • 如果配置正确,KubeSphere 应该能够成功拉取镜像。
  2. 检查日志

    • 如果拉取镜像失败,检查 KubeSphere 和 Harbor 的日志以排查问题。
    • 使用 kubectl logs 查看相关 Pod 的日志,特别是 kubesphere-system 命名空间下的组件日志。

四、常见问题与解决方案

  1. 证书问题

    • 问题:拉取镜像时出现 x509: certificate signed by unknown authority 错误。
    • 解决方案:确保 Secret 中包含正确的 CA 证书,并且该证书是签发 Harbor 服务器证书的 CA。如果是自签名证书,确保所有需要访问 Harbor 的节点都信任该 CA。
  2. 网络问题

    • 问题:无法访问 Harbor 的 HTTPS 端口。
    • 解决方案:检查防火墙规则、安全组设置以及网络策略,确保 KubeSphere 集群可以访问 Harbor 的 443 端口。
  3. 认证问题

    • 问题:即使提供了正确的用户名和密码,仍然无法拉取镜像。
    • 解决方案:检查 Harbor 的用户权限设置,确保该用户有权限访问指定的项目和镜像。同时,确认 KubeSphere 中填写的用户名和密码与 Harbor 中的一致。

五、总结与展望

通过 HTTPS 协议集成 Harbor 镜像仓库到 KubeSphere 中,可以显著提升容器镜像传输的安全性。本文详细介绍了从 Harbor 的 HTTPS 配置到 KubeSphere 中镜像仓库集成的全过程,包括前置条件准备、Secret 创建、镜像仓库添加以及常见问题排查。未来,随着容器技术的不断发展,安全、高效的镜像管理将成为企业容器化部署的关键环节。KubeSphere 和 Harbor 的结合,为企业提供了一个强大而灵活的解决方案。