写点什么

云原生(三十六) | Kubernetes 篇之 Harbor 入门和安装

作者:Lansonli
  • 2022 年 9 月 05 日
    广东
  • 本文字数:3188 字

    阅读完需:约 10 分钟

云原生(三十六) | Kubernetes篇之Harbor入门和安装

Harbor 入门和安装

一、入门

1、简介

Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器。


作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。


  • 基于角色的访问控制 - 用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。

  • 镜像复制 - 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。

  • 图形化用户界面 - 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。

  • AD/LDAP 支持 - Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。

  • 审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

  • 国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。

  • RESTful API - RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。

  • 部署简单 - 提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式)虚拟设备。

2、核心组件


  • Nginx(Proxy):用于代理 Harbor 的 registry,UI, token 等服务

  • db:负责储存用户权限、审计日志、Dockerimage 分组信息等数据。

  • UI:提供图形化界面,帮助用户管理 registry 上的镜像, 并对用户进行授权

  • jobsevice:负责镜像复制工作的,他和 registry 通信,从一个 registry pull 镜像然后 push 到另一个 registry,并记录 job_log

  • Adminserver:是系统的配置管理中心附带检查存储用量,ui 和 jobserver 启动时候回需要加载 adminserver 的配置。

  • Registry:原生的 docker 镜像仓库,负责存储镜像文件。

  • Log:为了帮助监控 Harbor 运行,负责收集其他组件的 log,记录到 syslog 中

3、安装

3.1、helm 下载 charts


helm repo add harbor https://helm.goharbor.iohelm pull harbor/harbor
复制代码


3.2、定制配置


3.2.1、TLS 证书


$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ${KEY_FILE:tls.key} -out ${CERT_FILE:tls.cert} -subj "/CN=${HOST:lanson.com}/O=${HOST:lanson.com}"
kubectl create secret tls ${CERT_NAME:lanson-tls} --key ${KEY_FILE:tls.key} --cert ${CERT_FILE:tls.cert}

## 示例命令如下openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=*.lanson.com/O=*.lanson.com"
kubectl create secret tls harbor.lanson.com --key tls.key --cert tls.crt -n devops
复制代码


原来证书是 lanson.com 域名 现在用的是 harbor.lanson.com 域名的。 单独创建一个 undefined


3.2.2、values-overrides.yaml 配置


旧版本配置;使用自己的证书。自己的证书要兼容 harbor 里面的组件很麻烦


expose:  type: ingress  tls:    certSource: "secret"    secret:      secretName: "harbor.lanson.com"      notarySecretName: "harbor.lanson.com"  ingress:    hosts:      core: harbor.lanson.com      notary: notary-harbor.lanson.comexternalURL: https://harbor.lanson.cominternalTLS:  enabled: true  certSource: "secret"   #  core:    secretName: "harbor.lanson.com"  jobservice:    secretName: "harbor.lanson.com"  registry:    secretName: "harbor.lanson.com"  portal:    secretName: "harbor.lanson.com"  chartmuseum:    secretName: "harbor.lanson.com"  trivy:    secretName: "harbor.lanson.com"persistence:  enabled: true  resourcePolicy: "keep"  persistentVolumeClaim:    registry:  # 存镜像的      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 5Gi    chartmuseum: #存helm的chart      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 5Gi    jobservice: #      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 1Gi    database: #数据库  pgsql      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 1Gi    redis: #      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 1Gi    trivy: # 漏洞扫描      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 5Gimetrics:  enabled: true
复制代码


  • 新版本配置,harbor 内部组件用默认证书。ingress 需要用自己证书

  • 自己的证书信息给每个 namespace 配置同一个


expose:  #web浏览器访问用的证书  type: ingress  tls:    certSource: "secret"    secret:      secretName: "harbor.lanson.com"      notarySecretName: "harbor.lanson.com"  ingress:    hosts:      core: harbor.lanson.com      notary: notary-harbor.lanson.comexternalURL: https://harbor.lanson.cominternalTLS:  #harbor内部组件用的证书  enabled: true  certSource: "auto"persistence:  enabled: true  resourcePolicy: "keep"  persistentVolumeClaim:    registry:  # 存镜像的      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 5Gi    chartmuseum: #存helm的chart      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 5Gi    jobservice: #      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 1Gi    database: #数据库  pgsql      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 1Gi    redis: #      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 1Gi    trivy: # 漏洞扫描      storageClass: "rook-ceph-block"      accessMode: ReadWriteOnce      size: 5Gimetrics:  enabled: true
复制代码


3.2.3、安装


 #注意,由于配置文件用到secret,所以提前在这个名称空间创建好 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.cert -subj "/CN=*.lanson.com/O=*.lanson.com"kubectl create secret tls lanson.com --key tls.key --cert tls.cert -n devops
helm install itharbor ./ -f values.yaml -f override.yaml -n devops
复制代码


3.2.4、卸载


#卸载helm uninstall itharbor -n devops
复制代码

二、docker 使用

1、基本配置

1.1、使用 https 方式访问


由于 harbor 使用的是 https。需要 docker 信任这个 https;


# 把xx.cert文件 复制到  /etc/docker/certs.d/harbor.lanson.com/tls.crt
复制代码


云上自定义域名如下操作: 1、配置每个主机的 /etc/hosts 文件。可指定域名地址为 公网ip或者ingress节点所在ip 2、在 /etc/docker/certs.d/ 下面准备域名文件夹(包含非默认的端口号),并把域名的 cert/crt文件复制进去。并且修改文件名叫 xxx.crt,不能是 cert 文件 3、建议配置 ingress 节点所在 ip 。这样我们使用域名来到了 ingress 节点。ingress 节点的 nginx 监听到了此域名,则转发给指定服务


1.2、不使用 https 访问


#修改docker配置文件{"insecure-registries":["https://test.com","192.168.1.13","更多的...."]}
复制代码

2、镜像代理


# 拉取docker官方镜像。并缓存起来。harbor.lanson.com/自己的仓库名/ + /library + /镜像名:版本docker pull harbor.lanson.com/harbor-hub/library/busybox:latest# 第三方。用第三方全名 harbor.lanson.com/objs + 第三方docker pull harbor.lanson.com/objs/redislabs/redis
复制代码


发布于: 刚刚阅读数: 5
用户头像

Lansonli

关注

微信公众号:三帮大数据 2022.07.12 加入

CSDN大数据领域博客专家,华为云享专家、阿里云专家博主、腾云先锋(TDP)核心成员、51CTO专家博主,全网六万多粉丝,知名互联网公司大数据高级开发工程师

评论

发布
暂无评论
云原生(三十六) | Kubernetes篇之Harbor入门和安装_云原生_Lansonli_InfoQ写作社区