Kubernetes集群公共服务配置Harbor

运维2年前发布 杨帆舵手
145 00
欢迎指数:
参与人数:

在 Kubernetes 集群中,容器镜像的存储与管理至关重要。Harbor 是一个开源的企业级 Docker 镜像仓库,提供安全、可扩展的镜像管理功能。本文将详细介绍如何在 Kubernetes 中配置 Harbor 作为公共服务,实现对镜像的高效管理。

1. 为什么选择 Harbor

Harbor 作为镜像仓库,具备以下显著优点:

  • 安全性:支持角色访问控制(RBAC)、镜像签名、镜像扫描,确保镜像的安全。
  • 企业级功能:包括镜像复制、镜像清理、日志审计等,适用于大规模集群环境。
  • 与 Kubernetes 集成良好:Harbor 可以轻松集成到 Kubernetes 中,提供私有镜像仓库服务。
    以下是 Harbor 架构的示意图:

    graph TD
    A[用户请求] --> B[Harbor API]
    B --> C[镜像管理]
    C --> D[存储后端]

    2. 部署 Harbor 的准备工作

    在部署 Harbor 之前,需要满足以下基本条件:

  • Kubernetes 集群:需要一个已经部署好的 Kubernetes 集群。
  • Helm:Helm 是 Kubernetes 的包管理工具,用于简化 Harbor 的安装和管理。
  • 持久化存储:Harbor 需要持久化存储用于存放镜像数据和元数据信息。

    3. 使用 Helm 安装 Harbor

    Helm 可以简化在 Kubernetes 集群中安装应用程序的过程。以下是安装 Harbor 的步骤。

    3.1 安装 Helm

    如果未安装 Helm,可以使用以下命令进行安装:

    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

    解释:

  • 通过 curl 命令下载并安装 Helm,方便进行 Kubernetes 应用的管理。

    3.2 添加 Harbor 的 Helm 仓库

    helm repo add harbor https://helm.goharbor.io
    helm repo update

    解释:

  • helm repo add:添加 Harbor 的 Helm Chart 仓库。
  • helm repo update:更新 Helm 仓库,确保获取到最新版本的 Harbor Chart。

    3.3 使用 Helm 安装 Harbor

    helm install harbor harbor/harbor --namespace harbor --create-namespace

    解释:

  • helm install:使用 Helm 安装 Harbor。
  • --namespace harbor:将 Harbor 安装到 harbor 命名空间。
  • --create-namespace:创建 harbor 命名空间(如果不存在)。

    4. 配置 Harbor 的外部访问

    Harbor 安装完成后,需要配置其外部访问,以便用户和 Kubernetes 集群可以访问 Harbor。

    4.1 配置 Ingress 控制器

    Harbor 通过 Ingress 资源来暴露服务,使得外部可以通过域名访问。以下是一个 Ingress 配置示例:

    
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: harbor-ingress
    namespace: harbor
    annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    spec:
    rules:
  • host: harbor.example.com
    http:
    paths:
  • path: /
    pathType: Prefix
    backend:
    service:
    name: harbor-core
    port:
    number: 80
    tls:
  • hosts:
  • harbor.example.com
    secretName: harbor-tls

    
    **解释**:
  • host: harbor.example.com:定义外部访问 Harbor 的域名。
  • service.name: harbor-core:指定 Ingress 需要暴露的服务。
  • tls:配置 HTTPS 访问,使用 harbor-tls 证书。

    4.2 创建 TLS 证书

    为了保证访问的安全性,推荐为 Harbor 配置 TLS 证书。可以使用 cert-manager 或其他工具来生成证书,并将其应用到 Kubernetes 中。

    5. 将 Harbor 配置为 Kubernetes 镜像仓库

    为了在 Kubernetes 集群中使用 Harbor 存储镜像,需要将 Harbor 仓库地址添加到集群的 Docker 配置中。

    5.1 配置 Docker Daemon

    在每个 Kubernetes 节点上,更新 Docker Daemon 的配置文件 /etc/docker/daemon.json,添加 Harbor 的地址:

    {
    "insecure-registries": ["harbor.example.com"]
    }

    解释:

  • insecure-registries:用于指定信任的镜像仓库地址(如果使用 HTTPS,需配置正确的 TLS 证书)。
    更新完成后,重启 Docker 服务:

    systemctl restart docker

    6. 推送镜像到 Harbor

    完成 Harbor 的安装和配置后,可以将镜像推送到 Harbor,以供 Kubernetes 集群使用。

    6.1 Docker 登录 Harbor

    首先,使用 Docker 登录 Harbor:

    docker login harbor.example.com

    解释:

  • 使用 Harbor 的域名进行登录,输入用户名和密码。

    6.2 标记并推送镜像

    将镜像标记为 Harbor 仓库的格式,并推送到 Harbor:

    docker tag nginx:latest harbor.example.com/library/nginx:latest
    docker push harbor.example.com/library/nginx:latest

    解释:

  • docker tag:为本地的 nginx 镜像添加一个新的标签,指向 Harbor 仓库。
  • docker push:将镜像推送到 Harbor 的 library 项目下。

    7. 使用 Harbor 镜像部署应用

    在 Kubernetes 集群中,可以直接使用推送到 Harbor 的镜像来部署应用。以下是一个简单的 Deployment 示例:

    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx-deployment
    namespace: default
    spec:
    replicas: 2
    selector:
    matchLabels:
    app: nginx
    template:
    metadata:
    labels:
    app: nginx
    spec:
    containers:
  • name: nginx
    image: harbor.example.com/library/nginx:latest
    ports:
  • containerPort: 80
    
    **解释**:
  • image: harbor.example.com/library/nginx:latest:使用存储在 Harbor 中的 nginx 镜像。

    8. 监控和管理 Harbor

    Harbor 提供了丰富的管理和监控功能,可以帮助用户更好地了解镜像的使用情况。

    8.1 镜像扫描

    Harbor 集成了 Clair 和 Trivy 等镜像扫描工具,帮助用户检测镜像中的安全漏洞。

    8.2 日志审计

    通过 Harbor 的日志审计功能,可以记录所有用户的操作,包括镜像的推送、拉取、删除等,确保对操作的可追溯性。

    9. 总结

    通过在 Kubernetes 集群中配置 Harbor,可以有效地管理和保护容器镜像,提升集群的安全性和资源利用率。Harbor 的企业级功能使得它在镜像管理上具备显著优势,特别是在大规模集群和生产环境中尤为适用。通过 Helm 安装 Harbor 并配置外部访问,能够为 Kubernetes 提供一个可靠的私有镜像仓库,确保集群中所有应用的镜像来源可控、安全。
    ? 学习建议:

    1. 在测试环境中多次尝试安装和配置 Harbor,熟悉 Helm Chart 的安装过程。
    2. 结合 Ingress 和 TLS 证书,确保 Harbor 的外部访问安全可靠。
    3. 充分利用 Harbor 的镜像扫描和日志审计功能,提升镜像的安全性管理。

此站内容质量评分请点击星号为它评分!

您的每一个评价对我们都很重要

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

© 版权声明
广告也精彩

相关文章

广告也精彩

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...